【问题标题】:Nginx not serving from root when redirected to https重定向到 https 时,Nginx 不从 root 服务
【发布时间】:2017-05-16 19:48:29
【问题描述】:

我是第一次设置网络服务器,并试图让 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 服务)。

【问题讨论】:

    标签: redirect ssl nginx https


    【解决方案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。

    【讨论】:

    • 我很确定我网站上的证书不是 Cloudflare 的。它归“COMODO CA Limited”所有。也很抱歉不清楚,在收到 521 时,重定向块不在配置中。我从多个来源研究这些块对于将 HTTP 连接永久重定向到 HTTPS 是正确的,但它不会提供来自 HTTPS 的任何网页。谢谢。 (我已经添加了帖子的链接)
    • @Sulphate 自从我写下这个答案后,网站的行为发生了变化。
    • 是的,我意识到,我重新添加了将 HTTP 重定向到 HTTPS 的块。 (这是我想要解决的原始问题:))
    • @Sulphate 它仍然是 CloudFlare 证书。查看证书,它是发给“sni210448.cloudflaressl.com”的——CloudFlare 使用 Comodo 作为他们的 CA。 Let's Encrypt 证书将由 Let's Encrypt 中间人颁发。这不是您的让我们加密证书。所以我仍然怀疑 CloudFlare 正在使用 HTTP 连接到您的源。
    • 好的,好的。那么 Let's Encrypt 证书是完全不相关的吗?还有我将如何解决我真正想做的原始问题?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 2020-09-11
      • 2020-08-10
      • 1970-01-01
      相关资源
      最近更新 更多