Cloudflare配置正确对接Vercel站点时出现301重定向错误如何解决
问题描述
我尝试将Cloudflare作为托管在Vercel上站点的DNS服务商,DNS配置开启了Proxied代理模式。虽然Vercel官方默认不推荐该模式,但其官方文档给出了允许使用ProxiedDNS配置的方案,我参照文档创建了对应页面规则,配置如下图所示:
当前预期访问应该返回404 Not Found错误,但实际却返回301 Permanent Redirect错误,响应报文如下:
HTTP/1.1 301 Moved Permanently Date: Sun, 05 Sep 2021 08:38:30 GMT Connection: keep-alive Cache-Control: max-age=3600 Expires: Sun, 05 Sep 2021 09:38:30 GMT Location: https://dispatchbot.ml/.well-known/acme-challenge Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=wImD0Hy4nEZEgaw3eCBVGSVyscQ8zEezbEjTjSJPIOSL%2BnsDFGnrbsyJkgP3LqweeZ0uC85E6kK%2FO4nPFA23%2BZaF5jgCZJOnawGwIotLAZ7nySmGHfHopr1qrut%2FaFDePg%3D%3D"}],"group":"cf-nel","max_age":604800} NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800} Server: cloudflare CF-RAY: 689e244b8fb00efc-BOM alt-svc: h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400, h3=":443"; ma=86400
备注:我已开启Cloudflare的Always use HTTPS设置,SSL/TLS Encryption模式设置为Full (Strict)。
解决方案
故障根因
该301跳转由Cloudflare全局规则优先级高于自定义页面规则导致:Cloudflare默认对ACME证书挑战路径有特殊重定向逻辑,你配置的/.well-known/acme-challenge/*路径规则优先级不足,加上开启了全局Always Use HTTPS,两个规则叠加触发了非预期的301跳转。
修复步骤
- 调整页面规则排序:将针对
/.well-known/acme-challenge/*路径的自定义规则拖动到所有页面规则的最顶端,确保其优先级高于其他所有规则 - 核对规则配置项:该路径的规则必须同时满足三个配置:
SSL 关闭、缓存级别 忽略缓存、自动HTTPS重写 关闭,任意一项配置错误都会导致跳转 - 清除Cloudflare全局缓存:规则调整完成后,清理所有Cloudflare节点缓存,避免旧的重定向响应缓存持续生效
- 可选优化:可以关闭全局
Always Use HTTPS,新增一条匹配全站路径的页面规则设置强制HTTPS,优先级放在ACME路径规则之后,完全避免规则冲突
验证方法
可以通过curl指定Vercel源站IP访问目标路径,排除Cloudflare代理的影响,如果源站直接返回301,需要先检查Vercel侧的域名绑定与自定义重定向规则是否配置正确。
内容的提问来源于stack exchange,提问作者user14036065
相关产品推荐
相关产品推荐

