You need to enable JavaScript to run this app. local-web-server配置API代理后不转发请求、直接返回504网关超时求助
优惠活动
大模型
产品
解决方案
定价
更多

local-web-server配置API代理后不转发请求、直接返回504网关超时求助

反向代理不发起后端连接直接返回504的排查方向

优先排查本地应用层配置问题(完全匹配抓不到SYN握手包的现象)

  • 环境变量注入校验:你的代理配置完全依赖SERVER环境变量拼接代理目标,首先要排除环境变量没传对、格式非法的问题。很多时候测试代码里明明写了传值,实际容器启动后进程根本没读到,导致rewrite的to字段拼出来是不合法的相对路径——这种情况下local-web-server根本不会进入出站代理逻辑,只会把请求当作本地静态资源路由处理,找不到对应文件时就直接挂起请求返回504,全程不会产生任何对外的SYN网络包。
    验证方式:进入运行中的web-server容器,执行cat /proc/1/environ查看web-server进程实际持有的所有环境变量,确认SERVER的值存在、且是带http:///https://协议头的完整可访问地址(比如不能是裸的host:port格式,否则会被判定为本地相对路径)。
  • local-web-server版本兼容问题:你在Dockerfile里全局安装local-web-server时没有锁版本,在Node.js 10.16.0这种老环境下很可能拉到了不兼容的新版本。新版本的local-web-server已经拆分了「路径重写」和「反向代理」的功能,原来靠rewrite字段直接配置代理到外部URL的写法,在新版里已经不会触发出站代理逻辑,只会做本地路径的重写,最终因为找不到本地文件触发504超时。
    验证方式:在容器内执行ws --version查看实际运行的版本,临时把配置里的日志格式从tiny改成最详细的开发级日志格式,重启服务后再发/api请求,看控制台日志的路由决策记录,确认请求是被当作静态资源处理,还是真的进入了代理流程。

容易被忽略的基础校验项

  • 别默认网络不通就一定抓不到SYN包:哪怕网络连通性有问题,只要web-server判定需要出站代理,就一定会先发起SYN握手。你现在完全看不到SYN包,说明web-server根本没走到出站那一步,但还是建议做基础连通性校验:进入web-server容器,用nc -vz <SERVER_HOST> <SERVER_PORT>手动测试到模拟API的网络通路,避免因为Testcontainers网络模式配置错误、SERVER地址填成了容器内回环地址导致的判断偏差。
  • 不要只靠宿主机上的Wireshark抓包下结论:很多容器网络的出站流量在宿主机的抓包点是观测不到的,应该在web-server容器内部部署轻量抓包工具,直接观察容器视角的流量情况,排除抓包位置错位导致的判断偏差。

快速定位的验证步骤

  • 临时把配置文件里的SERVER值硬编码成一个确定可访问的代理地址,重新构建镜像启动,再发API请求观察是否有出站流量,快速排除环境变量注入链路的问题
  • 临时把原来靠rewrite实现的代理规则,改成local-web-server原生代理配置块的写法,验证是否是老的rewrite代理写法在当前运行版本里已经不生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 22:54:03