一、虚拟主机概述
目的:实现单台服务器部署多个独立站点
三种部署方式:
- 相同IP + 不同端口
- 不同IP + 相同端口
- 相同IP和端口 + 不同域名(FQDN)
示例目标:在服务器上部署 baidu 和 taobao 两个站点
方式1:相同IP + 不同端口
配置步骤:
#安装http插件
yum -y install httpd
#重启服务
systemctl restart httpd
systemctl enable httpd
#关闭selinux
setenforce 0
#进入www目录创建baidu和taobao
cd /var/www
mkdir baidu
mkdir taobao
#向两个站点里写入内容
echo baidu > baidu/index.html
echo taobao > taobao/index.html
1.复制虚拟主机模板
cp -p /usr/share/doc/httpd2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/
2.修改配置文件
vim /etc/httpd/conf.d/httpd-vhosts.conf
配置内容:
# 全局监听端口(必须在VirtualHost之外)
Listen 80
Listen 8080
<VirtualHost 192.168.100.20:80>
DocumentRoot "/var/www/baidu"
</VirtualHost>
<VirtualHost 192.168.100.20:8080>
DocumentRoot "/var/www/taobao"
</VirtualHost>
3.重启服务
systemctl restart httpd
systemctl enable httpd
4.防火墙配置
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#或者
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
方式2:不同IP + 相同端口
配置步骤:
1.添加辅助IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
添加内容:
IPADDR1=192.168.100.200
PREFIX1=24
重启网络:
systemctl restart network
2.修改虚拟主机配置
<VirtualHost 192.16.100.20:80>
DocumentRoot "/var/www/baidu"
</VirtualHost>
<VirtualHost 192.168.100.200:80>
DocumentRoot "/var/www/taobao"
</VirtualHost>
3.重启服务
systemctl restart httpd
systemctl enable httpd
4.防火墙配置
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#或者
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
方式3:相同IP/端口 + 不同域名
域名规划:
- baidu → baidu.example.com → 172.16.30.20:80
- taobao → taobao.example.com → 172.16.30.20:80
配置步骤:
1.DNS服务器配置
vim /var/named/example.com.zone
添加记录:
baidu.example.com. IN A 192.168.100.20
taobao.example.com. IN A 192.168.100.20
重启DNS服务:
systemctl restart named
2.修改虚拟主机配置
# 启用名称虚拟主机
NameVirtualHost *:80
<VirtualHost 192.168.100.20:80>
DocumentRoot "/var/www/baidu"
ServerName baidu.example.com
# 建议添加以下配置防止未匹配域名访问到错误站点
ServerAlias www.baidu.example.com
</VirtualHost>
<VirtualHost 192.168.100.20:80>
DocumentRoot "/var/www/taobao"
ServerName taobao.example.com
ServerAlias www.taobao.example.com
</VirtualHost>
3.重启服务
systemctl restart httpd
systemctl enable httpd
4.防火墙配置
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#或者
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
关键说明:
端口监听位置
Listen
指令必须放在VirtualHost
外部(全局配置区域)DNS记录格式
域名解析需使用完整FQDN(如baidu.example.com.
),结尾点号不能省略名称虚拟主机声明
基于域名的虚拟主机需要NameVirtualHost *:80
声明(Apache 2.2必需,2.4可选但建议保留)默认站点防护
添加_default_
虚拟主机块可防止未匹配域名的请求访问到第一个站点:<VirtualHost _default_:80> DocumentRoot /var/www/default # 或直接拒绝访问 # Redirect 403 / </VirtualHost>
防火墙优化
方式2/3只需开放HTTP服务(80端口),无需单独处理端口