前言:

本文是一篇关于Linux系统初学者的实验记录。

参考书籍:《Linux就该这么学》

实验环境:

VmwareWorkStation 17——虚拟机软件

RedHatEnterpriseLinux[RHEL]8——红帽操作系统

正文:

目录

前言:

正文:

实验:使用Apache的虚拟主机功能

实验1:基于IP地址

Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。 

 Step2:修改配置文件:httpd.conf,将刚刚新建的目录添加

 Step3:设置SELinux安全上下文,并使用restorecon命令让新设置立即生效

 实验2:基于端口号

Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首文件。

Step2:在httpd服务配置文件中添加用于监听端口的参数

​Step3:在httpd服务配置文件中追加写入基于端口号的虚拟主机网站参数

Step4:设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能吻合

Step5:SELinux允许的与HTTP协议相关的端口号中默认没有6111、6222、6333,现添加。

实验3:基于主机域名

Step1:手动定义IP地址与域名之间对应关系的配置文件

Step2:分别新建目录并写入网站配置文件

Step3:从httpd服务的配置文件中大约132行开始,追加写入基于主机名的虚拟主机网站参数。

Step4:设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合


实验:使用Apache的虚拟主机功能

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”

但是,该技术无法实现目前云主机技术的硬件资源隔离

Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机名或端口号,提供多个网站同时为外部提供访问服务的技术。 

准备:使用nmtui命令配置网络 

 用真机ping测试,3个地址均可访问。

实验1:基于IP地址

Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。 

 Step2:修改配置文件:httpd.conf,将刚刚新建的目录添加

在132行进行追加内容: 

 Step3:设置SELinux安全上下文,并使用restorecon命令让新设置立即生效

semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*
restorecon -Rv /home/wwwroot

打开firefox访问虚拟主机的三个不同网站数据: 

 实验2:基于端口号

基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。

在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。

不仅要考虑httpd服务程序的配置因素,还需要考虑到SELinux服务对新开设端口的监控。

一般来说,使用80、443、8080等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux服务的限制。

这个实验中,不仅要考虑目录上应用的SELinux安全上下文的限制,还需要考虑SELinux域对httpd服务程序的管控。

Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首文件。

每个首文件中都应有明确区分不同网站内容的信息。

mkdir -p /home/wwwroot/6111
mkdir -p /home/wwwroot/6222
mkdir -p /home/wwwroot/6333
echo "port:6111" > /home/wwwroot/6111/index.html
echo "port:6222" > /home/wwwroot/6222/index.html
echo "port:6333" > /home/wwwroot/6333/index.html

Step2:在httpd服务配置文件中添加用于监听端口的参数

vim /etc/httpd/conf/httpd.conf

第46行~48行添加:

Listen 6111
Listen 6222
Listen 6333

 Step3:在httpd服务配置文件中追加写入基于端口号的虚拟主机网站参数

vim /etc/httpd/conf/httpd.conf

从134行开始追加: 

<VirtualHost 192.168.31.10:6111>
    DocumentRoot /home/wwwroot/6111
    ServerName www.linuxcool.com
    <Directory /home/wwwroot/6111>
    AllowOverride None
    Require all granted
   </Directory>
</Virtualhost>
<VirtualHost 192.168.31.10:6222>
    DocumentRoot /home/wwwroot/6222
    ServerName www.linuxcool.com
    <Directory /home/wwwroot/6222>
    AllowOverride None
    Require all granted
   </Directory>
</Virtualhost>
<VirtualHost 192.168.31.10:6333>
    DocumentRoot /home/wwwroot/6333
    ServerName www.linuxcool.com
    <Directory /home/wwwroot/6333>
    AllowOverride None
    Require all granted
   </Directory>
</Virtualhost>

  Step4:设置网站数据目录文件的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/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/*
restorecon -Rv /home/wwwroot/
systemctl restart httpd

如果现在访问网页仍会出现报错信息:

SELinux服务检测到6111、6222、和6333端口原本不属于Apache服务应该需要的资源,现在却以httpd服务程序的名义监听使用了,所以SELinux会拒绝使用Apache服务使用这3个端口。

使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表:

semanage port -l | grep http

 Step5:SELinux允许的与HTTP协议相关的端口号中默认没有6111、6222、6333,现添加。

semanage port -a -t http_port_t -p tcp 6111
semanage port -a -t http_port_t -p tcp 6222
semanage port -a -t http_port_t -p tcp 6333
semanage port -l | grep http

systemctl restart httpd
firefox

实验3:基于主机域名

当服务器无法为每个网站都分配一个独立的IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。

只需要保证位于生产环境中的服务器上有一个可用的IP地址

由于当前还未学习配置DNS,手动定义IP地址与域名之间的对应关系。

/etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件,即使网络参数中没有DNS信息也依然能够将域名解析为某个IP地址。

 Step1:手动定义IP地址与域名之间对应关系的配置文件

vim /etc/hosts
192.168.31.10 www.linuxprobe.com www.linuxcool.com www.linuxdown.com

Step2:分别新建目录并写入网站配置文件

mkdir -p /home/wwwroot/linuxprobe
mkdir -p /home/wwwroot/linuxcool
mkdir -p /home/wwwroot/linuxdown
echo "www.linuxprobe.com" > /home/wwwroot/linuxprobe/index.html
echo "www.linuxcool.com" > /home/wwwroot/linuxcool/index.html
echo "www.linuxdown.com" > /home/wwwroot/linuxdown/index.html

Step3:从httpd服务的配置文件中大约132行开始,追加写入基于主机名的虚拟主机网站参数。

<VirtualHost 192.168.31.10>
    DocumentRoot /home/wwwroot/linuxprobe
    ServerName www.linuxprobe.com
    <Directory /home/wwwroot/linuxprobe>
    AllowOverride None
    Require all granted
   </Directory>
</Virtualhost>
<VirtualHost 192.168.31.10>
    DocumentRoot /home/wwwroot/linuxcool
    ServerName www.linuxcool.com
    <Directory /home/wwwroot/linuxcool>
    AllowOverride None
    Require all granted
   </Directory>
</Virtualhost>
<VirtualHost 192.168.31.10>
    DocumentRoot /home/wwwroot/linuxdown
    ServerName www.linuxdown.com
    <Directory /home/wwwroot/linuxdown>
    AllowOverride None
    Require all granted
   </Directory>
</Virtualhost>
systemctl restart httpd

Step4:设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合

semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown/*
restorecon -Rv /home/wwwroot
firefox

Logo

更多推荐