一、虛擬主機概述
目的:實現單臺服務器部署多個獨立站點
三種部署方式:
- 相同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.comServerAlias 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端口),無需單獨處理端口