在 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 重定向触发之前。

我想您也可以为每个域设置单独的证书,并相应地调整证书路径。

相关内容