【问题标题】:Rewriting HTTP to HTTPS in Nginx, using .conf settings在 Nginx 中将 HTTP 重写为 HTTPS,使用 .conf 设置
【发布时间】:2016-01-02 03:50:12
【问题描述】:

我在这里缺少什么?

server {
    listen 80;
    listen 443;

    if ($scheme = http) { rewrite ^(.*)$ https://domain.com$1 permanent; }
    if ($host ~* ^www\.) { rewrite ^(.*)$ https://domain.com$1 permanent; }
    ...
}

它给了我重定向循环错误。

【问题讨论】:

  • 您的 SSL 证书是否适用于 www.domain.comdomain.com
  • 是的,它也适用于 www。但实际上,第二次重写removes www.
  • 是的,我知道。我问的原因是想知道您是否会收到针对https://www.domain.com 的请求的证书警告。

标签: ssl nginx https rewrite


【解决方案1】:

我将利用可用的信息对此进行尝试。将所有请求从 http 重定向到 https 时,为端口 80 设置一个单独的服务器块是个好主意。同样,当将所有请求从一个主机名重定向到另一个主机名时,为每个主机名设置一个单独的服务器块也是一个好主意。

server {
    listen 80;
    server_name domain.com www.domain.com;

    return 301 https://domain.com$request_uri;
}

server {
    listen 443;
    server_name www.domain.com;

    return 301 https://domain.com$request_uri;
}

server {
    listen 443;
    server_name domain.com;

    ...
}

因此,我们在端口 80 上监听主机名并重定向到 https://domain.com,还在端口 443 上监听 https://www.domain.com,并将这些请求也重定向到 https://domain.com。这使您的 Nginx 配置清晰易读。

重要提示:请注意,如果您的 SSL 证书不包含 www.domain.com,那么对 https://www.domain.com 的请求将导致证书错误和相当讨厌的浏览器警告。在这种情况下,您应该将您的证书替换为包含两个主机名的证书。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2013-12-08
  • 2012-05-16
  • 2017-02-06
相关资源
最近更新 更多