Nginx UDP代理端口1194无返回数据,请求排查原因
Nginx UDP代理无返回的原因分析
你的问题核心出在proxy_responses 0这个配置上:
- 这个指令用于UDP代理场景,它告诉Nginx不需要等待上游服务器的响应,只要把客户端的请求数据包转发给上游后,就直接结束会话,不会将上游的返回数据回传给客户端。
- 从日志
127.0.0.1 [26/Apr/2024:16:38:52 +0000] UDP 200 0 5 0.000也能验证这点:bytes_sent字段为0,说明Nginx没有向客户端发送任何响应字节。
另外,虽然proxy_bind $remote_addr transparent配置了透明代理,但日志显示请求已成功转发(bytes_received为5,对应你发送的"hello"的5个字节),状态码200也说明代理过程无异常,所以不是透明代理的问题。
解决方法
将1194端口对应的server块中的proxy_responses 0修改为proxy_responses 1,这样Nginx会等待上游返回1个响应包,并将其转发给客户端:
server { listen 1194 udp reuseport; access_log /var/log/nginx/stream-access.log basic; proxy_pass vpn; proxy_bind $remote_addr transparent; proxy_responses 1; # 修改这里 proxy_timeout 1s; }
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

