
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
これらの UDP パケットを処理するように Nginx を構成するにはどうすればよいでしょうか?
答え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/nginx でクライアントに送信中にクライアントが早期に閉じられ接続が切断される
ルーターの故障だと言った人のブログ[2018]:https://swazzy.com/2018/04/29/evasive-errors