Nginx
使用 nginx 刪除“www”並重定向到“https”
我想在 nginx 中創建一個規則來做兩件事:
- 刪除“www”。從請求 URI
- 如果請求 URI 是“http”,則重定向到“https”
有很多關於如何單獨完成這些事情的範例,但我無法找到一個同時正確完成的解決方案(即不創建重定向循環並正確處理所有情況)。
它需要處理所有這些情況:
1. http://www.example.com/path 2. https://www.example.com/path 3. http://example.com/path 4. https://example.com/path
這些都應該在https://example.com/path (#4) 結束而不循環。有任何想法嗎?
實現這一點的最好方法是使用三個伺服器塊:一個將 http 重定向到 https,一個將 https www-name 重定向到 no-www,一個實際處理請求。使用額外的伺服器塊而不是 ifs 的原因是伺服器選擇是使用雜湊表執行的,並且非常快。使用伺服器級別的 if 意味著對每個請求都執行 if,這是一種浪費。此外,在重寫中擷取請求的 uri 是一種浪費,因為 nginx 已經在 $ uri and $ request_uri 變數(分別不帶和帶查詢字元串)。
server { server_name www.example.com example.com; return 301 https://example.com$request_uri; } server { listen 443 ssl; ssl_certificate /path/to/server.cert; ssl_certificate_key /path/to/server.key; server_name www.example.com; return 301 https://example.com$request_uri; } server { listen 443 ssl; ssl_certificate /path/to/server.cert; ssl_certificate_key /path/to/server.key; server_name example.com; <locations for processing requests> }