Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> Web 伺服器

Apache httpd 基於域名的虛擬主機配置完整指南

編輯:Web 伺服器

虛擬主機三種模式

  • 基於域名:單一 IP,多個域名透過 Host 標頭區分(最常用、IP 節省)。
  • 基於 IP:每站點綁定獨立 IP(需多 IP,SSL 早期必需)。
  • 基於埠:同一 IP 不同埠(如 80、8080),適用內部測試,非生產標準。

基於域名虛擬主機配置步驟(CentOS/RHEL httpd 為例)

  1. 編輯主配置 /etc/httpd/conf/httpd.conf:
# 開啟名稱虛擬主機
NameVirtualHost *:80

# 取消預設 DocumentRoot(可選)
# DocumentRoot "/var/www/html"
  1. 在檔案末尾或 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
  1. 建立文件根目錄與測試頁面:
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
  1. 檢查語法並啟動:
httpd -t
systemctl start httpd
systemctl enable httpd

DNS 解析設定

所有域名(www.magedu.com、bbs.magedu.com...)A 記錄指向同一伺服器公網 IP。

進階:SSL/HTTPS 虛擬主機 (SNI)


    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 之前且未被註解。
  • 所有域名都導向第一個 VirtualHost:檢查 ServerName 拼寫、DNS 解析、瀏覽器快取。
  • 權限錯誤:確保 apache 使用者對 /vhosts/ 遞迴可讀取。
Copyright © Windows教程網 All Rights Reserved