我是第一次设置网络服务器,并尝试让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加密设置(1,2),Nginx SSL-Related Config Settings
只是为了澄清一下,当我收到521时,这些块不在我的配置中,它们现在已被重新添加,原始问题仍然存在(不在HTTPS上从root服务)。
答案 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,否则在原点上设置一个并不重要。
您有几个选择。
使用X-Forwarded-For-Proto
进行重定向。但CloudFlare可以already do this for you。在这种情况下,您的nginx安装根本不会执行HTTPS。这并不是完全推荐的,因为这意味着边缘和原点之间的流量未加密。
在CloudFlare中使用完整/严格SSL,以便它可以在代理和源之间执行HTTPS。
答案 1 :(得分:0)
您必须使用配置文件替换nginx default.conf才能使其正常工作。此外,您必须在使用return 301
删除永久重定向后清除浏览器缓存,然后您只需开始使用return 302
,它仍会重定向但不会保存在您的浏览器缓存中。