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

Fastify-http-proxy无法实现动态路由随机切换后端上游服务的问题

问题根源
  • 参数层级配置错误:disableCache、cacheURLs是@fastify/http-proxy的顶层配置项,你当前将其放到replyOptions子项中,两个禁用缓存的配置完全不生效,底层依赖的@fastify/reply-from会默认缓存第一次解析得到的上游地址,导致后续请求都走第一次的上游
  • 顶层upstream参数不能为空,即使配置了动态getUpstream也需要传入合法的初始值,否则初始化阶段会产生异常缓存
修复方案
  1. 优先替换为官方维护的新版代理包,旧的fastify-http-proxy已经停止维护:
npm uninstall fastify-http-proxy && npm install @fastify/http-proxy
  1. 调整配置的参数层级,将禁用缓存的配置移到顶层:
server.register(require('@fastify/http-proxy'), {
  // 填写合法的初始上游值,仅用于初始化,实际会被getUpstream的返回值覆盖
  upstream: `http://localhost:${backend1Port}`,
  // 禁用上游地址缓存的配置放在顶层
  disableCache: true,
  cacheURLs: 0,
  replyOptions: { 
    getUpstream: (originalReq, base) => {
      if (Math.random() < 0.5) {
        console.log(`setting base to backend1`)
        return `http://localhost:${backend1Port}`
      } else {
        console.log(`setting base to backend2`)
        return `http://localhost:${backend2Port}`
      }
    }
  },
})
验证注意事项
  • 浏览器端测试时请关闭页面缓存,或者使用无痕模式访问,避免浏览器缓存了前一次的响应资源,看起来没有切换上游
  • 如果需要更可控的负载均衡策略,可以在服务端维护一个请求计数器,实现轮询、加权轮询等分配逻辑,替代随机分配的方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:04