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

Apache 虛擬主機端口映射:為每個項目分配獨立端口

     編輯:PHP 相關知識

核心原理

Apache 通過 Listen 指令監聽多個端口,結合 NameVirtualHost 和 <VirtualHost> 容器,將不同端口映射到不同的 DocumentRoot,實現「一個端口 = 一個獨立站點/項目」。

配置步驟 (httpd.conf / apache2.conf)

1. 添加監聽端口

# 原有默認端口
Listen 80

# 新增項目端口 (根據需要添加)
Listen 8080
Listen 8001
Listen 8002
Listen 8003

2. 配置基礎目錄權限 (建議放寬以便虛擬主機繼承)

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Require all granted   # Apache 2.4+ 語法,替代 Order/Deny/Allow
</Directory>

3. 定義虛擬主機映射

# 啟用基於端口的虛擬主機 (Apache 2.4 可省略)
NameVirtualHost *:80
NameVirtualHost *:8080
NameVirtualHost *:8001
NameVirtualHost *:8002
NameVirtualHost *:8003

# 默認站點 (端口 80)
<VirtualHost *:80>
    DocumentRoot "D:/wamp/www"
    ServerName localhost
    <Directory "D:/wamp/www">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

# 項目 A (端口 8001)
<VirtualHost *:8001>
    DocumentRoot "D:/projects/project-a/public"
    ServerName project-a.local
    <Directory "D:/projects/project-a/public">
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "logs/project-a-error.log"
    CustomLog "logs/project-a-access.log" common
</VirtualHost>

# 項目 B (端口 8002)
<VirtualHost *:8002>
    DocumentRoot "D:/projects/project-b"
    ServerName project-b.local
    <Directory "D:/projects/project-b">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

# 項目 C (端口 8003) - 原文示例
<VirtualHost *:8003>
    DocumentRoot "D:/wamp/www/RED4S_V3.0/svn/repos"
    ServerName 127.0.0.1:8003
    <Directory "D:/wamp/www/RED4S_V3.0/svn/repos">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

生效與驗證

  1. 保存配置,重啟 Apache:httpd -k restart 或系統服務重啟
  2. 瀏覽器訪問:
    https://localhost:8001/ → 項目 A
    https://localhost:8002/ → 項目 B
    https://localhost:8003/ → 項目 C
  3. 檢查錯誤日誌排查無法訪問問題

進階:配合 Hosts 文件使用域名

編輯 C:\Windows\System32\drivers\etc\hosts (Windows) 或 /etc/hosts (Linux/Mac):

127.0.0.1   project-a.local
127.0.0.1   project-b.local
127.0.0.1   project-c.local

虛擬主機配置中 ServerName project-a.local 即可通過 https://project-a.local:8001/ 訪問,更接近生產環境體驗。

常見問題與注意事項

問題解決
端口被佔用netstat -an | findstr :8001 檢查,更換端口或結束佔用進程
防火牆攔截Windows 防火牆/安全組/iptables 放行對應端口
403 Forbidden檢查 <Directory> 權限、路徑拼寫、Apache 運行用戶讀取權限
配置不生效確認配置文件被主配置 Include、語法檢查 httpd -t
SSL/HTTPS 需求每個端口需獨立 <VirtualHost *:443> + 證書,或統一 443 走 SNI

現代替代方案對比

方案優點缺點適用場景
端口映射 (本文)配置直觀、無需域名、隔離徹底端口資源有限、記憶成本高、非標準訪問本地多項目並行開發、臨時測試
基於域名的虛擬主機 (ServerName)標準 HTTP、共用 80/443、專業需配置 hosts/DNS、同端口下路徑隔離靠路由生產環境、團隊協作、長期項目
Docker 容器化環境一致、端口映射靈活、隔離級別高學習成本、資源佔用略高微服務、CI/CD、生產一致性要求高
內置 PHP Server / Valet / Homestead零配置、自動代理、適合 Laravel/Symfony功能受限、非生產級單項目快速啟動、框架開發

建議:本地開發階段使用「域名 + 80 端口」虛擬主機 (配合 dnsmasq 解析 *.test),項目間完全隔離時再考慮端口映射或 Docker。

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