阅读(4233) (7)

10.5.1 基于IP地址

2019-05-08 12:40:22 更新

如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。而且,每个网站都有一个独立的IP地址,对搜索引擎优化也大有裨益。因此以这种方式提供虚拟网站主机功能不仅最常见,也受到了网站站长的欢迎(尤其是草根站长)。

刘遄老师在第4章和第9章分别讲解了用于配置网络的两种方法,大家在实验中和工作中可随意选择。就当前的实验来讲,需要配置的IP地址如图10-13所示。在配置完毕并重启网卡服务之后,记得检查网络的连通性,确保三个IP地址均可正常访问,如图10-14所示(这很重要,一定要测试好,然后再进行下一步!)。

图10-13 使用nmtui命令配置网络参数

第1步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便我们稍后能更直观地检查效果。

图10-14 分别检查3个IP地址的连通性

[root@linuxprobe ~]# mkdir -p /home/wwwroot/10 [root@linuxprobe ~]# mkdir -p /home/wwwroot/20 [root@linuxprobe ~]# mkdir -p /home/wwwroot/30 [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 第2步:在httpd服务的配置文件中大约113行处开始,分别追加写入三个基于IP地址的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。

    [root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
    ………………省略部分输出信息………………
    113 <VirtualHost 192.168.10.10>
    114 DocumentRoot /home/wwwroot/10
    115 ServerName www.linuxprobe.com
    116 <Directory /home/wwwroot/10 >
    117 AllowOverride None
    118 Require all granted
    119 </Directory>
    120 </VirtualHost>
    121 <VirtualHost 192.168.10.20>
    122 DocumentRoot /home/wwwroot/20
    123 ServerName bbs.linuxprobe.com
    124 <Directory /home/wwwroot/20 >
    125 AllowOverride None
    126 Require all granted
    127 </Directory>
    128 </VirtualHost>
    129 <VirtualHost 192.168.10.30>
    130 DocumentRoot /home/wwwroot/30
    131 ServerName tech.linuxprobe.com
    132 <Directory /home/wwwroot/30 >
    133 AllowOverride None
    134 Require all granted
    135 </Directory>
    136 </VirtualHost>
    ………………省略部分输出信息………………
    [root@linuxprobe ~]# systemctl restart httpd

第3步:此时访问网站,则会看到httpd服务程序的默认首页面。大家现在应该立刻就反应过来—这是SELinux在捣鬼。由于当前的/home/wwwroot目录及里面的网站数据目录的SELinux安全上下文与网站服务不吻合,因此httpd服务程序无法获取到这些网站数据目录。我们需要手动把新的网站数据目录的SELinux安全上下文设置正确(见前文的实验),并使用restorecon命令让新设置的SELinux安全上下文立即生效,这样就可以立即看到网站的访问效果了,如图10-15所示。

    [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/*
    [root@linuxprobe ~]# restorecon -Rv /home/wwwroot
    restorecon reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/10 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/10/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/20 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/20/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/30 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/30/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    [root@linuxprobe ~]# firefox

图10-15 基于不同的IP地址访问虚拟主机网站