You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发环境下Stripe Webhooks接收异常求助(返回200无日志)

排查思路与解决方案

1. 修正Nginx的API转发配置(核心嫌疑)

你的Nginx配置中location /api/的proxy_pass指向了https://dev.app.com/,这会导致循环代理:Nginx监听dev.app.com的443端口,收到/api/请求后又转发回同一个域名,请求根本没到达Spring Boot后端。

修改方式:将proxy_pass改成后端服务的实际地址(比如后端运行在本地8080端口,就用http://localhost:8080/;如果是内网地址,就用对应的http地址):

location /api/ {
    proxy_pass  http://localhost:8080/; # 替换为后端实际地址
    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_connect_timeout 10; # 建议延长超时时间,避免Stripe请求被提前断开
    proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
    # 移除proxy_intercept_errors on,避免拦截后端的错误响应
}

2. 确认Stripe Webhook的端点路径

你的后端Webhook端点是@PostMapping("/webhook"),结合Nginx的/api/转发规则,Stripe控制台中配置的Webhook URL应该是https://dev.app.com/api/webhook,而不是https://dev.app.com/webhook。

如果配置成后者,请求会被Nginx的location /规则处理,返回React的index.html(状态码200),但后端完全没收到请求,这正好符合你描述的“Stripe显示200但无后端日志”的现象。

3. 排查日志输出问题

  • 检查Nginx的日志文件:查看/var/log/nginx/access.log,搜索是否有Stripe发送的POST /api/webhook请求;查看error.log是否有转发失败的错误信息(比如连接后端超时、SSL错误)。
  • 替换System.out.println为标准日志框架:生产环境中Spring Boot可能不会捕获System.out的输出,改用SLF4J日志(比如log.info()),并确保日志配置正确(比如application.properties中指定logging.file.name或logging.path,且目录有写入权限)。

4. 验证Webhook签名配置

  • 确认开发环境使用的Webhook Secret是Stripe控制台对应环境的正确密钥(测试环境和生产环境的Secret不同,不要混用本地的whsec_开头的密钥)。
  • 检查Nginx是否修改了请求体:Stripe的签名验证依赖原始请求体,如果Nginx开启了gzip压缩或者修改了请求编码,会导致签名验证失败。可以在location /api/中添加配置确保请求体未被修改:
proxy_set_header Content-Encoding "";
proxy_pass_request_body on;

5. 检查后端服务状态

  • 确认Spring Boot服务在开发环境中正常运行,且监听的端口与Nginx转发的地址一致。
  • 直接访问后端的Webhook端点(比如用curl命令:curl -X POST https://dev.app.com/api/webhook -d "test" -H "Stripe-Signature: test"),查看后端是否有日志输出,验证端点是否可达。

内容的提问来源于stack exchange,提问作者Beesz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:14:52