RHEL7--第十章-Apache
使用 Apache 服务部署静态网站
命令字体编号:009900
备注:所有的服务在设置完后,需把服务设置成开机自启: # systemctl enable 服务名称,切记!!
- 网站服务程序
概述:
web网络服务是指允许用户通过浏览器访问到互联网中各种资源的服务;
web网络服务是一种被动访问的服务程序,即只有接受到互联网中主机发出的请求才相应;
web服务器是通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求内容传送给用户;
提供web网络服务的程序:
IIS,Nginx,Apache等
IIS
是windows中默认的web服务程序,还提供FTP,NMTP,SMTP等服务;
Nginx
轻量级网站服务软件,稳定性及丰富的功能,系统资源消耗低且并发能力强;
Apache
RHEL 5,6,7中系统默认的web服务程序;
跨平台和安全性被广泛认可且拥有快速,可靠,简单的API扩展;
支持的系统:Linux,UNIX甚至 windows系统都支持
支持基于IP,域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块,安全socket层(SSL),能实时监视服务状态与定制日志消息;
1:安装Apache:
安装apache服务;
# yum install -y httpd
启用 httpd服务,并设置为开机自启;
# systemctl start httpd
# systemctl enable httpd
2:配置服务文件参数:
httpd服务程序的主要配置文件及存放位置如下:
服务目录: /etc/httpd
主配置文件: /etc/httpd/conf/httpd.conf,下文有举例;
网站数据目录:/var/www/html
访问日志: /var/log/httpd/access_log
错误日志: /var/log/httpd/error_log
个人用户主页功能: /etc/httpd/conf.d/userdir.conf,下文有举例;
1)主配置文件
存在三种类型的信息:注释行信息,全局配置,区域配置;

配置 httpd服务时常用的参数:
ServerRoot 服务目录;
ServerAdmin 管理员邮箱;
User 进行服务的用户;
Group 进行服务的用户组;
ServerName 网站服务器的域名;
DocumentRoot 第119行,定义网站数据的保存目录;下文有举例
Listen 监听的IP地址与端口号;
DirectoryIndex 默认的索引页页面;
Directory 第124行,定义目录权限;下文有举例
ErrorLog 错误日志文件;
CustomLog 访问日志文件;
Timeout 网页超时时间,默认为300秒;
备注:以下参数是 开启个人主页功能的,配置文件路径:/etc/httpd/conf.d/userdir.conf
UserDir 网站数据在用户家目录中的保存目录名称,下文有举例;
2)网站默认值:
默认网站数据目录:/var/www/html
默认的网页首页名称:index.html
修改默认首页信息:
# echo “hello,boy” > /var/www/html/index.html
打开浏览器首页显示:http://127.0.0.1
hello,boy
例1:
修改网站数据的保存路径,参数为 DocumentRoot;
A:建立网站数据的保存目录,并创建首页文件;
# mkdir /home/wwwroot
# echo "hello boy" > /home/wwwroot/index.html
B:编辑httpd主配置文件,将第119行定义网站数据保存路径的参数 DocumentRoot修改为 /home/wwwroot;将124行定于目录权限的参数 Directory 后面的路径改为 /homt/wwwroot,完成;
# vim /etc/httpd/conf/httpd.conf


# systemctl restart httpd
C:测试,登录http://127.0.0.1
备注:
测试失败,原因在于 SELinux 安全子系统!
解决方法3种:
1:修改 SELinux的模式为 disable 或 permissive,重启服务器;
2:临时关闭 SELinux的 enforcing模式,重启后恢复默认值;
3:使用semanage修改新保存目录的SELinux上下文的值;
3:SELinux 安全子系统
- 美国安全局在开源社区帮助下开发的强制访问控制的安全子系统;
- 使用SELinux的目的在于让各个服务进程都受到约束,获取本应获取的资源;
- SELinux能够对服务程序的功能进行限制,对文件资源的访问限制,SELinux安全上下文确保文件资源只被其所属的服务程序进行访问;
- SELinux域 和 SELinux安全上下文 是linux系统的双保险;
SELinux服务的三种配置模式:
enforcing:强制启用安全策略模式,将拦截服务的不合法请求;
permissive:遇到服务越权访问时,只发出警告而不强制拦截;
disabled:对于越权的行为不警告也不拦截;
SELinux域和SELinux安全上下文
SELinux域针对:服务
SELinux安全上下文针对:文件
SELinux的安全上下文:
安全上下文是一个访问控制属性,在selinux中,类型标识符是安全上下文中决定访问的主要的部分;
在selinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素控制其访问,所有文件和端口资源和进程都具备安全标签:安全上下文(security context);
安全上下文由5个元素组成:
user : role : type : sensitivity : category
user:指登录系统的用户类型,如root,system_u等;
role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r;
type:指定数据类型
sensitivity:限制访问的需要;分0-15级,s0最低,target策略默认为s0;
查看文件的安全上下文详细信息:
# ls -Zd /etc

