Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect 重定向到https时,Nginx不从根目录提供服务_Redirect_Ssl_Nginx_Https - Fatal编程技术网

Redirect 重定向到https时,Nginx不从根目录提供服务

Redirect 重定向到https时,Nginx不从根目录提供服务,redirect,ssl,nginx,https,Redirect,Ssl,Nginx,Https,我第一次设置了一个Web服务器,并试图让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 sulp

我第一次设置了一个Web服务器,并试图让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";
}
然而,当我连接到这个站点(sulfate.me)时,它只会给我一个“欢迎使用nginx!”页因为我将其设置为返回301,所以我的浏览器现在总是转到永久重定向

在添加这些块之前,它可以很好地从/var/www/html提供内容,但现在它根本不能。首先,为什么它不再为内容提供服务,其次,如果它不工作,我如何修复永久重定向

提前谢谢

编辑:当我删除了块并等待了一段时间后,它现在像往常一样提供内容。就在我重定向它的时候,它把事情搞砸了

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

编辑3:,Cloudflare加密设置(,)


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

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

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

浏览器--HTTPS-->CloudFlare--HTTP-->您的服务器

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

还请记住,CloudFlare有您的HTTPS证书,因此在源站上设置一个证书并不重要,除非您使用完整/严格的HTTPS

你有几个选择

  • 用于执行重定向。但CloudFlare可以。在这种情况下,您的nginx安装根本不会使用HTTPS。不完全建议这样做,因为这意味着边缘和原点之间的通信量没有加密

  • 在CloudFlare中使用完整/严格的SSL,以便它可以在其代理服务器和源服务器之间执行HTTPS


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

    我相当确定我网站上的证书不是Cloudflare的。它归“科摩多CA有限公司”所有。另外,很抱歉没有弄清楚,在接收521时,重定向块不在配置中。我从多个来源进行了研究,发现这些块对于将HTTP连接永久重定向到HTTPS是正确的,但它不会服务于HTTPS的任何网页。谢谢(我在帖子中添加了链接)@我写了这个答案后,网站的行为发生了变化。是的,我意识到,我重新添加了将HTTP重定向到HTTPS的块。(这是我想要解决的原始问题:)@它仍然是CloudFlare证书。看看证书,它是发给“sni210448.cloudflaressl.com”的——CloudFlare使用Comodo作为其CA。Let's Encrypt证书将由Let's Encrypt中间层颁发。这不是您的let's encrypt证书。所以我仍然怀疑CloudFlare正在使用HTTP连接到您的源站。好的,好的。那么让我们加密证书是完全不相关的?还有,我将如何着手解决我真正想要解决的原始问题?