我正在尝试将 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:

鉴于此 - 相关性问题中唯一的服务器块是这个:
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 自己的页面规则来修改域、子域或任何 url 模式的响应:

选项之一是强制使用 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)
| 归档时间: |
|
| 查看次数: |
20271 次 |
| 最近记录: |