Nginx UDP代理报no live upstreams错误排查求助
问题分析与解决方案
从错误日志bytes from/to upstream:0/0来看,核心问题是Nginx转发UDP数据包后,一直在等待上游Filebeat返回响应,但Filebeat作为日志采集端,接收UDP日志时不会返回任何响应,导致Nginx超时后终止会话,无法完成正常转发。结合你的配置,主要需要调整以下关键参数:
关键配置修改
移除
proxy_responses 1
该参数强制要求上游返回至少1个响应才会结束会话,但Filebeat接收UDP日志是单向数据传输,不会回包,必须删除该配置,让Nginx无需等待响应即可完成转发。移除
proxy_bind $remote_addr transparent
透明代理配置对于本地上游(127.0.0.1)完全没必要,反而可能引发端口绑定或连接异常,直接删除即可。优化UDP适配的超时与容错参数
UDP是无连接协议,调整proxy_timeout为更合理的数值避免空闲会话被过早回收;同时添加上游节点异常自动切换的配置,提升转发稳定性。
修改后的完整Stream配置
stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; access_log /var/log/nginx/stream.log proxy; upstream stream_backend { zone backend 100k; server 127.0.0.1:2056; server 127.0.0.1:2057; server 127.0.0.1:2058; server 127.0.0.1:2059; server 127.0.0.1:2060; server 127.0.0.1:2061; server 127.0.0.1:2062; server 127.0.0.1:2063; server 127.0.0.1:2064; server 127.0.0.1:2065; } server { listen 2055 udp; proxy_pass stream_backend; proxy_buffer_size 10000k; proxy_timeout 30s; # 上游节点异常时自动切换,适配UDP场景 proxy_next_upstream on; proxy_next_upstream_timeout 1s; proxy_next_upstream_tries 3; } }
验证步骤
- 重启Nginx服务:
systemctl restart nginx - 查看Nginx stream日志,确认
upstream_bytes_sent不再为0 - 测试数据包转发速率,对比直连Filebeat的处理能力
内容的提问来源于stack exchange,提问作者Craftlocker
相关产品推荐
相关产品推荐

