重定向到https

时间:2017-01-02 17:59:52

标签: redirect ssl nginx https

我是第一次设置网络服务器,并尝试让HTTPS工作。我从Let's Encrypt获得了证书,该站点将以HTTPS加载。我已经设置了配置,使用以下块将所有HTTP重定向到HTTPS:

server {
    listen 80;
    server_name sulphate.me;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name sulphate.me;
    ssl_certificate /etc/letsencrypt/live/sulphate.me/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/sulphate.me/privkey.pem;
    add_header Strict-Transport-Security "max-age=31536000";
}

然而,当我连接到网站(sulphate.me)时,它只是给了我'欢迎来到nginx!'页。因为我将它设置为返回301,所以我的浏览器现在总是进行永久重定向。

在添加这些块之前,它从/ var / www / html提供的内容很好,但现在根本不会。首先,为什么它不再提供内容,其次如何修复永久重定向,因为它不起作用?

提前致谢。

编辑:当我删除块并等待一下时,它现在按照惯例提供内容。就在我重定向时,它会搞砸了。

编辑2:现在,当我尝试通过地址栏手动转到HTTPS时,它显示错误521(Web服务器已关闭),但显然不是。

编辑3:Certificate Information,Cloudflare加密设置(12),Nginx SSL-Related Config Settings

只是为了澄清一下,当我收到521时,这些块不在我的配置中,它们现在已被重新添加,原始问题仍然存在(不在HTTPS上从root服务)。

2 个答案:

答案 0 :(得分:1)

该错误来自该域的CloudFlare,而不是nginx。如果您查看错误页面上的证书,您会看到它是CloudFlare,而不是您的。

在CloudFlare的免费计划中,它可能使用HTTP连接到您的源,除非您在CloudFlare中启用了Full / Strict HTTPS。所以它是这样的:

  

浏览器--- HTTPS ---> CloudFlare --- HTTP --->你的服务器。

所以,问题是,您的服务器始终将请求视为HTTP,因为CloudFlare正在使用它。您可能想要做的是查看X-Forwarded-For-Proto。然后它发出重定向,这是无效的,因为浏览器已经认为它是SSL。

另请注意,CloudFlare具有您的HTTPS证书,因此除非您使用Full / Strict HTTPS,否则在原点上设置一个并不重要。

您有几个选择。

  1. 使用X-Forwarded-For-Proto进行重定向。但CloudFlare可以already do this for you。在这种情况下,您的nginx安装根本不会执行HTTPS。这并不是完全推荐的,因为这意味着边缘和原点之间的流量未加密。

  2. 在CloudFlare中使用完整/严格SSL,以便它可以在代理和源之间执行HTTPS。

答案 1 :(得分:0)

您必须使用配置文件替换nginx default.conf才能使其正常工作。此外,您必须在使用return 301删除永久重定向后清除浏览器缓存,然后您只需开始使用return 302,它仍会重定向但不会保存在您的浏览器缓存中。