SendGrid webhook请求ngrok地址返回404的配置问题咨询
SendGrid 搭配 ngrok 配置 Webhook 持续返回404的排查与配置说明
两者不存在官方层面的兼容问题,不需要做特殊的平台侧对接配置,404基本都是配置疏漏导致,按以下项逐一核对即可:
- 确认Webhook地址填全了完整路径
ngrok启动后输出的默认地址是根域名(例如https://xxxx-xx-xx-xx-xx.ngrok.io),如果你的本地Webhook接收服务不是挂在根路径,而是带具体路由(比如本地跑在http://localhost:8080/sendgrid/events),填到SendGrid后台的地址必须是完整路径https://xxxx-xx-xx-xx-xx.ngrok.io/sendgrid/events,漏写路径段必然返回404。 - 验证ngrok链路的POST请求连通性
SendGrid推送事件固定使用POST方法,不会发GET请求。你可以先打开ngrok本地监控面板(默认地址http://localhost:4040),看SendGrid发过来的请求实际命中的路径、返回404的层级:如果请求在ngrok层就被拦截没到本地服务,检查ngrok是否开了访问限制;如果请求已经到本地服务才返回404,检查本地服务的路由是否正确注册了POST方法的对应路径。可以自己用curl发测试请求提前验证:curl -X POST "你的ngrok完整Webhook地址" -d "test=1" - 关闭ngrok免费版的默认拦截校验
未升级付费的ngrok隧道默认会对陌生来源请求插入告警拦截页,SendGrid的服务端推送请求不会执行页面跳转,会被直接拦截,部分场景下会返回404状态码。启动隧道时加上--inspect=false参数跳过流量检查即可:ngrok http 8080 --inspect=false - 排除接收端逻辑的误拦截
如果你的接收接口加了SendGrid签名校验、来源IP校验逻辑,逻辑写错时也可能误返回404状态码,测试链路时可以临时关掉校验逻辑,等推送正常后再逐段加回校验规则。
注意:Webhook测试工具提供的地址是已经部署在公网的成熟接收服务,不存在路径映射、隧道拦截、本地路由的问题,能正常收到事件只能证明SendGrid侧的事件推送功能正常,不能代表你填的ngrok地址配置正确。
内容的提问来源于stack exchange,提问作者Gabriel Temitope
相关产品推荐
相关产品推荐

