nginx 将 http 重定向到 https 不起作用

nginx 将 http 重定向到 https 不起作用

我正在尝试从 http 重新路由到 https。例如,您访问 example.com,系统将自动重定向到https://example.com

我尝试使用这个:

server {
      listen         80;
      return 301 https://$host$request_uri;
} 

还有这个:

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

如此处所示:在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https?

但对我来说,这两种方法似乎都不起作用。我继续使用 example.com。

有人有主意吗?

答案1

您尚未为您的主机定义服务器名称。

server {
      listen         80;
      server_name    *.example.com example.com;
      return 301 https://$host$request_uri;
} 

否则不会调用您的主机。查看示例时,您会发现在两种情况下都定义了服务器名称。

答案2

我也遇到过类似的错误。页面没有重定向,而是一直显示 404。

结果是配置之间发生了冲突。

我的配置放在 /etc/nginx/conf.d/ 中。我没有注意到的是,在 /etc/nginx/sites-enabled/ 中有一个默认配置,它也监听端口 80,其优先级高于我在 conf.d 中的配置。只需删除默认配置即可解决我的问题,重定向可以正常工作。

答案3

您的第二个示例适用于任何请求http://example.com但是请记住 www.example.com 和 example.com 是不同的,因此如果您需要重定向 example.com 上的任何内容,您可以这样做

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

或者针对每个主机进行重定向,即

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

确保nginx -t通过 nginx 重新加载进行更改时,通过测试配置并重新加载配置。您可以通过实时 http 标头或 curl 测试您获得的内容

下面的输出是我在尝试向我们使用上面精确的服务器块指向 https 的域发送 http 标头请求时看到的。

$ curl -I -L http://host.domain.com
HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.2
Date: Mon, 06 Apr 2015 03:26:39 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://host.domain.com/

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Mon, 06 Apr 2015 03:26:41 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.22
Set-Cookie: PHPSESSID=dca72682392e7ac96d4b7703ea7a1eb1; path=/; domain=domain.com; secure; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=c910822f8007fe8c0424715a24aa4728; path=/; domain=domain.com; secure; HttpOnly

相关内容