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

Cloudflare负载均衡器能否修正后端重定向的Location头?

解决Cloudflare负载均衡下后端重定向暴露主机名的问题

Cloudflare负载均衡本身没有像Apache ProxyPassReverse那样的原生自动修正Location头的功能,但不需要修改后端服务器,用Cloudflare Workers就能轻松实现你要的效果。

问题原因

后端服务器返回重定向时,用了自身的主机名(比如backend1.example.com)生成Location头,导致浏览器直接绕开Cloudflare负载均衡访问后端,这会破坏负载均衡的调度逻辑。

解决方案:用Cloudflare Workers修改Location头

Cloudflare Workers可以拦截请求和响应,你只需要写一段简单的脚本,就能把后端返回的Location头替换成前端域名(app.example.com)或者相对路径。

方案1:替换为前端完整域名路径

把https://backend1.example.com/b改成https://app.example.com/b,脚本如下:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const response = await fetch(request)
  // 克隆响应,避免原始响应流被消耗
  const modifiedResponse = new Response(response.body, response)
  
  const location = modifiedResponse.headers.get('Location')
  if (location) {
    // 替换所有后端域名实例为前端域名
    const correctedLocation = location.replace(/https:\/\/backend\d\.example\.com/g, 'https://app.example.com')
    modifiedResponse.headers.set('Location', correctedLocation)
  }
  
  return modifiedResponse
}

方案2:替换为相对路径

把https://backend1.example.com/b改成/b,脚本如下:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const response = await fetch(request)
  const modifiedResponse = new Response(response.body, response)
  
  const location = modifiedResponse.headers.get('Location')
  if (location) {
    // 提取路径部分,去掉后端域名前缀
    const pathMatch = location.match(/https:\/\/backend\d\.example\.com(.*)/)
    if (pathMatch) {
      modifiedResponse.headers.set('Location', pathMatch[1])
    }
  }
  
  return modifiedResponse
}

部署步骤

  1. 登录Cloudflare控制台,进入你的域名管理页面
  2. 打开「Workers和Pages」选项,创建一个新的Worker
  3. 把上面的代码粘贴到编辑器中,保存并部署
  4. 在Worker的「触发器」中添加路由,匹配app.example.com/*,这样所有发往该域名的请求都会被这个Worker处理

注意事项

  • 如果后端有多个不同的主机名(比如backend3.example.com),调整正则表达式/https:\/\/backend\d\.example\.com/g来覆盖所有情况
  • 如果后端返回的是HTTP协议的Location头,把脚本中的https://改成http://即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:26:16