
Мы проксируем UDP-пакеты для игрового сервера через обратный прокси-сервер Nginx. Клиенты очень часто выходят из строя, потому что 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