Nginx

Nginx 重定向:強制子域和 SSL

  • July 22, 2016

ServerFault 上有很多問題涵蓋了這個問題的一部分,但我很難將它們拼湊在一起。我有一個安裝了萬用字元 SSL 證書的全新 nginx 伺服器。一切正常。我想創建強制執行以下內容的重定向規則:

  1. 必須強制執行 www 或子域。所以,subdomain.domain.com 和 www.domain.com 沒問題。domain.com 本身不是,應該自動添加 www。

  2. 無論子域如何,都必須在整個站點中強制執行 HTTPS。

換句話說:

ttp://domain.com >> ttps://www.domain.com

ttp://subdomain.domain.com >> ttps://subdomain.domain.com

ttps://domain.com >> ttps://www.domain.com

ttps://subdomain.domain.com(這很好)

根據 Nginx 重寫陷阱頁面和此站點上的其他答案,我一直在使用此配置程式碼:

server {
 listen 80;
 server_name *.domain.com;
 return 301 https://$server_name$request_uri;
}

還有這個:

server {
 listen 80;
 server_name ~^(.*)domain\.com;
 return 301 https://$server_name$request_uri;
}

我也嘗試過使用 $ host instead of $ 伺服器名稱。

所有這些都可以很好地重定向 http > https,但它始終預設為https://domain.com,無論子域或 www 是什麼。想法?

今天早上花了幾個小時後,我找到了答案。您需要兩個額外的伺服器塊:一個執行 www,一個執行 https,同時保留萬用字元子域。這是程式碼:

server {
   listen 80;
   listen 443;
   server_name domain.com;
   return 301 https://www.domain.com$request_uri;
}

server {
   listen 80;
   server_name ~^(?<subdomain>.+)\.domain\.com$;
   return 301 https://$subdomain.domain.com$request_uri;
}

server {
   listen 443 default_server;
   listen [::]:433 default_server ipv6only=on;

... the rest of your HTTPS server configuration goes here ...

第一個塊查找 no-www,無論它是 HTTP 還是 HTTPS。這重定向到 www.domain.com,很簡單。第二個塊使用正則表達式將子域放入變數中,然後返回相同的子域 + 域,僅使用 https。之後,第三個塊可以包含通常的伺服器配置。

希望能幫助到你!

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