我们通过 Nginx 反向代理为游戏服务器代理 UDP 数据包。由于 Nginx 无法处理请求,客户端经常超时。最初它运行正常,但当更多客户端连接到游戏服务器(40-50)时,我们遇到了问题。
我们怎样才能让 Nginx 处理它?
这是代理设置
stream {
upstream backend {
server [server-ip]:[port];
}
server {
listen [port];
proxy_pass backend;
}
server {
listen [port] udp reuseport;
proxy_pass backend;
}
}
我们的错误日志充满了这样的错误:
2023/02/18 12:40:29 [alert] 3951459#3951459: *5777636 shared connection is busy while proxying and sending to client, udp client: [client-ip], server: 0.0.0.0:[port], upstream: "[server-ip]:[port]", bytes from/to client:1684904/1724744, bytes from/to upstream:1725538/1684904
如何配置 Nginx 来处理这些 UDP 数据包?
答案1
尝试这个:
流 { 上游后端 { 服务器 [服务器 IP]:[端口]; }
server {
listen [port];
proxy_pass backend;
}
server {
listen [port] udp reuseport;
proxy_pass backend;
proxy_bind $remote_addr transparent;
}
}
答案2
这似乎是一个老问题,而且很少见。Nginx 通常可以很好地处理 UDP 数据包(对我来说,多年来一直运行良好),但我目前遇到了同样的问题。有人说这是代理缓冲区太小或其他代理配置造成的。有人说这是路由器故障。
更多信息和配置可尝试[最新答案 2015]:https://stackoverflow.com/questions/4804822/client-closed-prematurely-connection-while-sending-to-client-in-nginx
说这是路由器故障的人的博客 [2018]:https://swazzy.com/2018/04/29/evasive-errors