Nginx
Nginx 重定向:強制子域和 SSL
ServerFault 上有很多問題涵蓋了這個問題的一部分,但我很難將它們拼湊在一起。我有一個安裝了萬用字元 SSL 證書的全新 nginx 伺服器。一切正常。我想創建強制執行以下內容的重定向規則:
必須強制執行 www 或子域。所以,subdomain.domain.com 和 www.domain.com 沒問題。domain.com 本身不是,應該自動添加 www。
無論子域如何,都必須在整個站點中強制執行 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。之後,第三個塊可以包含通常的伺服器配置。
希望能幫助到你!