当redirect到https时,Nginx不从根服务器

我第一次build立一个networking服务器,并试图让HTTPS工作。 我已经从Let's Encrypt获得证书,并且该网站将以HTTPS加载。 我已经build立configurationredirect所有的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,我的浏览器现在总是要永久redirect。

在添加这些块之前,它已经从/ var / www / html提供了正确的内容,但是现在根本不会。 首先,为什么它不再服务内容,其次,我怎么能修复永久redirect,因为它不工作?

提前致谢。

编辑:当我删除块,并等待了一下,它现在正常服务的内容。 只是当我redirect它搞砸了。

编辑2:现在,当我尝试手动去HTTPS通过地址栏,它给了我错误521(Web服务器是closures的),当它显然不是。

编辑3: 证书信息 ,Cloudflareencryption设置( 1,2 ), Nginx SSL相关的configuration设置

而只是为了澄清,这些块不在我的configuration,当我收到521,他们现在已经被重新添加,原来的问题仍然ocurring(不从根服务HTTPS)。

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

在CloudFlare的免费计划中,除非您在CloudFlare中启用了完全/严格HTTPS,否则可能是使用HTTP连接到您的原始网站。 所以它是这样的:

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

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

另外请记住,CloudFlare具有HTTPS证书,因此除非您使用完整/严格HTTPS,否则在源上设置一个并不重要。

你有几个选择。

  1. 使用X-Forwarded-For-Proto进行重定向。 但CloudFlare 已经可以为你做这个了 。 在这种情况下,你的nginx安装根本不会执行HTTPS。 这不是完全推荐的,因为这意味着边缘和原点之间的流量没有被加密。

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

你必须用你的配置文件替换nginx的default.conf才能工作。 此外,你必须清除你的浏览器缓存使用return 301删除永久重定向,你可以简单地开始使用return 302 ,它仍然会重定向,但不会保存在您的浏览器缓存。