Cloudflare环境下Stripe webhook返回HTTP 301错误问题求助
核心原因前提
Stripe 官方 Webhook 推送逻辑默认不会跟随 301/302 重定向,只要目标地址返回重定向状态码就会直接判定推送失败,所以必须保证配置的地址直接返回2xx状态码。
排查方向1:Cloudflare 侧配置校验
- 检查Cloudflare重定向规则/页面规则,是否存在非斜杠结尾路径强制补全尾部斜杠的全局规则:你配置的Webhook地址是
https://example.com/stripe-webhook(无尾部斜杠),如果Cloudflare规则将所有无斜杠结尾的路径301重定向到带/的版本,就会触发该错误。你手动测试时如果使用的客户端默认自动跟随重定向,就会感知不到重定向过程。 - 检查Cloudflare SSL/TLS加密模式:确认加密模式设置为「完全」或「严格」,如果使用「灵活」模式,Cloudflare到源站Nginx的请求会走HTTP协议,若Nginx配置了全局HTTP强制跳HTTPS规则,就会返回301重定向。
- 临时开启Cloudflare「开发模式」绕过所有缓存与规则,再用Stripe后台的测试推送功能验证,确认是否是Cloudflare侧规则导致的问题。
排查方向2:Nginx 反向代理配置校验
- 检查Nginx全局重写规则,是否有全局路径重写、尾部斜杠补全、HTTP跳转HTTPS的逻辑,为
/stripe-webhook路径单独配置最高优先级的location块,避免被全局规则匹配,参考配置:
location = /stripe-webhook { proxy_pass http://127.0.0.1:你的Node服务监听端口; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 禁止当前路径被其他重写规则作用 break; }
- 使用curl命令模拟Stripe请求,不要使用浏览器或自动跟随重定向的客户端测试,执行以下命令查看原始响应:
curl -I -X POST https://example.com/stripe-webhook -H "User-Agent: Stripe/1.0"
如果返回头中存在Location字段和301状态码,即可直接定位重定向的返回层级。
排查方向3:NodeJS 服务逻辑校验
- 确认Node服务没有引入全局路径重定向中间件(如express的slash中间件、Next.js的trailingSlash配置),避免服务层自动对路径做301重定向处理。
内容的提问来源于stack exchange,提问作者StanFlint
相关产品推荐
相关产品推荐

