开启 Cloudflare DNS 代理后提示重定向次数过多
原因分析
1 | 浏览器 → Cloudflare(443 HTTPS)→ Nginx → Target |
开启 DNS 代理后,Cloudflare SSL 默认使用 灵活 模式:
- 浏览器 ↔ Cloudflare:HTTPS
- Cloudflare ↔ 服务器:HTTP(明文)
此时 Nginx 如果配置了强制 HTTPS 跳转,流程变成:
1 | 浏览器请求 https:// |
解决方法
将 Cloudflare SSL 模式改为 完全(Full)
Cloudflare 控制台 → 域名 → 概述 → SSL/TLS → 将模式从 灵活 改为 完全 或 完全(严格)
| 模式 | 含义 |
|---|---|
| Flexible | CF → 源站用 HTTP,会导致循环 |
| Full | CF → 源站用 HTTPS(证书可自签) |
| Full (Strict) | CF → 源站用 HTTPS(需有效证书) |
改成 完全 后:Cloudflare 会用 HTTPS 访问 Nginx,不再触发重定向循环。
方法二:在 Nginx 中识别 Cloudflare 请求头,跳过强制跳转
Cloudflare 转发请求时会带 X-Forwarded-Proto 头:
1 | # 在 server 块中 |
改成只在非 Cloudflare 代理的情况下跳转,或者去掉 HTTP → HTTPS 的强制重定向,让 Cloudflare 那一层来处理 HTTPS。
方法三:Nginx 监听端口改为只接受 HTTP(让 CF 处理 HTTPS)
如果你不需要源站 HTTPS,可以让 Nginx 只监听 80,去掉强制跳转,由 Cloudflare 负责对外的 HTTPS:
1 | server { |
注意
开启 DNS + 完全 模式后:
CF 会用 HTTPS 回源到 Nginx
但 ACME 验证走的是 HTTP 80 端口
CF 默认会把 80 端口的请求也代理,并且可能强制跳转到 HTTPS
会导致 ACME 验证失败(HTTP-01 模式),无法自动续期证书
方法一:
Cloudflare 控制台 → SSL/TLS → Origin Server → Create Certificate → 下载证书配置到 Nginx 即可。
方法二:
使用 DNS-01 模式的 ACME 验证,不受 HTTP/HTTPS 影响。
- 标题: 开启 Cloudflare DNS 代理后提示重定向次数过多
- 作者: IsayIsee
- 创建于 : 2026-04-09 09:38:52
- 更新于 : 2026-05-18 14:00:26
- 链接: https://blog.120528.xyz/2026/04/09/fab5f098/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论