使用 cloudflare 的灵活 ssl 重定向循环

Deq*_*eqq 9 nginx cloudflare

我正在尝试将 CloudFlare 提供的灵活 SSL 实施到我的站点。

这是我的 nginx 配置:

# PHP-FPM upstream; change it accordingly to your local config!
upstream php-fpm {
    server 127.0.0.1:9000;
}

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

server {
    ## Listen ports
    listen 443;

    # use _ if you want to accept everything, or replace _ with domain
    server_name example.com www.example.com;

    location / {
      #proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_set_header X_FORWARDED_PROTO https;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  Host $http_host;
      proxy_set_header  X-Url-Scheme $scheme;
      proxy_redirect    off;
      proxy_max_temp_file_size 0;
    }

(...rest of config...)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试连接到网站 (Wordpress) 时,出现重定向循环(chrome:ERR_TOO_MANY_REDIRECTS)。如何配置 nginx 以防止这种情况发生?

AD7*_*six 29

Cloudflare 灵活的 ssl意味着 cloudflare 和您的服务器之间的连接始终通过 http:

连接始终是 http

鉴于此 - 相关性问题中唯一的服务器块是这个:

server {
   listen         80;
   server_name    example.com www.example.com;
   return         301 https://$server_name$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

很明显为什么这会导致重定向循环,有两种解决方案可以使用灵活的 ssl 解决方案强制 https 连接。

使用 Cloudflare 的页面规则

如果仅通过 cloudflare 访问服务器,您可以使用 cloudflare 自己的页面规则来修改域、子域或任何 url 模式的响应:

使用 cloudflare 的页面规则

选项之一是强制使用 https:

始终使用 HTTPS

测试 $http_x_forwarded_proto

有时您可能希望避免使用页面规则(应该很少见或仅用于过渡),对于这些场景,可以测试转发协议并基于此进行重定向:

server {
   listen         80;
   server_name    example.com www.example.com;

   if ($http_x_forwarded_proto = "http") {
     return 301 https://$server_name$request_uri;
   }

   ... directives to generate a response
}
Run Code Online (Sandbox Code Playgroud)


pro*_*sti 5

如果您拥有有效的 SSL 证书,这可以解决问题。[Crypto] 框并选择Full (strict)如图所示。 在此处输入图片说明

真的不需要更新 Nginx 的 web 服务器配置文件。