我将 Nginx 服务器设置为 UDP 负载均衡器。我有几个后端服务器正在处理 UDP 流量,对于后端服务器收到的每个数据包,它都会回复 ACK。当直接将请求发送到后端服务器时,我可以对其进行测试并获得响应,但是当通过 nginx 负载均衡器发送数据包时,我没有收到流量。
但是,我看到,响应是使用更高的临时端口发回的。
Nginx 可以做到这一点吗?我使用的是标准社区版本,但如果 Plus 版本支持此行为,这也是一个选项。我怎样才能实现这个目标?
配置非常简单,如下所示。 UDP 流量正在进行负载平衡。
stream {
upstream udp {
server xx.xx.xx.xx:nnnnn;
server xx.xx.xx.xx:nnnnn;
}
server {
listen nnnnn udp;
proxy_pass udp;
proxy_responses 0;
}
}
来自客户端的 UDP 连接通常使用 服务器上定义明确的目标端口号,而客户端端口号通常是短暂的,这完全没问题。
发送方/发起方指定目标机器上的目标端口。
如果目标是服务器(发起者是客户端),则源端口很可能是临时端口,目标端口很可能是众所周知的端口(1-1024),反之亦然。
无论如何,这应该对你有用(注意
proxy_bind
属性)
stream {
server {
listen nnnn udp;
proxy_pass udp_servers;
proxy_responses: 0;
proxy_bind <IP_ADDRESS_OUTSIDE>;
}
upstream udp_servers {
server xxx.xxx.xxx.xxx:nnnnn;
server yyy.yyy.yyy.yyy:mmmmm;
}
}