SELinux服务的相关命令:
1:修改SELinux三种模式;
# vi /ect/selinux/config

2:获取当前 SELinux的运行模式信息;
# getenforce
enforcing
3:临时启用或关闭 enforcing模式;
# setenforce [0|1]
Permissive
0为禁用个,1为启用;
备注:
上面 例1 测试的失败,由于修改了网站数据保存路径,导致违反了SELinux的监管原则;默认保存路径与新的保存路径的 SELinux安全上下文值不同;
查看两个路径 SELinux安全上下文值:
# ls -Zd /var/www/html
# ls -Zd /home/wwwroot

4:semanage
用于管理SELinux的策略,修改文件或目录的安全上下文,格式:semanage [选项] [文件];
参数:
-l: 用于查询;
-a: 用于添加;
-m: 用于修改;
-d: 用于删除;
备注:如果没有找到 semanage命令;
1:# yum provides /usr/sbin/semanage 查找命令所依赖的安装包;

2:# yum install -y policycoreutils-python 安装 semanage的安装包,小版本号不需要写;
5:restorencon
使使用 semanage执行过的安全上下文立即生效;
参数:
-R:对指定的目录进行递归操作;
-v:显示安全上下文的修改过程;
例1:
向新的网站数据目录中添加一条SELinux安全上下文,让这个目录以及里面的所有文件能被 httpd服务程序访问到;
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
/home/wwwroot,最后root后面不能加根号,否则selinux修改不生效;
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
以上命令运行后,还未生效,需要执行 restorencon命令;
# restorecon -Rv /home/wwwroot/
4:个人用户主页功能
httpd服务程序提供个人用户主页功能,让系统内所有的用户在自己的家目录中管理个人的网站;
例1:基本个人用户主页配置步骤:
1:开启主页功能,默认是没有开启个人用户主页功能;
配置文件路径;
# vi /etc/httpd/conf.d/userdir.conf
把 17行的 UserDir disabled,注释掉,即添加 #,表示httpd开启个人用户主页功能;

把 24行的 UserDir public_html 的注释符#,去掉;public_html 是用户家目录中的网站数据的保存目录;

2:在 用户 centos家目录中建立网站数据保存目录 public_html;及首页面文件 index.html;并修改目录权限,保证其他人也能访问;
切换用户 centos
# su - centos
创建个人网站数据保存目录 public_html;
# mkdir /home/centos/public_html
创建首页文件及输入内容 test-page;
# echo "test-page" > public_html/index.html
递归修改家目录 centos的权限;
# chmod -Rf 755 /home/centos
3:重启 httpd服务,浏览器地址输入格式:网址/~用户名,没有空格;
# systemctl restart httpd
127.0.0.1/~centos
test-page
4:如果现实报错页面,查看是否是 SELinux 的问题哦;
查看并过滤与HTTP协议相关的安全策略,off 为禁止状态;
#getsebool -a | grep http
5:修改SELinux域安全策略规则;
# setsebool -P httpd_enable_homedirs=on
例2:只有身份验证的用户才能访问网址内容,添加网址口令功能;
1:htpasswd 作用是 生成密码数据库;
格式:htpasswd [参数] [文件] [用户名];
# htpasswd -c /etc/httpd/passwd centos
输入网页验证密码;
解析:
-c: 表示第一次生成;
/etc/httpd/passwd:密码数据库的存放文件;
centos:需要验证的用户名称(该用户不必是系统已有的本地账户);
2:编辑个人用户主页功能配置文件;添加32-36行内容
# vi /etc/httpd/conf.d/userdir.conf

解析:
Allowoverride all:隐藏所有内容;
authuserfile "/etc/httpd/passwd":密码数据库的保存文件;
authname:用户登录个人网页是的提示信息;
Require user centos:登录时需要验证的用户名;
3:重启 httpd服务,即可实现效果;
# systemctl restart httpd
5:虚拟网站主机功能
功能好处:把一台处于运行状态的物理服务器分割成多个"虚拟的服务器"。
不足:无法实现所有硬件资源的分割,只能限制硬盘的使用空间大小;
Apache的虚拟主机功能:
是基于用户请求的不同IP地址,主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术;

1)基于IP地址
测试条件:一台服务器一个网口配置多个IP地址,每个IP地址对应服务器上部署的每个网站,访问不同IP时,会访问对应的网站。每个网站一个独立的IP,对搜索引擎优化有好处;
例:
A:在单个网口上配置三个IP地址;
使用 nmtui 界面配置;或者 vim
# vi /etc/sysconfig/network-scritp/ifcfg-eno16777736
配置网卡时,注意数字,如:IPADDR2,NETMASK2

