重定向循环 SSL Nginx Cloudflare

重定向循环 SSL Nginx Cloudflare

我有 CloudFlare 的 Universal SSL。我想在我的 Ghost 博客上设置永久 SSL 重定向。

这是我原来的配置。单独使用时效果很好http://example.comhttps://example.com

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

server_name example.com; # Replace with your domain

root /usr/share/nginx/html;
index index.html index.htm;

client_max_body_size 10G;

location / {
    proxy_pass http://localhost:2368;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
}
}

这是我尝试配置从 HTTP 重定向到 HTTPS 的操作,但结果出现了重定向循环

server {
   listen      80 default_server;
   server_name example.com;
   return      301 https://example.com$request_uri;
}

server {
   listen   443 ssl;
   ssl      on;
   ssl_certificate /etc/nginx/ssl/cert/example.crt;
   ssl_certificate_key /etc/nginx/ssl/private/example.key;
   ssl_session_cache  shared:SSL:10m;
   ssl_session_timeout 5m;
   server_name example.com; # Replace with your domain
   root /usr/share/nginx/html;
   index index.html index.htm;

   client_max_body_size 10G;

    location / {
       proxy_pass http://localhost:2368;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_buffering off;
   }
}

不完全确定其为何循环。

答案1

我没有足够的代表来添加上面的评论,但我也遇到了这个问题,我设法解决它的唯一方法是禁用特定 DNS 条目的 CloudFlare,这显然不是理想的。

基于此,这似乎是 CloudFlare 为已启用 SSL(从 HTTP 重定向到 HTTPS)的 DNS 条目实施通用 SSL 的方式存在问题。此外,似乎无法为特定 DNS 条目禁用 CloudFlare SSL。

抱歉我不能提供更多帮助,但如果我找到解决方案,我一定会在这里发布。

答案2

受到 Pascal 答案的启发,我尝试修改 cloudflare 和我的服务器之间的连接类型灵活的 SSL完整的 SSL. 对我来说,它就是这样运作的。

事后看来,这似乎是合乎逻辑的,因为灵活的 SSL流程是:

  1. 用户通过 SSL 连接到 cloudflare
  2. cloudflare 通过纯 http 连接到服务器
  3. 服务器发出重定向作为响应
  4. cloudflare 将响应转发给客户端(重定向)
  5. 冲洗并重复

如果我启用完整的 SSL,重定向不再发生,因为 cloudflare 通过 ssl 连接到服务器。

答案3

我遇到了同样的问题,最后在 Ghost 的 config.js 中设置了 和urlurlSSL这不会强制使用 SSL,但如果用户通过 https 访问博客,则设置此项将确保所有未来导航也将通过 https 进行。

以前,如果用户点击了一篇博客文章,然后点击了任何其他内部链接,则该链接将与所有其他未来请求一起通过 http 提供。设置该urlSSL属性至少可以解决这个问题。

url: http://blog.example.com,
urlSSL: https://blog.example.com

参考:http://support.ghost.org/config/#ssl

答案4

我刚刚在我的幽灵实例上遇到了同样的问题,并在这里讨论了一下:

https://stackoverflow.com/questions/40816988/infinite-redirect-nginx/40817660#40817660

事实证明我遇到了两个无限重定向问题 [ (┛◉Д◉)┛彡┻━┻ ],一个与我的服务器配置有关,另一个与我的 cloud-flare 配置有关。

要将 SSL 与 cloud-flare 结合使用,您需要:

  • 转到概述选项卡 > 设置摘要 > 单击 SSL 并将 SSL 从“灵活”更改为“完全(严格)”。
    • 这也可以在“加密”选项卡 > SSL > 单击 SSL 下找到,然后将 SSL 从“灵活”更改为“完全(严格)”。

由于您在 vHost 中引用了端口为 2368 的代理通道,因此您可能也在运行 ghost,这很合乎逻辑。(我意识到这不是在该端口上运行的唯一软件。)

  • 检查你的config.js确保url:指向http并且不是 https

相关内容