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

如何为Firebase V2函数配置Cloudflare代理防护并解决404报错

解决Firebase V2函数Cloudflare CNAME代理后出现Google 404的问题

问题根源

Firebase V2(即Cloud Functions 2nd gen)的a.run.app域名会校验请求的Host头。你直接把自定义域名CNAME指向函数默认域名后,请求的Host是你的自定义域名(比如api.yourdomain.com),和函数的合法域名不匹配,所以Google返回404页面。

修复步骤

  • 绑定Firebase官方自定义域名(推荐方案)
    1. 打开Firebase控制台,进入你的项目,找到「函数」→「自定义域名」选项。
    2. 添加你的自定义域名(比如api.yourdomain.com),跟着指引完成DNS验证——在Cloudflare后台添加Firebase要求的TXT记录。
    3. 等待Google完成域名部署(通常需要几分钟到几小时),部署完成后,Firebase会给出一个目标域名(一般是ghs.googlehosted.com这类)。
    4. 在Cloudflare后台把CNAME记录的目标改成这个官方给出的域名,而不是直接指向a.run.app地址。
  • 临时方案:强制转发Host头(不推荐长期使用)
    如果不想走官方绑定,可以在Cloudflare用Worker修改请求的Host头:
    addEventListener('fetch', event => {
      event.respondWith(handleRequest(event.request))
    })
    
    async function handleRequest(request) {
      const targetHost = "*****-****-function-name-*****-***.a.run.app"
      const url = new URL(request.url)
      url.host = targetHost
      // 复制原请求的所有参数,替换Host
      const modifiedReq = new Request(url, {
        method: request.method,
        headers: request.headers,
        body: request.body,
        redirect: request.redirect
      })
      return fetch(modifiedReq)
    }
    
    注意:这种方法可能触发Google的安全校验,稳定性没有官方绑定高。
  • 检查Cloudflare基础设置
    • 把SSL模式设为「严格(Full)」,避免SSL握手出错。
    • 针对该域名关闭缓存,或者设置缓存策略为不缓存动态请求,防止旧的404响应被缓存。

验证方式

用curl测试请求,确认返回函数的正常响应:

curl -v https://api.yourdomain.com/你的函数路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:00