Host 標頭區分(最常用、IP 節省)。/etc/httpd/conf/httpd.conf:# 開啟名稱虛擬主機 NameVirtualHost *:80 # 取消預設 DocumentRoot(可選) # DocumentRoot "/var/www/html"
Include conf.d/*.conf 區塊新增虛擬主機區塊:ServerName www.magedu.com DocumentRoot /vhosts/magedu ErrorLog logs/www.magedu.com-error_log CustomLog logs/www.magedu.com-access_log common ServerName bbs.magedu.com DocumentRoot /vhosts/bbs ErrorLog logs/bbs.magedu.com-error_log CustomLog logs/bbs.magedu.com-access_log common ServerName wp.magedu.com DocumentRoot /vhosts/wordpress ServerName pw.magedu.com DocumentRoot /vhosts/pw ServerName pma.magedu.com DocumentRoot /vhosts/phpmyadmin
mkdir -p /vhosts/{magedu,bbs,wordpress,pw,phpmyadmin}
echo "www.magedu.com" > /vhosts/magedu/index.html
echo "bbs.magedu.com" > /vhosts/bbs/index.html
echo "wp.magedu.com" > /vhosts/wordpress/index.html
echo "pw.magedu.com" > /vhosts/pw/index.html
echo "pma.magedu.com" > /vhosts/phpmyadmin/index.html
httpd -t systemctl start httpd systemctl enable httpd
所有域名(www.magedu.com、bbs.magedu.com...)A 記錄指向同一伺服器公網 IP。
ServerName www.magedu.com DocumentRoot /vhosts/magedu SSLEngine on SSLCertificateFile /etc/pki/tls/certs/www.magedu.com.crt SSLCertificateKeyFile /etc/pki/tls/private/www.magedu.com.key # ... 其他 SSL 參數
現代瀏覽器支援 SNI,單 IP 可承載多張憑證;舊版 IE XP 需獨立 IP。
#!/bin/bash
# 檢查 httpd 安裝
rpm -q httpd || yum -y install httpd
# 取消預設主站
sed -i 's@^DocumentRoot "@#&@' /etc/httpd/conf/httpd.conf
sed -i 's@^#NameVirtualHost@NameVirtualHost@' /etc/httpd/conf/httpd.conf
# 建立目錄
mkdir -p /vhosts/{magedu,bbs,wp,pw,pma}
# 批量產生虛擬主機配置
for u in www.magedu.com bbs.magedu.com wp.magedu.com pw.magedu.com pma.magedu.com; do
dir="/vhosts/${u%%.*}" # 簡易對應
cat >> /etc/httpd/conf/httpd.conf <
ServerName $u
DocumentRoot $dir
EOF
echo "$u" > "$dir/index.html"
done
# 語法檢查並啟動
httpd -t && systemctl enable --now httpd
httpd -t 報 NameVirtualHost *:80 has no VirtualHosts:確認 NameVirtualHost 指令在 VirtualHost 之前且未被註解。ServerName 拼寫、DNS 解析、瀏覽器快取。apache 使用者對 /vhosts/ 遞迴可讀取。