00:00/00:00

章节简述: 

本章节中通过对比目前热门的网站服务程序来说明Apache服务程序的优势,并新增主机空间选购技巧小节。

了解SELinux服务的3种工作模式,小心谨慎的使用semanage命令setsebool命令配置SELinux安全上下文服务监管策略

学习Apache网站服务程序的基本部署个人用户主页功能以及基于IP地址、主机名(域名)、端口号的虚拟主机功能

 

10.1 网站服务程序

Web网络服务也叫WWW(World Wide Web),一般是指能够让用户通过浏览器访问到互联网中文档等资源的服务。 目前提供WEB网络服务的程序有ApacheNginxIIS等等,Web网站服务是被动程序,即只有接收到互联网中其他计算机发出的请求后才会响应,然后Web服务器才会使用HTTP(超文本传输协议)或HTTPS超文本安全传输协议)将指定文件传送到客户机的浏览器上。

页面请求过程

现在既然知道了Web网站服务的原理,那么都有那些程序可以提供Web服务那?又各自有何优势?来一起分析下吧: iis7 Windows系统中默认Web服务程序是IIS(Internet Information Services),这是一款图形化的网站管理工具,IIS程序不光能提供Web网站服务,还能够提供FTP、NMTP、SMTP等服务功能,但只能在Windows系统中使用nginx nginx——最初于2004年10月4日为俄罗斯知名门户站点而开发的,作为一款轻量级的网站服务软件,因其稳定性丰富的功能而深受信赖,但最最最被认可的是低系统资源占用内存少并发能力强,目前国内如新浪、网易、腾讯等门户站均使用。

apache Apache——取自美国印第安人土著语Apache,寓意着拥有高超的作战策略和无穷的耐性,由于其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。目前拥有很高的Web服务软件市场占用率,全球使用最多的Web服务软件,开源、跨平台(可运行于Unix,linux,windows中)。

支持基于IP或域名的虚拟主机
支持多种方式的HTTP认证
集成代理服务器模块
安全Socket层(SSL)
能够实时见识服务状态与定制日志
多种模块的支持

tomcat
Tomcat——属于轻量级的Web服务软件,一般用于开发和调试JSP代码,通常认为Tomcat是Apache的扩展程序。

 

总结来说Nginx程序作为Web服务软件届的后起之秀已经通过自身的努力与优势赢得了大批站长的信赖,例如咱们的《Linux就该这么学》就是基于Nginx服务部署的,不得不说真的很棒!但是Apache程序作为老牌的Web服务软件因其卓越的稳定性安全性成为了红帽RHEL7系统中默认的网站服务软件,同样也是红帽RHCSA与RHCE考试认证中避不开的考题。

 

10.2 安装Apache服务程序
接下来就要试试动手安装Apache服务程序啦,首先按照前面的章节中已经学习过方法挂载光盘设备Yum仓库配置文件
第1步:在虚拟机软件里选中光盘镜像:
确认光盘已被选中

 

