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

Nginx 泛子域名解析綁定至獨立目錄完整配置指南

編輯:關於伺服器

前言

在 Web 伺服器管理中,經常需要實現泛子域名自動對應到不同的網站目錄。例如 user1.example.com 訪問 /home/user/www/user1/,user2.example.com 訪問 /home/user/www/user2/。Nginx 通過正則捕獲子域名並動態設置 root 路徑,即可輕鬆實現此需求。

核心配置示例

server {
    listen 80;
    server_name domain.com www.domain.com *.domain.com;

    set $subdomain '';
    if ($host ~* (\b(?!www\b).+)\.domain\.com) {
        set $subdomain -$1;
    }

    root /home/user/www$subdomain/;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP 處理配置(視具體環境調整)
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

關鍵指令解析

1. server_name 泛域名匹配

*.domain.com 使 Nginx 接受任意子域名請求。同時保留 domain.com 和 www.domain.com 確保主域名正常訪問。

2. 正則提取子域名

if ($host ~* (\b(?!www\b).+)\.domain\.com) 使用負向前瞻 (?!www\b) 排除 www 開頭的訪問,捕獲真實子域名部分(如 blog、shop 等)。

3. 動態設置根目錄

通過 set $subdomain -$1 將捕獲的子域名賦值給變量,最終在 root 指令中拼接路徑。若為主域名訪問,$subdomain 為空,根目錄即為 /home/user/www/。

進階優化建議

  • 目錄自動創建:搭配腳本或 mkdir -p 確保目標目錄存在
  • 權限控制:確保 Nginx 進程用戶對目標目錄有讀執行權限
  • SSL 證書:使用通配符證書(如 *.domain.com)實現全站 HTTPS
  • 日誌分離:配置 access_log 和 error_log 按子域名分離存儲

常見問題排查

現象可能原因解決方案
子域名返回 404目標目錄不存在或權限不足檢查目錄路徑、執行 chmod 755 和 chown www:www
主域名也進入子目錄正則未正確排除 www 和裸域名優化正則,確保 www 和 @ 不被捕獲
配置重載失敗語法錯誤或指令衝突執行 nginx -t 檢查語法,查看錯誤日誌

總結

Nginx 泛子域名配置的核心在於 server_name 泛匹配、正則提取子域名、動態構建 root 路徑三步走。掌握此技巧,可輕鬆支撐 SaaS 多租戶、用戶個人主頁、多站點集群等場景,大幅降低運維成本。

Copyright © Windows教程網 All Rights Reserved