Cloud Run服务未接收Firebase Hosting路由请求的排查求助
1. 验证重写规则的匹配逻辑
检查/api/**的glob匹配是否覆盖实际请求路径/api/export-video,可以尝试添加更具体的规则测试:
{ "hosting": { "rewrites": [ { "source": "/api/export-video", "run": { "serviceId": "vvvvv", "region": "vvvvv" } }, { "source": "/api/**", "run": { "serviceId": "vvvvv", "region": "vvvvv" } } ] } }
部署后重新触发请求,观察Cloud Run是否有实例活动。
2. 查看Firebase Hosting请求日志
在Firebase控制台的Hosting > 日志中,定位/api/export-video的请求记录,确认:
- 请求是否被标记为
rewrite类型 - 是否存在路由阶段的错误提示(如服务不存在、权限校验失败等)
3. 直接测试Cloud Run服务可访问性
跳过Firebase Hosting,直接用Cloud Run的公共URL发送POST请求(注意去掉/api前缀,因为重写会将/api/export-video映射到Cloud Run的/export-video路径):
curl -X POST https://<your-cloud-run-service-url>/export-video -d "test-payload"
如果直接访问也无响应,说明问题出在Cloud Run服务本身(如端口配置错误、应用未监听请求);若直接访问正常,则聚焦Firebase Hosting的路由配置。
4. 确认资源归属与跨项目权限
确保Firebase项目和Cloud Run服务属于同一个Google Cloud项目。如果是跨项目路由,需给Firebase Hosting的服务账号配置目标Cloud Run服务的roles/run.invoker权限。
5. 检查请求方法与CORS配置
- 确认Cloud Run应用代码正确处理POST请求,未限制请求方法
- 若客户端是浏览器发起请求,在
firebase.json中添加CORS头配置:
{ "hosting": { "headers": [ { "source": "/api/**", "headers": [ { "key": "Access-Control-Allow-Origin", "value": "*" }, { "key": "Access-Control-Allow-Methods", "value": "POST, OPTIONS" } ] } ] } }
6. 排查缓存干扰
若之前的错误响应被缓存,会导致后续请求直接返回错误。添加缓存禁用规则到firebase.json:
{ "hosting": { "headers": [ { "source": "/api/**", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" } ] } ] } }
部署后清除浏览器缓存再测试。
7. 核对Cloud Run路径匹配逻辑
Firebase Hosting重写时,会把/api/**匹配到的路径部分追加到Cloud Run服务URL后,比如/api/export-video会转发到Cloud Run的/export-video。确认Cloud Run应用监听的路径与该转发路径一致,避免因路径不匹配导致无日志输出。
内容的提问来源于stack exchange,提问作者See-M Records