第2步:将光盘设备挂载到/media/cdrom目录:
[root@linuxprobe ~]# mkdir -p /media/cdrom
[root@linuxprobe ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
第3步:使用Vim编辑器创建Yum仓库的配置文件
[root@linuxprobe ~]# vim /etc/yum.repos.d/rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
第4步:安装Apache服务程序:

需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的。

[root@linuxprobe ~]# yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程信息………………
Installing:
httpd x86_64 2.4.6-17.el7 rhel7 1.2 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 rhel7 103 k
apr-util x86_64 1.5.2-6.el7 rhel7 92 k
httpd-tools x86_64 2.4.6-17.el7 rhel7 77 k
mailcap noarch 2.1.41-2.el7 rhel7 31 k
Transaction Summary
================================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 1.5 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
………………省略部分安装过程信息………………
Complete!

第5步:运行Apache服务程序并设置为开机启动:

启动Apache服务程序:

[root@linuxprobe ~]# systemctl start httpd

设置为开机自启动:

[root@linuxprobe ~]# systemctl enable httpd

打开浏览器后键入http://127.0.0.1,能看到默认页面了吗:

[root@linuxprobe ~]# firefox

Apache默认页面

10.3 配置服务文件参数
慢着!先别激动!!刚刚学会的安装和运行只是学习Apache服务成功路上的第一步,现在来了解下各个httpd服务目录都是干嘛用的吧:
服务目录 /etc/httpd
配置文件 /etc/httpd/conf/httpd.conf
网站数据目录 /var/www/html
访问日志 /var/log/httpd/access_log
错误日志 /var/log/httpd/error_log

打开Apache服务程序的配置文件:

[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
初次看到配置文件可真的吓了一跳,353行!这没有一周研究不完吧!
其实吓唬你们的了,所有以#号开始的叫注释行,这些只是描述介绍而已,真正的参数有:
ServerRoot 服务目录
ServerAdmin 管理员邮箱
User 运行服务的用户
Group 运行服务的用户组
ServerName 网站服务器的域名
DocumentRoot 网站数据目录
Listen 监听的IP地址与端口号
DirectoryIndex 默认的索引页页面
ErrorLog 错误日志文件
CustomLog 访问日志文件
Timeout 网页超时时间,默认为300秒.
Include 需要加载的其他文件

Apche服务程序的配置文件内容分为三种类型:“注释行信息”,“全局配置”,“区域配置”。
httpd配置文件分析
默认的网站数据是存放在/var/www/html目录中的,首页名称是index.html,来动手写入一个文件替换到默认页面吧。

使用echo命令将指定的字符写入到网站数据目录中的index.html文件中:

[root@linuxprobe ~]# echo "Welcome To LinuxProbe.Com" > /var/www/html/index.html

再次打开浏览器,键入http://127.0.0.1,好棒,成功了!

[root@linuxprobe ~]# firefox
验证apache服务实验效果
这样一试果然成功了,原来真不是很难,信心大涨!要想将网站数据放在/home/wwwroot目录,该如何操作呢?
编辑Apache服务程序的主配置文件:
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
将在119行的DocumentRoot参数修改为"/home/wwwroot",再把在123行的"/var/www"修改为"/home/wwwroot"

建立网站数据目录:

[root@linuxprobe ~]# mkdir /home/wwwroot

创建首页文件:

[root@linuxprobe ~]# echo "The New Web Directory" > /home/wwwroot/index.html

重新启动Apache服务:

[root@linuxprobe ~]# systemctl restart httpd

再来打开浏览器看下效果吧,依然是键入http://127.0.0.1:

[root@linuxprobe ~]# firefox

Apache默认页面
好奇怪!!为什么会是默认页面?只有首页页面不存在或有问题才会显示Apache服务程序的默认页面啊。

那么进一步来访问"http://127.0.0.1/index.html",怎么样?惊讶到了吗?访问页面的行为是被禁止的。

Forbidden

You don't have permission to access /index.html on this server.

我们的操作与刚刚的前面的实验一样啊,但这次的访问行为会被禁止呢?这就要先了解下SElinux啦。
出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

10.4 强制访问控制安全子系统

selinux

SELinux全称为Security-Enhanced Linux是美国国家安全局在Linux社区帮助下开发的一个强制访问控制的安全子系统,SELinux属于MAC强制访问控制(Mandatory Access Control)——即让系统中的各个服务进程都受到约束,即仅能访问到所需要的文件。

以本人的亲身经历不得不说国内很多运维人员对SELinux的理解不深,导致该功能在很多服务器中直接被禁用。

模式一: enforcing - 安全策略强制启用模式,将会拦截服务的不合法请求。

模式二: permissive - 遇到服务越权访问只会发出警告而不强制拦截。

模式三: disabled - 对于越权的行为不警告,也不拦截。

有时关闭SELinux后确实能够减少报错几率,但这极其的不推荐并且本书实验环境均为开启状态,确保您的SELinux服务是默认启用的:

第1步:切换到SELinux服务的配置文件目录"/etc/selinux"。

第2步:编辑config文件将模式改为强制启用,记得保存哦!

如果发现SELINUX=permissive或disabled那就赶紧改过来吧:

[root@linuxprobe ~]# cd /etc/selinux
[root@linuxprobe selinux]# vim config
SELINUX=enforcing

此时可以来查询下当前的SELinux服务状态:

[root@linuxprobe ~]# getenforce 
Enforcing

 

10.5 允许SELinux策略

哦~~原来如此,为了确认是这个讨厌的SELinux服务在捣鬼,我们来先关闭它试试吧:

[root@linuxprobe ~]# setenforce 0

检查状态,现在已经是“禁止模式”了:

[root@linuxprobe ~]# getenforce
Permissive

打开浏览器再键入http://127.0.0.1,果然成功了!

[root@linuxprobe wwwroot]#firefox


果然是因为没有配置好SELinux服务,再次开启它吧:

[root@linuxprobe ~]# setenforce 1

刚刚浏览器里报错说“禁止,你没有访问index.html文件的权限”,那怎么开启SELinux的允许策略呢?

SELinux安全策略包括安全上下文

SELinux域:对进程资源进行限制(查看方式:ps -Z)

SELinux安全上下文:对系统资源进行限制(查看方式:ls -Z)

使用"ls -Z"命令检查下新旧网站数据目录的SELinux安全上下文有何不同吧:

[root@linuxprobe ~]# ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
[root@linuxprobe ~]# ls -Zd /home/wwwroot
drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

SELinux安全上下文是由冒号间隔的四个字段组成的,以原始网站数据目录的安全上下文为例分析下吧:

用户段:root表示root账户身份,user_u表示普通用户身份,system_u表示系统进程身份。
角色段:object_r是文件目录角色,system_r是一般进程角色。
类型段:进程和文件都有一个类型用于限制存取权限。

解决办法就是将当前网站目录"/home/wwwroot"的安全上下文修改成system_u:object_r:httpd_sys_content_t:s0就可以啦~
semanage命令用于查询与修改SELinux的安全上下文,格式为:“semanage [选项] [文件]”。

参数 作用
-l 查询
-a 增加
-m 修改
-d 删除


restorecon命令用于恢复SELinux文件安全上下文,格式为:“restorecon [选项] [文件]”。

-i 忽略不存在的文件
-e 排除目录
-R 递归处理(针对目录使用)
-v 显示详细的过程
-F 强制恢复


修改网站数据目录的安全上下文:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

修改网站数据的安全上下文(*代表所有文件或目录):

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*

这样操作后查看到SELinux安全上下文依然没有改变,不要着急,再执行下restorecon命令即可:

[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/

再来刷新浏览器后看到正常页面:

[root@linuxprobe ~]# firefox

Apache配置成功的页面

真可谓是一波三折,原本以为将Apache服务配置妥当就大功告成,结果却受到了SELinux安全上下文的限制,看来真是要细心才行。

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。

10.6 个人用户主页功能

Apache服务程序中有个默认未开启的个人用户主页功能,能够为所有系统内的用户生成个人网站,确实很实用哦~

第1步:开启个人用户主页功能:

[root@linuxprobe ~]# vim /etc/httpd/conf.d/userdir.conf
将第17行的UserDir disabled前加一个#,代表该行被注释掉,不再起作用。
将第23行的UserDir public_html前的#号去除,表示该行被启用。
注意:UserDir参数表示的是需要在用户家目录中创建的网站数据目录的名称(即public_html)

修改UserDir的配置文件
重启Apache服务程序:

[root@linuxprobe ~]# systemctl restart httpd

第2步:创建个人用户网站数据。
切换至普通会员linuxprobe的家目录:

[root@linuxprobe home]# su - linuxprobe
Last login: Fri May 22 13:17:37 CST 2015 on :0

创建网站数据目录public_html:

[linuxprobe@linuxprobe ~]$ mkdir public_html

写入首页文件内容:

[linuxprobe@linuxprobe ~]$ echo "This is linuxprobe's website" > public_html/index.html

给予网站目录755的访问权限:

[linuxprobe@linuxprobe ~]$ chmod -Rf 755 ./

我们打开浏览器,访问地址为"http://127.0.0.1/~用户名",不出意外果然是报错页面,肯定是SELinux服务在捣蛋。

无法访问个人用户网站

第3步:设置SELinux允许策略。

这次报错并不是因为用户家的网站数据目录SELinux安全上下文没有设置了,而是因为SELinux默认就不允许Apache服务个人用户主页这项功能。

getsebool命令用于查询所有SELinux规则的布尔值,格式为:“getsebool -a”。

SELinux策略布尔值:只有0/1两种情况,0或off为禁止,1或on为允许。

setsebool命令用于修改SElinux策略内各项规则的布尔值,格式为:“setsebool [选项] 布尔值=[0|1]”。

参数 作用
-P 永久生效


查看并搜索所有与家目录有关的SELinux策略:

[root@linuxprobe ~]# getsebool -a | grep home
ftp_home_dir --> off
git_cgi_enable_homedirs --> off
git_system_enable_homedirs --> off
httpd_enable_homedirs --> off
mock_enable_homedirs --> off
mpd_enable_homedirs --> off
openvpn_enable_homedirs --> on
samba_create_home_dirs --> off
samba_enable_home_dirs --> off
sftpd_enable_homedirs --> off
sftpd_write_ssh_home --> off
spamd_enable_home_dirs --> on
ssh_chroot_rw_homedirs --> off
tftp_home_dir --> off
use_ecryptfs_home_dirs --> off
use_fusefs_home_dirs --> off
use_nfs_home_dirs --> off
use_samba_home_dirs --> off
xdm_write_home --> off

将个人用户网站功能策略设置为允许:

[root@linuxprobe ~]# setsebool -P httpd_enable_homedirs=on

刷新浏览器访问linuxprobe用户的个人网站,果然成功了:

Apache个人网站功能

第4步:增加密码安全验证。

有时候并不希望所有人都可以留意访问到自己的个人网站,那就可以使用Apache密码口令验证功能增加一道安全防护吧。
使用htpasswd命令生成密码数据库(-c参数用于第一次生成):

[root@linuxprobe ~]# htpasswd -c /etc/httpd/passwd linuxprobe
New password:
Re-type new password:
Adding password for user linuxprobe

编辑配置文件开启密码验证(具体参数见下图):

[root@linuxprobe ~]# vim /etc/httpd/conf.d/userdir.conf

Apache密码口令验证

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。

请一定要注意要重启服务才生效的,执行命令"systemctl restart httpd",再来看下网站吧:

Apache密码验证

如果口令输入错误会直接禁止访问:

Unauthorized

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

这里的User Namelinuxprobe,密码并非该用户的系统密码,而是htpasswd命令创建的网站密码,不要搞混哦~
出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

10.7 虚拟网站主机功能

Apache的虚拟主机功能 (Virtual Host) 是可以让一台服务器基于IP、主机名或端口号实现提供多个网站服务的技术

虚拟主机功能的操作步骤都很简单,但可能比较难理解其中的原理,一旦搭建出实验环境,你就一定会明白了。[附件]

Apache虚拟主机功能拓扑

10.7.1 基于IP地址

这种情况很常见:一台服务器拥有多个IP地址,当用户访问不同IP地址时显示不同的网站页面。

第1步:使用nmtui命令为网卡添加多个IP地址(192.168.10.10/20/30):
nmtui对网卡添加多IP地址
重新启动网卡设备后使用ping命令检查是否配置正确(这项很重要,一定要测试好再进行下一步!)。
确认网卡配置正确
第2步:分别创建网站数据目录。
在/home/wwwroot目录下分别创建三个网站数据目录:

[root@linuxprobe ~]# mkdir -p /home/wwwroot/10
[root@linuxprobe ~]# mkdir -p /home/wwwroot/20
[root@linuxprobe ~]# mkdir -p /home/wwwroot/30

分别在这三个网站数据目录中写入主页文件,内容为该网站的IP地址:

[root@linuxprobe ~]# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html
[root@linuxprobe ~]# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html
[root@linuxprobe ~]# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html

第3步:在配置文件中描述基于IP地址的虚拟主机。

<VirtualHost 192.168.10.10>
DocumentRoot /home/wwwroot/10
ServerName www.linuxprobe.com
<Directory /home/wwwroot/10 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.20>
DocumentRoot /home/wwwroot/20
ServerName bbs.linuxprobe.com
<Directory /home/wwwroot/20 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.30>
DocumentRoot /home/wwwroot/30
ServerName tech.linuxprobe.com
<Directory /home/wwwroot/30 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。

第4步:修改网站数据目录的SELinux安全上下文。
需要分别修改网站数据目录以及网页文件的SELinux安全上下文:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*

立即恢复SELinux安全上下文:

[root@linuxprobe ~]# restorecon -Rv /home/wwwroot

第5步:分别访问192.168.10.10/20/30验证结果:

验证基于IP地址的虚拟主机功能的结果

请注意:当您完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。

10.7.2 基于主机名

当服务器无法为每个网站都分配到独立IP地址时,可以试试让Apache服务程序自动识别来源主机名或域名然后跳转到指定的网站。

第1步:配置网卡IP地址与hosts文件。
配置IP地址

hosts文件作用是定义IP地址与主机名的映射关系,即强制将某个主机名地址解析到指定的IP地址

[root@linuxprobe ~]# vim /etc/hosts
//每行只能写一条,格式为IP地址+空格+主机名(域名)。
192.168.10.10 www.linuxprobe.com
192.168.10.10 bbs.linuxprobe.com
192.168.10.10 tech.linuxprobe.com

第2步:分别创建网站数据目录:

[root@linuxprobe ~]# mkdir -p /home/wwwroot/www
[root@linuxprobe ~]# mkdir -p /home/wwwroot/bbs
[root@linuxprobe ~]# mkdir -p /home/wwwroot/tech

分别在网站目录中写入不同的首页文件:

[root@linuxprobe ~]# echo "WWW.linuxprobe.com" > /home/wwwroot/www/index.html
[root@linuxprobe ~]# echo "BBS.linuxprobe.com" > /home/wwwroot/bbs/index.html
[root@linuxprobe ~]# echo "TECH.linuxprobe.com" > /home/wwwroot/tech/index.html

第3步:在配置文件中描述基于主机名称的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),在主配置文件的末尾按下面格式定义虚拟主机信息:

<VirtualHost 192.168.10.10>
DocumentRoot "/home/wwwroot/www"
ServerName "www.linuxprobe.com"
<Directory "/home/wwwroot/www">
AllowOverride None
Require all granted
</directory>
</VirtualHost>

<VirtualHost 192.168.10.10>
DocumentRoot "/home/wwwroot/bbs"
ServerName "bbs.linuxprobe.com"
<Directory "/home/wwwroot/bbs">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.10>
DocumentRoot "/home/wwwroot/tech"
ServerName "tech.linuxprobe.com"
<Directory "/home/wwwroot/tech">
AllowOverride None
Require all granted
</directory>
</VirtualHost>

读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable httpd“。

第4步:修改网站数据目录的SELinux安全上下文:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*

让新的SELinux安全上下文立即生效:

[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/

第5步:分别访问网站验证结果
验证虚拟主机功能结果

请注意:当您完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。

10.7.2 基于端口号

我们可以让服务器开启多个服务端口后,然后让用户能够通过访问服务器的指定端口来找到想要的网站。

第1步:配置服务器的IP地址:

配置IP地址

第2步:分别创建网站数据目录。
分别创建端口为6111,6222的网站数据目录:

[root@linuxprobe ~]# mkdir -p /home/wwwroot/6111
[root@linuxprobe ~]# mkdir -p /home/wwwroot/6222

分别在网站数据目录中写入不同内容的主页文件:

[root@linuxprobe ~]# echo "port:6111" > /home/wwwroot/6111/index.html
[root@linuxprobe ~]# echo "port:6222" > /home/wwwroot/6222/index.html

第3步:在配置文件中描述基于端口号的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),找到约在42行的Listen 80,并在下面追加:

Listen 6111
Listen 6222

然后在主配置文件的末尾按下面格式定义虚拟主机信息:

<VirtualHost 192.168.10.10:6111>
DocumentRoot "/home/wwwroot/6111"
ServerName www.linuxprobe.com
<Directory "/home/wwwroot/6111">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.10:6222>
DocumentRoot "/home/wwwroot/6222"
ServerName bbs.linuxprobe.com
<Directory "/home/wwwroot/6222">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。

什么!竟然报错了:

Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

这是因为SELinux服务检测到6111与6222端口原本并不属于Apache服务端口,但现在却被以Apache的名义监听了,便直接拒绝掉了。
第4步:修改网站数据目录的SELinux安全上下文并允许端口监听。
修改网站数据目录的安全上下文:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot
[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111
[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111/*
[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222
[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222/*

让新的SElinux安全上下文立即生效:

[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/

使用semanage命令搜索在SELinux系统中有关http服务的端口号:

[root@linuxprobe ~]# semanage port -l| grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989

默认包括80,81,443,488,8008,8009,8443,9000却没有咱们定义的端口号,那么添加进去就可以了:

[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222

再来看下SELinux的端口规则(已经添加成功了):

[root@linuxprobe ~]# semanage port -l| grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp  6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989

再次尝试启动Apache网站服务程序就没有问题了:

[root@linuxprobe ~]# systemctl restart httpd

第5步:分别访问网站验证结果:
基于端口虚拟主机实验成功
请注意:当您完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。

10.8 Apache的访问控制

我们还可以基于主机名IP地址以及客户端特征做Apache网页资源的访问控制,常用的指令有:

Order(排序),Allow(允许),Deny(拒绝),Satisfy(满足)。

其中Order指令用于定义Allow或Deny起作用的顺序,分别实现了允许或者拒绝某个主机访问服务器网页资源。

匹配原则为:按顺序匹配规则并执行,若未匹配成功则执行后面的执行。

比如说"Order Allow,Deny"则代表着先将客户端与允许规则进行对比,若匹配成功则允许访问,反之则直接拒绝

创建网站数据目录和首页文件:

[root@localhost ~]# mkdir /var/www/html/server
[root@localhost ~]# echo "Successful" > /var/www/html/server/index.html

根据浏览器的变量特征,只允许IE浏览器访问本网站数据。

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
//在大约129行的地方添加参数.
<Directory "/var/www/html/server">
SetEnvIf User-Agent “Internet Explorer” ie=1
Order allow,deny
Allow from env=ie

保存配置文件后记得重启服务(systemctl restart httpd),然后用Firefox浏览器尝试访问网站页面:

限制访问

那么如果希望仅允许火狐浏览器访问本页面,请将配置文件修改为:

<Directory "/var/www/html/server">
SetEnvIf User-Agent "Firefox" ff=1
Order allow,deny
Allow from env=ff
</Directory>

根据来访源地址,仅限192.168.10.20的主机访问本网站。

此时我们就需要两台主机来完成实验了,请配置主机IP地址后能够互相通信。

主机名称 操作系统 IP地址
本地主机 红帽RHEL7操作系统 192.168.10.10
远程主机 红帽RHEL7操作系统 192.168.10.20

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
//在大约129行的地方添加参数.
<Directory "/var/www/html/server">
 Order allow,deny  
 Allow from 127.0.0.1  
Order allow,deny
Allow from env=ie
</Directory>

保存配置文件后记得重启服务(systemctl restart httpd),然后用Firefox浏览器尝试访问网站页面:
访问失败

然后再使用远程主机(192.168.10.20)尝试访问页面,顺利的成功了:

访问成功
出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:现在热门的云服务器有何优势?

答案:更加的安全、稳定、灵活、按使用量付费等。

2:若Apache网站服务程序没有检查到首页文件,则会提示报错信息。

答案:并不会哦,Apache网站服务程序会给用户端展示一个默认页面。

3:使用getenforce命令看到结果是Permissive,则代表SELinux是强制开启模式。

答案:绝对的错误,强制开启模式是"enforcing"。

4:使用semanage命令修改SELinux安全上下文后,还需要执行什么命令?

答案:需要执行"restorecon",作用是让新的SELinux安全上下文立即生效。

5:对于Apache的虚拟主机功能,可以基于那些资源?

答案:可以基于IP地址、主机名(域名)或者端口号。

刘遄

刘遄

我们懂得《Linux就该这么学》作为一本Linux入门读物,更加有责任,有必要将文章质量不断提高,知识点不断扩充,让实验更加的实用,不辜负每位读者给予我们的支持,因此我们正在全球各地部署书籍的镜像站点,想用最迅猛的访问速度满足您心中那颗求知的小宇宙,同时,向每位会员承诺,本书可永久免费学习,提供所有所需工具以及在能力范围内的答疑支持。收费培训服务:http://www.linuxprobe.com/training
刘遄