Nginx
Nginx:轉發所有子域
我的程式碼不適用於 domain.co.uk 等二級 tld
這是我的conf:
# add www. if ($host ~ ^(?!www)) { rewrite ^/(.*)$ http://www.$host/$1 permanent; } # remove subdomain if ($host ~ "^www\.(.*)\.(.*\.([a-z]{2,4}|[a-z]{2}\.[a-z]{2}))") { set $host_without_sub $2; rewrite ^/(.*)$ http://www.$host_without_sub/$1 permanent; }
您的原始配置沒有利用 nginx 配置。通過像這樣的重寫,nginx 將不得不對每個請求進行廣泛的解析。如果您處於性能和快速響應時間至關重要的環境中,那麼您將需要使用伺服器塊。
# Add www and redirect subdomains. server { listen 80; server_name domain.com *.domain.com; rewrite ^ http://www.domain.com$request_uri permanent; }
這樣就沒有復雜的解析,Nginx 使用雜湊表進行伺服器查找,重寫使用已經解析的 $request_uri 變數。
我不確定你為什麼有兩個版本。這是我的配置中的內容。
www.
它從任何域的開頭刪除:server { # omitting listen/server_name/access_log/error_log if ($host ~* www\.(.*)) { set $wwwless $1; rewrite ^(.*)$ $scheme://$wwwless$1 permanent; } # locations, other rules, etc }