Apache配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置。
1、基于IP的虚拟主机配置
如果同一台服务器有多个IP,可以使用基于IP的虚机主机配置,将不同的服务绑定在不同的IP上。
1.1 假设服务器有个IP地址为192.168.2.150,首先使用ifconfig在同一个网络接口上绑定其他3个IP。
[root@localhost ~]# ifconfig ens33:1 192.168.2.151/24 up
[root@localhost ~]# ifconfig ens33:2 192.168.2.152/24 up
[root@localhost ~]# ifconfig ens33:3 192.168.2.153/24 up
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.106 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::2a8d:be6:a4a8:ea0 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:16:90:ae txqueuelen 1000 (Ethernet)
RX packets 1220 bytes 87955 (85.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 206 bytes 23755 (23.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.151 netmask 255.255.255.0 broadcast 192.168.2.255
ether 00:0c:29:16:90:ae txqueuelen 1000 (Ethernet)
ens33:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.152 netmask 255.255.255.0 broadcast 192.168.2.255
ether 00:0c:29:16:90:ae txqueuelen 1000 (Ethernet)
ens33:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.153 netmask 255.255.255.0 broadcast 192.168.2.255
ether 00:0c:29:16:90:ae txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 72 bytes 6252 (6.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 72 bytes 6252 (6.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1.2 3个IP对应的域名如下,配置主机的host文件便于测试
[root@localhost ~]# vim /etc/hosts
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.151 www.test151.com
192.168.2.152 www.test152.com
192.168.2.153 www.test153.com
1.3 建立虚拟主机存放网页的根目录,并创建首页文件index.html
[root@localhost /]# mkdir -p /data/www
[root@localhost /]# cd /data/www
[root@localhost www]# mkdir 151
[root@localhost www]# mkdir 152
[root@localhost www]# mkdir 153
[root@localhost www]# echo "192.168.2.151" > 151/index.html
[root@localhost www]# echo "192.168.2.152" > 152/index.html
[root@localhost www]# echo "192.168.2.153" > 153/index.html
[root@localhost www]# ls
151 152 153
1.4 修改httpd.conf,在文件末尾加入以下配置
[root@localhost /]# cd /usr/local/apache/conf/
[root@localhost conf]# ls
extra httpd.conf magic mime.types original
[root@localhost conf]# vim httpd.conf
在httpd.conf文件末尾加入以下配置
Listen 192.168.2.151:80
Listen 192.168.2.152:80
Listen 192.168.2.153:80
Include conf/vhost/*.conf
1.5 编辑每个IP的配置文件
[root@localhost conf]# mkdir -p vhost
[root@localhost conf]# cd vhost/
[root@localhost vhost]# cat www.test151.conf
<VirtualHost 192.168.2.151:80>
#主机名
ServerName www.test151.com
#配置访问跟目录
DocumentRoot "/data/www/151"
#这里配置欢迎首页面
DirectoryIndex index.html index.htm index.php
<Directory "/data/www/151">
#服务器允许在此目录中使用符号连接
Options Indexes FollowSymLinks
#不允许别人修改我们的页面
AllowOverride None
#设置访问权限
Require all granted
</Directory>
</VirtualHost>
[root@localhost vhost]# cat www.test152.conf
<VirtualHost 192.168.2.152:80>
#主机名
ServerName www.test152.com
#配置访问跟目录
DocumentRoot "/data/www/152"
#这里配置欢迎首页面
DirectoryIndex index.html index.htm index.php
<Directory "/data/www/152">
#服务器允许在此目录中使用符号连接
Options Indexes FollowSymLinks
#不允许别人修改我们的页面
AllowOverride None
#设置访问权限
Require all granted
</Directory>
</VirtualHost>
[root@localhost vhost]# cat www.test153.conf
<VirtualHost 192.168.2.153:80>
#主机名
ServerName www.test153.com
#配置访问跟目录
DocumentRoot "/data/www/153"
#这里配置欢迎首页面
DirectoryIndex index.html index.htm index.php
<Directory "/data/www/153">
#服务器允许在此目录中使用符号连接
Options Indexes FollowSymLinks
#不允许别人修改我们的页面
AllowOverride None
#设置访问权限
Require all granted
</Directory>
</VirtualHost>
[root@localhost vhost]# cat /data/www/151/index.html
192.168.2.151
[root@localhost vhost]# cat /data/www/152/index.html
192.168.2.152
[root@localhost vhost]# cat /data/www/153/index.html
192.168.2.153
1.5 配置完以后可以启动Apache服务并进行测试
[root@localhost conf]# /usr/local/apache/bin/apachectl -t
Syntax OK
[root@localhost conf]# /usr/local/apache/bin/apachectl start
[root@localhost conf]# curl http://www.test151.com
192.168.2.151
附:配置过程中出现的问题总结
1、启动时出现的问题
[root@localhost conf]# /usr/local/apache/bin/apachectl start
(98)Address already in use: AH00072: make_sock: could not bind to address 192.168.2.151:80
no listening sockets available, shutting down
AH00015: Unable to open logs
可能的原因有以下两个:
原因1:查看文件httpd.conf
将此行注释掉。
原因2:端口被其他程序占用
使用以下命令查看占用80端口的程序:
[root@localhost conf]# netstat -lnp|grep 80
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.2.153:80 0.0.0.0:* LISTEN 2757/httpd
tcp 0 0 192.168.2.152:80 0.0.0.0:* LISTEN 2757/httpd
tcp 0 0 192.168.2.151:80 0.0.0.0:* LISTEN 2757/httpd
根据PID查看
[root@localhost conf]# ps 2757
PID TTY STAT TIME COMMAND
2757 ? Ss 0:00 /usr/local/apache/bin/httpd -k start
杀掉占用80端口的程序
[root@localhost conf]# kill -9 2757
2、启动时出现的问题
如果apache版本是2.4的话,应该这么写
<Directory "/data/www/153">
#服务器允许在此目录中使用符号连接
Options Indexes FollowSymLinks
#不允许别人修改我们的页面
AllowOverride None
#设置访问权限
Require all granted
</Directory>
如果apache版本是2.4的话,应该这么写
<Directory "/data/www/153">
#服务器允许在此目录中使用符号连接
Options Indexes FollowSymLinks
#不允许别人修改我们的页面
AllowOverride None
#设置访问权限
Order allow,deny
Allow from all
</Directory>