B:在 /home/wwwroot目录中分别建立保存3个IP不同网站数据的目录,并写入对应的首页文件和输入首页内容;
# mkdir -p /home/wwwroot/10
# mkdir -p /home/wwwroot/20
# mkdir -p /home/wwwroot/30
# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html
# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html
# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html
C:在httpd主配置文件中,113行开始,分别写入3个基于IP地址的虚拟主机网站参数,重启httpd服务;
# vi /etc/httpd/conf/httpd.conf

D:由于SELinux的安全上下文的关系,需要对目录及文件进行设置;
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
/home/wwwroot,最后root后面不能加根号,否则selinux修改不生效;
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
20,30,做同样的操作;
使配置的SELinux安全上下文生效;
# restorecon -Rv /home/wwwroot
E:测试结果,输入不用IP,出现对应的网站;
2)基于主机域名
当服务器没有足够的独立IP地址分配给每个网站时,让Apache自动识别用户请求的域名,根据不同域名请求来传输不同的内容;
只需保证服务器上有一个可用IP地址即可;
当不配置 DNS解析服务器时,需要手动定义IP地址与域名之间的关系,配置文件路径:/etc/hosts
例:
A:手动定义解析 IP与域名之间的对应关系,保存退出后立即生效;
# vi /etc/hosts
192.168.10.10 同时对应3个域名;

B:分别建立/home/wwwroot下保存3个不同网站数据的目录,并写入首页内容;

C:在 httpd主配置文件中 113行开始,分别追加三个基于主机名的虚拟主机网站参数;

重启 httpd服务:
# syttemctl restart httpd
D:由于SELinux的安全上下文的关系,需要对目录及文件进行设置;
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/a
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/a/*
b,c 跟上面的 a 同于命令执行;
使配置的SELinux安全上下文生效;
# restorecon -Rv /home/wwwroot
E:测试结果,输入域名看结果;
3)基于端口
通过指定的端口号来访问服务器上的不同资源;
基于端口号的配置方式最复杂,需要考虑httpd服务的配置因素,还需考虑selinux服务对开设新端口的监控;selinux一般认为合理的端口:80,443,8080;
例:
A:分别建立/home/wwwroot下保存2个不同网站数据的目录,并写入首页内容;


B:在httpd的主配置文件中,第43,44行分别添加用于监听6111,6222端口的参数;
# vi /etc/httpd/conf/httpd.conf


C:重启 httpd服务,报错;由于selinux问题;
SELinux服务检测到6111和6222端口原本不属于Apache服务应该需要的资源,但现在却以httpd服务程序的名义监听使用了,所以SELinux会拒绝使用Apache服务使用这两个端口;
使用 semanage 命令查询并过滤出所有与http相关且SElinux服务允许的端口;
# semanage port -l | grep http
![]()
以上命令发现6111 6222 默认不被包含,手动添加进列表,并立即永久生效;
# semanage prot -a -t http_port_t -p tcp 6111
# semanage prot -a -t http_port_t -p tcp 6222
再次查看SELinux默认监听端口列表;
# semanage port -l | grep http

# systemctl restart httpd
D:由于SELinux的安全上下文的关系,需要对目录及文件进行设置;
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
6222同上面操作执行;
使配置的SELinux安全上下文生效;
# restorecon -Rv /home/wwwroot
E:测试结果,IP地址后面跟端口号;
6:Apache的访问控制
Apache可以基于源主机名,源IP地址和源主机上的浏览器特征等信息对网站上的资源进行访问控制;
通过Allow,Deny指令允许或禁止某个主机访问服务器的网站资源;
Order指令用来定义Allow或Deny指定起作用的顺序的,匹配原则按照顺序与允许匹配,成功允许请求,反之拒绝请求;
例1:匹配浏览器进行访问控制;
A:先在服务器默认的网站数据目录中新建一个子目录,并建立首页文件内容;
# mkdir /var/www/html/server
# echo "xxxxxxxx" > /var/www/html/server/index.html
B:编辑 httpd主配置文件,在 129行添加访问规则;规则含义:只允许使用firefox浏览器的主机访问服务器上的首页文件,其他请求都拒绝;
# vi /etc/httpd/conf/httpd.conf

例2:匹配源主机的IP地址来进行访问控制;
A:与例1中的步骤 A相同;
B:编辑 httpd主配置文件,129行添加只允许指定的IP地址访问网站资源;
# vi /etc/httpd/conf/httpd.conf

浙公网安备 33010602011771号