首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

單 IP 服務器通過虛擬主機實現多域名共用 80 端口部署

     編輯:程式設計疑難解答

場景痛點

家庭/小型服務器環境:單公網 IP、單路由器、單 80 端口,需部署 www.aaa.com 和 www.bbb.com 兩個獨立網站,且要求域名後顯示完整 URL 路徑(如 www.bbb.com/contact.html),而非僅顯示主域名。

核心方案:基於 Host Header 的虛擬主機

同一 IP、同一 80 端口,通過 HTTP Host 頭區分不同網站,這是 Web 服務器(Nginx/Apache/Caddy)的標準功能,無需額外端口。

Nginx 配置示例

server {
    listen 80;
    server_name www.aaa.com aaa.com;
    root /var/www/aaa;
    index index.html index.php;
    # ... 其他配置
}

server {
    listen 80;
    server_name www.bbb.com bbb.com;
    root /var/www/bbb;
    index index.html index.php;
    # ... 其他配置
}

Apache 配置示例

<VirtualHost *:80>
    ServerName www.aaa.com
    ServerAlias aaa.com
    DocumentRoot /var/www/aaa
</VirtualHost>

<VirtualHost *:80>
    ServerName www.bbb.com
    ServerAlias bbb.com
    DocumentRoot /var/www/bbb
</VirtualHost>

域名解析設置

在域名服務商(GoDaddy/Cloudflare/阿里雲等)將兩個域名的 A 記錄均指向同一公網 IP:

www.aaa.com  A  55.24.15.222
www.bbb.com  A  55.24.15.222

為什麼之前用端口轉發會丟失子路徑?

當配置 www.bbb.com → IP:8801 時,若使用「URL 轉發/隱性轉發」模式,服務商通過 iframe 或框架嵌套加載目標站點,瀏覽器地址欄始終顯示頂層域名,導致子路徑不更新。虛擬主機直接解析到 IP:80,瀏覽器直接與目標站點通信,URL 自然完整顯示。

路由器端口映射

僅需一條規則:外部 80 → 內部服務器 IP:80,兩個網站共用。

進階:HTTPS 支持

使用 Let's Encrypt 為每個域名單獨申請證書,Nginx 配置 listen 443 ssl 並指定對應 ssl_certificate,實現多域名 HTTPS 共存。

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