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

K8s集群中Nginx托管Angular前端时频繁出现Connection Refused错误的原因咨询

K8s集群中Nginx托管Angular前端时频繁出现Connection Refused错误的原因咨询

这问题我之前排查过类似的,虽然静态JS文件确实在Nginx本地目录里,但出现111 Connection Refused和Ingress返回502的情况,大概率不是文件本身的问题,而是这些场景导致的:

  • Nginx监听配置错误:最常见的坑是Pod里的Nginx配置只监听了127.0.0.1:80,而非0.0.0.0:80。这种情况下,Nginx只接受Pod内部本地回环的请求,Ingress Controller从集群网络访问Pod的IP:80时就会被拒绝。如果你的Pod是滚动更新或者有多个副本,可能部分副本配置正确、部分错误,就会出现间歇性可用的情况。你可以进Pod里查看Nginx的nginx.conf,检查listen指令的具体配置。

  • Pod资源不足导致Nginx进程频繁重启:如果给Pod分配的CPU、内存资源不够,Nginx在处理大量JS bundle请求时(尤其是大体积的bundle文件),可能会被系统OOMKilled(内存不足被杀掉),或者CPU被打满导致进程响应缓慢甚至崩溃。在Nginx重启的间隙,服务不可用,自然会出现连接拒绝。你可以用kubectl describe pod <你的Pod名称>查看Events里有没有OOMKilled的记录,或者用kubectl top pod <你的Pod名称>观察资源使用情况。

  • 探针配置不合理导致流量发往未就绪的Pod:如果Pod的readinessProbe或者livenessProbe配置有问题,比如探针检查的路径Nginx根本没配置(比如用了/healthz但Nginx没有这个端点),或者initialDelaySeconds设置得太短,Nginx还没完全启动完成就开始探测,Pod会被标记为未就绪,但Ingress可能还在把流量发过去,这时候就会出现连接拒绝。而且如果探针的失败阈值设置得宽松,Pod会在“就绪-未就绪”之间来回切换,导致间歇性的错误。

  • Angular构建或路由配置引发的错误转发:Angular是单页应用,如果构建时base-href配置错误,或者路由配置里有不合理的重定向逻辑,可能会让页面加载JS bundle时请求到错误的端口或服务。比如index.html里的JS引用指向了http://localhost:3000/main.js,但Pod里根本没有3000端口的服务,Nginx处理这个请求时就会尝试连接本地3000端口,自然被拒绝。另外,如果Nginx的try_files配置不对,比如没设置try_files $uri $uri/ /index.html;,某些JS路径可能被错误转发到不存在的后端。

  • Nginx连接数或进程数限制:如果Nginx的worker_connections设置得太小(默认可能是1024),当并发请求量上来时,新的请求会被拒绝。你可以检查Nginx配置的events块里的这个参数,看看是不是并发量超过了限制导致的间歇性连接拒绝。

备注:内容来源于stack exchange,提问作者Lawton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:23:04