配置虚拟主机
虚拟主机在一台Web 服务器上,可以为多个独立的IP地址、域名或端口号提供不同的Web 站点。对于访问量不大的站点来说,这样做可以降低单个站点的运营成本。
子任务1 配置基于IP地址的虚拟主机
基于IP地址的虚拟主机的配置需要在服务器上绑定多个IP地址,然后配置Apache,把多个网站绑定在不同的IP地址上,访问服务器上不同的IP地址,就可以看到不同的网站。
【例1】假设Apache服务器具有192.168.10.1和192.168.10.2两个IP地址(提前在服务器中配置这两个IP地址)。现需要利用这两个IP地址分别创建两个基于IP地址的虚拟主机,要求不同的虚拟主机对应的主目录不同,默认文档的内容也不同。
- 单击“应用程序”➙“系统工具” ➙“设置”➙”网络”,单击设置按钮,打开如图1所示的配置对话框,可以直接单击“+”添加IP地址,完成后单击“Apply”按钮。这样可以在一块网卡上配置多个IP地址,当然也可以直接在多块网卡上配置多个IP地址。
图1 添加 多个IP地址
② 分别创建/var/www/ip1和/var/www/ip2两个主目录和默认文件。
[root@Centos7-1 ~]# mkdir /var/www/ip1 /var/www/ip2
[root@Centos7-1 ~]# echo "this is 192.168.10.1's web.">/var/www/ip1/index.html
[root@Centos7-1 ~]# echo "this is 192.168.10.2's web.">/var/www/ip2/index.html
③ 添加/etc/httpd/conf.d/vhost.conf文件。该文件的内容如下:
[root@Centos7 ~]# vim /etc/httpd/conf.d/vhost.conf
#设置基于IP地址为192.168.10.1的虚拟主机
<Virtualhost 192.168.10.1>
DocumentRoot /var/www/ip1
</Virtualhost>
#设置基于IP地址为192.168.10.2的虚拟主机
<Virtualhost 192.168.10.2>
DocumentRoot /var/www/ip2
</Virtualhost>
④ SELnux设置为允许,让防火墙放行httpd服务,重启httpd服务。
[root@Centos7 ~]# setenforce 0
[root@Centos7 ~]# getenforce
Permissive
[root@Centos7 ~]# firewall-cmd --permanent --add-service=http
success
[root@Centos7 ~]# firewall-cmd --reload
success
[root@Centos7 ~]# systemctl restart httpd
⑤ 在客户端浏览器中可以看到http://192.168.10.1和http://192.168.10.2两个网站的浏览效果如图2所示。
图2 测试时出现默认页面
奇怪!为什么看到了httpd服务程序的默认首页面?
我们在尝试访问http://192.168.10.1/index.html页面时,竟然发现页面中显示“Forbidden,You don't have permission to access /index.html on this server.”。这一切都是因为主配置文件里没设置目录权限所致!!
解决方法是在/etc/httpd/conf/httpd.conf中添加有关两个网站目录权限的内容(只设置/var/www目录权限也可以)
<Directory "/var/www/ip1">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/ip2">
AllowOverride None
Require all granted
</Directory>
子任务 2 配置基于域名的虚拟主机
基于域名的虚拟主机的配置只需服务器有一个IP地址即可,所有的虚拟主机共享同一个IP,各虚拟主机之间通过域名进行区分。
要建立基于域名的虚拟主机,DNS 服务器中应建立多个主机资源记录,使它们解析到同一个IP地址。例如:
www.smile.com. IN A 192.168.10.1
www.devil.com. IN A 192.168.10.1
【例2】假设Apache服务器IP地址为192.168.10.1。在本地DNS服务器中该IP地址对应的域名分别为www1.devil.com和www2.devil.com。现需要创建基于域名的虚拟主机,要求不同的虚拟主机对应的主目录不同,默认文档的内容也不同。
① 分别创建/var/www/smile和/var/www/devil两个主目录和默认文件。
[root@Centos7-1 ~]# mkdir /var/www/www1 /var/www/www2
[root@Centos7-1 ~]# echo "www1.devil.com's web.">/var/www/www1/index.html
[root@Centos7-1 ~]# echo "www2.devil.com's web.">/var/www/www2/index.html
② 修改httpd.conf文件。添加目录权限内容如下:
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
③ 修改/etc/httpd/conf.d/vhost.conf文件。该文件的内容如下(原来内容清空):
<Virtualhost 192.168.10.1>
DocumentRoot /var/www/www1
ServerName www1.devil.com
</Virtualhost>
<Virtualhost 192.168.10.1>
DocumentRoot /var/www/www2
ServerName www2.devil.com
</Virtualhost>
④ SELnux设置为允许,让防火墙放行httpd服务,重启httpd服务。在客户端Client1上测试。要确保DNS服务器解析正确、确保给Client1设置正确的DNS服务器地址(etc/resolv.conf)。
注意:在本例的配置中,DNS 的正确配置至关重要,一定确保 devil.com 域名及主机的
正确解析,否则无法成功。正向区域配置文件如下(参考之前发的DNS配置)。
[root@Centos7-1 devil]# vim /var/named/devil.com.zone
$TTL 1D
@ IN SOA dns.devil.com. mail.devil.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS dns.devil.com.
@ IN MX 10 mail.devil.com.
dns IN A 192.168.10.1
www1 IN A 192.168.10.1
www2 IN A 192.168.10.1
子任务3 配置基于端口号的虚拟主机
基于端口号的虚拟主机的配置只需服务器有一个IP地址即可,所有的虚拟主机共享同一个IP,各虚拟主机之间通过不同的端口号进行区分。在设置基于端口号的虚拟主机的配置时,需要利用Listen语句设置所监听的端口。
【例3】假设Apache服务器IP地址为192.168.10.1。现需要创建基于8088和8089两个不同端口号的虚拟主机,要求不同的虚拟主机对应的主目录不同,默认文档的内容也不同,如何配置?
① 分别创建/var/www/8088和/var/www/8089两个主目录和默认文件。
[root@Centos7-1 ~]# mkdir /var/www/8088 /var/www/8089
[root@Centos7-1 ~]# echo "8088 port‘s web.">/var/www/8088/index.html
[root@Centos7-1 ~]# echo "8089 port‘s web.">/var/www/8089/index.html
② 修改/etc/httpd/conf/httpd.conf文件。该文件的修改内容如下:
Listen 8088
Listen 8089
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
③ 修改/etc/httpd/conf.d/vhost.conf文件。该文件的内容如下(原来内容清空):
<Virtualhost 192.168.10.1:8088>
DocumentRoot /var/www/8088
</Virtualhost>
<Virtualhost 192.168.10.1:8089>
DocumentRoot /var/www/8089
</Virtualhost>
④ 关闭防火墙和允许SELinux,重启httpd服务。然后在客户端Client1上测试。测试结果大失所望!如图3所示。
图3 访问192.168.10.1: 8088报错
⑤ 处理故障。这是因为firewall防火墙检测到8088和8089端口原本不属于Apache服务应该需要的资源,但现在却以httpd服务程序的名义监听使用了,所以防火墙会拒绝使用Apache服务使用这两个端口。
[root@Centos7-1 ~]# firewall-cmd --list-all
public (active) …………<略>
services: ssh dhcpv6-client samba dns http
ports:
…………<略>
[root@Centos7-1 ~]#firewall-cmd --zone=public --add-port=8088/tcp
success
[root@Centos7-1 ~]# firewall-cmd --permanent --zone=public --add-port=8089/tcp
[root@Centos7-1 ~]# firewall-cmd --permanent --zone=public --add-port=8088/tcp
[root@Centos7-1 ~]# firewall-cmd --reload
[root@Centos7-1 ~]# firewall-cmd --list-all
public (active)
…………<略>
services: ssh dhcpv6-client samba dns http
ports: 8089/tcp 8088/tcp
…………<略>
⑥ 再次在Client1上测试,结果如图4所示。
图4 不同端口虚拟机的测试结果
技巧:依次单击“Applications"→“Sundry”→“Firewall”,打开防火墙配置窗口,可以详尽地配置防火墙,包括配置 public 区域的port(端口)等,读者不妨多操作试试,定会有惊喜。