Nginx

Nginx:轉發所有子域

  • October 10, 2020

我的程式碼不適用於 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
}

引用自:https://serverfault.com/questions/145141