首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Apache 虛擬主機配置全攻略:多域名、多端口、IP 基於的三種模式圖文詳解

     編輯:PHP 相關知識

Apache VirtualHost 完全指南:一台伺服器跑多站點的標準姿勢

虛擬主機是 Apache 實現「一機多站」的核心機制。本文詳解基於域名、端口、IP 三種虛擬主機模式的配置步驟、關鍵指令含義、常見坑點與測試驗證方法。

核心配置文件結構

  1. 主配置 httpd.conf:啟用虛擬主機包含行 Include conf/extra/httpd-vhosts.conf(去掉 # 註釋)。
  2. 虛擬主機專用 httpd-vhosts.conf:集中管理所有站點配置,便於維護。

模式一:基於域名的虛擬主機(最常用)

前置條件:域名解析到同一 IP(生產環境用 A 記錄,本地測試改 C:\Windows\System32\drivers\etc\hosts 或 /etc/hosts)。

# httpd-vhosts.conf
# 站點 1:www.abc.com
<VirtualHost *:80>
    ServerAdmin admin@abc.com
    DocumentRoot "/usr/local/apache2/htdocs/joomla"
    ServerName www.abc.com
    ServerAlias abc.com *.abc.com
    ErrorLog "/usr/local/apache2/htdocs/abc/error_log"
    CustomLog "/usr/local/apache2/htdocs/abc/access_log" common
    <Directory "/usr/local/apache2/htdocs/joomla">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

# 站點 2:www.bbs.com
<VirtualHost *:80>
    ServerAdmin admin@bbs.com
    DocumentRoot "/usr/local/apache2/htdocs/bbs"
    ServerName www.bbs.com
    ErrorLog "/usr/local/apache2/htdocs/bbs/error_log"
    CustomLog "/usr/local/apache2/htdocs/bbs/access_log" common
    <Directory "/usr/local/apache2/htdocs/bbs">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

關鍵點:

  • *:80 監聽所有 IP 的 80 端口。
  • ServerName 必須與請求 Host 匹配。
  • ServerAlias 支援泛域名/多域名。
  • <Directory> 權限控制(Apache 2.4+ 用 Require all granted)。

模式二:基於端口的虛擬主機

適用於內網測試、特殊服務隔離,無需域名。

# httpd.conf 需先 Listen 多端口
Listen 80
Listen 8080
Listen 8081

# httpd-vhosts.conf
<VirtualHost *:8080>
    DocumentRoot "/var/www/site8080"
    ServerName localhost:8080
</VirtualHost>

<VirtualHost *:8081>
    DocumentRoot "/var/www/site8081"
    ServerName localhost:8081
</VirtualHost>

訪問 https://ip:8080、https://ip:8081 即可區分站點。

模式三:基於 IP 的虛擬主機

伺服器擁有多公網 IP,每站點綁定獨立 IP(需 SSL 獨立證書時常用)。

<VirtualHost 192.168.1.10:80>
    DocumentRoot "/var/www/site1"
    ServerName www.site1.com
</VirtualHost>

<VirtualHost 192.168.1.11:80>
    DocumentRoot "/var/www/site2"
    ServerName www.site2.com
</VirtualHost>

配置生效與驗證標準流程

  1. 語法檢查:apachectl -t 或 httpd -t,顯示 Syntax OK 才能重啟。
  2. 重啟服務:systemctl restart httpd / service apache2 restart / apachectl restart。
  3. 驗證:瀏覽器訪問域名/IP:端口,或 curl -H "Host: www.abc.com" https://localhost/ 測試域名匹配。

常見坑點避雷

現象原因解決
所有域名指向同一站點缺少 NameVirtualHost *:80 (Apache 2.2) 或首個 VirtualHost 成了默認2.4 無需 NameVirtualHost;確保有默認站點或按需匹配
403 Forbidden<Directory> 權限未放行添加 Require all granted (2.4) 或 Allow from all (2.2)
.htaccess 不生效AllowOverride None改為 AllowOverride All
端口衝突未在 Listen 添加端口Listen 8080 在 httpd.conf

總結

生產環境 99% 使用基於域名的虛擬主機。掌握 httpd-vhosts.conf 結構、ServerName/ServerAlias 匹配邏輯、<Directory> 權限三要素,加上 apachectl -t 驗證習慣,即可穩健管理百站點級 Apache 叢集。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved