为什么我必须从 Flexible 更改为 Full 才能解决我使用 cloudflare 的 "too many redirects" 问题?

Why do I have to change from Flexible to Full to solve my "too many redirects" problem with cloudflare?

我刚刚建立了一个新网站。

设置完所有内容(带 LetsEncrypt 的 SSL)后,存在重定向问题。

我花了好几个小时才发现我可以通过在我的 cloudflare 设置中从 Flexible 切换到 Full 来解决它。但为什么?有人可以给我解释一下细节吗?

Nginx 配置文件:

server {
 
  server_name mysite.com;
 
  root /root/mysite;
  index index.html;
 
  location / {
    try_files $uri $uri/ =404;
  }


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = mysite.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


 
  server_name mysite.com;
    listen 80;
    return 404; # managed by Certbot


}

当设置配置为 Flexible 模式时,表示连接遵循此配置:

  • 在最终用户和 Cloudflare 之间,使用 HTTPS
  • 在 Cloudflare 和您的原始服务器之间,使用 HTTP

如果源不支持 HTTPS,但您仍希望最终用户安全地连接到 Cloudflare,这会很有用。建议始终使用完全有效的证书启用端到端 TLS。

如果您的来源配置为将 HTTP 请求重定向到 HTTPS,那么我们将进入一个循环,因为重定向的 HTTPS 请求返回到 Cloudflare,然后 Cloudflare 向来源发出 HTTP 请求...然后返回到哪里开始了!

在你的情况下,你的源服务器上似乎有一个完全有效的 Let's Encrypt 证书,所以你应该使用 Full (Strict) 。还提供了更多信息 here