Nginx 中使用 WWW 將 HTTP 重新導向到 HTTPS

Nginx 中使用 WWW 將 HTTP 重新導向到 HTTPS

我正在使用 LetsEncrypt ssl。當我使用domain.com訪問網站時,它被重定向到https://domain.com但我想要https://www.domain.com

我在 dns 面板中新增了 www 作為 domain.com 的別名,以便透過 www 存取網站。但現在我得到了雙重重定向。

第一個重定向:domain.com 到 https://domain.com,第二個重定向:https://domain.com 到 https://www.domain.com

我想透過單一 301 重定向來實現這一點。已經嘗試了SF中給出的多種解決方案。但沒有成功。有人知道嗎?

答案1

假設您有權存取 nginx 配置,且您的 LetsEncrypt 憑證包含 domain.com 和 www.domain.com,則類似以下內容應該有效:

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

server {
  listen 80;
  listen 443 ssl;
  server_name domain.com;
  ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
  return 301 https://www.domain.com$request_uri;
}

server {
  listen 443 ssl;
  server_name www.domain.com;
  ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

  # the rest of your config
}

我認為 SSL 憑證需要包含兩個網域,因為在請求時https://domain.comdomain.com 的 SSL 握手發生在觸發 301 重定向之前。

我想您還可以為每個網域擁有單獨的證書,並相應地調整證書路徑。

相關內容