Apache配置虚拟主机
在一台Web服务器上,通过多个独立的IP地址、域名或端口号提供不同的Web站点。
基于IP地址的虚拟主机:
每个网站拥有不同的 IP 地址
通过访问服务器上不同的IP地址访问不同的网站
基于域名的虚拟主机:
所有的虚拟主机可以共享同一个IP地址
使用不同的域名来访问不同的网站
基于端口的虚拟主机:
所有的虚拟主机可以共享同一个IP地址
各虚拟主机之间通过不同的端口号进行区分
准备工作:
[root@Apache ~]# vim /usr/local/apache2/conf/htttpd.conf
52 #Listen 80 # 将这行注释掉
220 #DocumentRoot "/usr/local/apache2/htdocs" # 将这行注释掉
1. Apache基于IP的虚拟主机配置
第一步:使用ifconfig设置3个虚拟ip
[root@Apache ~]# ifconfig ens33:1 192.168.1.11/24
[root@Apache ~]# ifconfig ens33:2 192.168.1.12/24
[root@Apache ~]# ifconfig ens33:3 192.168.1.13/24
[root@Apache ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.20 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe14:1fb9 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:14:1f:b9 txqueuelen 1000 (Ethernet)
RX packets 216515 bytes 207352525 (197.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 109646 bytes 23077100 (22.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:14:1f:b9 txqueuelen 1000 (Ethernet)
ens33:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.12 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:14:1f:b9 txqueuelen 1000 (Ethernet)
ens33:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.13 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:14:1f:b9 txqueuelen 1000 (Ethernet)
第二步:配置主机的hosts文件,便于测试
[root@Apache ~]# echo "192.168.1.11 test1.com" >> /etc/hosts
[root@Apache ~]# echo "192.168.1.12 test2.com" >> /etc/hosts
[root@Apache ~]# echo "192.168.1.13 test3.com" >> /etc/hosts
[root@Apache ~]# tail -3 /etc/hosts
192.168.1.11 test1.com
192.168.1.12 test2.com
192.168.1.13 test3.com
第三步:建立虚拟主机存放网页的根目录,并创建首页文件index.html
[root@Apache ~]# cd /www
[root@Apache ~]# mkdir 11
[root@Apache ~]# mkdir 12
[root@Apache ~]# mkdir 13
[root@Apache ~]# echo "192.168.1.11" > 11/index.html
[root@Apache ~]# echo "192.168.1.12" > 12/index.html
[root@Apache ~]# echo "192.168.1.13" > 13/index.html
第四步:修改httpd.conf在文件末尾加入以下配置
[root@Apache ~]# vim /usr/local/apache2/conf/httpd.conf --文件末尾加入以下配置
Listen 192.168.1.11:80
Listen 192.168.1.12:80
Listen 192.168.1.13:80
Include conf/vhost/*.conf # 文件包含vhost目录下所有以.conf结尾的文件
第五步:编辑每个ip的配置文件
[root@Apache ~]# mkdir /usr/local/apache2/conf/vhost
[root@Apache ~]# cd /usr/local/apache2/conf/vhost
[root@Apache ~]# vim test11.conf --一定要以.conf为后缀,这是第一台机器
<VirtualHost 192.168.1.11:80>
ServerName test11.com
DocumentRoot /www/11
<Directory "/www/11/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
参数介绍:
虚拟主机配置格式:
<VirtualHost 主机ip:端口>
配置内容
</VirtualHost>指定虚拟主机使用的域名
ServerName 域名指定虚拟主机的主目录
DocumentRoot 目录虚拟目录的格式:
<Directory 目录的路径>
目录相关的配置参数和指令
</Directory>Options Indexes FollowSymLinks --找不到主页时,以目录的方式呈现,并允许链接到网站根目录以外
是否允许.htaccess文件覆盖httpd.conf文件中关于虚拟主机目录的配置。
AllowOverride None # 不使用
AllowOverride all # 使用允许、拒绝所有访问指令
Require all granted # 允许
Require all denied # 拒绝
[root@Apache ~]# vim test12.conf --这是第二台机器
<VirtualHost 192.168.1.12:80>
ServerName test12.com
DocumentRoot "/www/12"
<Directory "/www/12/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@Apache ~]# vim test13.conf --这是第三台机器
<VirtualHost 192.168.1.13:80>
ServerName test13.com
DocumentRoot "/www/13"
<Directory "/www/13/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
第六步:启动服务并测试
[root@Apache ~]# /usr/local/apache2/bin/apachectl -t --检查配置文件是否正确
Syntax OK
[root@Apache ~]# /usr/local/apache2/bin/apachectl restart --重新启动Apache
检查虚拟主机是否运行
[root@Apache ~]# curl 192.168.1.11
192.168.1.11
[root@Apache ~]# curl 192.168.1.12
192.168.1.12
[root@Apache ~]# curl 192.168.1.13
192.168.1.13
2. Apache基于端口的虚拟主机配置
第一步:使用ifconfig设置1个虚拟ip
[root@Apache ~]# ifconfig ens33:4 192.168.1.14/24
第二步:配置主机的hosts文件,便于测试
[root@Apache ~]# echo "192.168.1.14 test4.com" >> /etc/hosts
第三步:建立虚拟主机存放网页的根目录,并创建首页文件index.html
[root@Apache ~]# cd /www
[root@Apache ~]# mkdir port
[root@Apache ~]# cd port
[root@Apache ~]# mkdir 6081
[root@Apache ~]# mkdir 7081
[root@Apache ~]# mkdir 9081
[root@Apache ~]# echo "port 6081" > 6081/index.html
[root@Apache ~]# echo "port 7081" > 7081/index.html
[root@Apache ~]# echo "port 9081" > 9081/index.html
第四步:修改httpd.conf在文件末尾加入以下配置
[root@Apache ~]# vim /usr/local/apache2/conf/httpd.conf --文件末尾加入以下配置
Listen 192.168.1.14:6081
Listen 192.168.1.14:7081
Listen 192.168.1.14:9081
Include conf/vhost/*.conf
第五步:编辑每个端口的配置文件
[root@Apache ~]# cd /usr/local/apache2/conf/vhost
[root@Apache ~]# vim test14.6081.conf --一定要以.conf为后缀,这是第一台机器
<VirtualHost 192.168.1.14:6081>
ServerName test14.com
DocumentRoot "/www/port/6081"
<Directory "/www/port/6081/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@Apache ~]# vim test14.7081.conf --这是第二台机器
<VirtualHost 192.168.1.14:7081>
ServerName test14.com
DocumentRoot "/www/port/7081"
<Directory "/www/port/7081/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@Apache ~]# vim test14.9081.conf --这是第三台机器
<VirtualHost 192.168.1.14:9081>
ServerName test14.com
DocumentRoot "/www/port/9081"
<Directory "/data/port/9081/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
第六步:启动服务并测试
[root@Apache ~]# /usr/local/apache2/bin/apachectl -t --检查配置文件是否正确
Syntax OK
[root@Apache ~]# /usr/local/apache2/bin/apachectl restart --重新启动apache
检查虚拟主机是否运行
[root@Apache ~]# curl 192.168.1.14:6081
port 6081
[root@Apache ~]# curl 192.168.1.14:7081
port 7081
[root@Apache ~]# curl 192.168.1.14:9081
port 9081
3. Apache基于域名的虚拟主机配置
第一步:使用ifconfig设置1个虚拟ip
[root@Apache ~]# ifconfig ens33:5 192.168.1.15/24
第二步:配置主机的hosts文件,便于测试
[root@Apache ~]# echo "192.168.1.15 www.aa.com" >> /etc/hosts
[root@Apache ~]# echo "192.168.1.15 www.bb.com" >> /etc/hosts
[root@Apache ~]# echo "192.168.1.15 www.cc.com" >> /etc/hosts
第三步:建立虚拟主机存放网页的根目录,并创建首页文件index.html
[root@Apache ~]# cd /www
[root@Apache ~]# mkdir www.aa.com
[root@Apache ~]# mkdir www.bb.com
[root@Apache ~]# mkdir www.cc.com
[root@Apache ~]# echo "www.aa.com" > www.aa.com/index.html
[root@Apache ~]# echo "www.bb.com" > www.bb.com/index.html
[root@Apache ~]# echo "www.cc.com" > www.cc.com/index.html
第四步:修改httpd.conf在文件末尾加入以下配置
[root@Apache ~]# vim /usr/local/apache2/conf/httpd.conf --文件末尾加入以下配置
Listen 192.168.1.15:80
Include conf/vhost/*.conf
第五步:编辑每个域名的配置文件
[root@Apache ~]# cd /usr/local/apache2/conf/vhost
[root@Apache ~]# vim www.aa.com.conf --一定要以.conf为后缀,这是第一台机器
<VirtualHost 192.168.1.15:80>
ServerName www.aa.com
DocumentRoot "/www/www.aa.com"
<Directory "/www/www.aa.com/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@Apache ~]# vim www.bb.com.conf --这是第二台机器
<VirtualHost 192.168.1.15:80>
ServerName www.bb.com
DocumentRoot "/www/www.bb.com"
<Directory "/www/www.bb.com/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@Apache ~]# vim www.cc.com.conf --这是第三台机器
<VirtualHost 192.168.1.15:80>
ServerName www.cc.com
DocumentRoot "/www/www.cc.com"
<Directory "/www/www.cc.com/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
第六步:启动服务并测试
[root@Apache ~]# /usr/local/apache2/bin/apachectl -t --检查配置文件是否正确
Syntax OK
[root@Apache ~]# /usr/local/apache2/bin/apachectl restart --重新启动apache
检查虚拟主机是否运行
[root@Apache ~]# curl www.aa.com
www.aa.com
[root@Apache ~]# curl www.bb.com
www.bb.com
[root@Apache ~]# curl www.cc.com
www.cc.com