역방향 프록시 UDP 트래픽을 위한 nginx 구성(minecraft 앱) - 90개의 메시지가 너무 깁니다.

역방향 프록시 UDP 트래픽을 위한 nginx 구성(minecraft 앱) - 90개의 메시지가 너무 깁니다.

UDP 트래픽을 프록시하려고 합니다. nginx는 구성에 대한 오류를 발생시키지 않습니다. 클라이언트는 중간까지 연결하지만(최종 서버에 도달할 수 있다고 표시됨) 연결이 중단되고 결국 시간 초과로 종료됩니다.

nginx 버전: 1.21.3 운영체제: Ubuntu 18.04

nginx.conf:

worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

worker_rlimit_nofile 30000;

events {
    worker_connections 30000;
    multi_accept on;
}

stream{
server {
    listen       *:4800-4899 udp;
    proxy_pass   217.178.x.x:$server_port;
}
}

오류 기록:

2213#2213: *3 recv() failed (90: Message too long) while proxying and reading from upstream, udp client: 49.98.x.x, server: 66.42.x.x:4801, upstream: "217.178.x.x:4801", bytes from/to client:1464/0, bytes from/to upstream:0/1464

49.98.xx: 클라이언트 IP 66.42.xx: 프록시 IP 217.178.xx: 최종 서버 IP

IP 출력

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 56:00:03:95:cc:59 brd ff:ff:ff:ff:ff:ff
    inet 66.42.x.x/23 brd 66.42.x.255 scope global dynamic enp1s0
       valid_lft 57402sec preferred_lft 57402sec
    inet6 fe80::5400:3ff:fe95:[xxx]/64 scope link 
       valid_lft forever preferred_lft forever

무슨 문제가 있는지 아시나요? 누구든지 구성에서 문제를 볼 수 있습니까?

감사해요

답변1

아마도 "90: 메시지가 너무 김" 문제는 EMSGSIZE 오류( If the message is too long to pass atomically through the underlying protocol, the error EMSGSIZE is returned, and the message is not transmitted)와 연관될 수 있으며, 이 경우 소켓 전송 버퍼의 크기를 늘려 문제를 해결할 수 있습니다. 다음 매개변수에는 표준 값이 있습니다.

net.core.wmem_default = 212992
net.core.wmem_max = 212992

서버의 현재 값은 다음 명령으로 확인할 수 있습니다.

sysctl -a | grep "net.core.wmem"

테스트를 위해 다음 명령을 사용하여 예를 들어 다음 값을 설정할 수 있습니다.

sysctl -w net.core.wmem_default = 9999999
sysctl -w net.core.wmem_max = 9999999
echo "net.core.wmem_default = 9999999
net.core.wmem_max = 9999999 ">> /etc/sysctl.conf

다음으로 올바르게 적용되었는지 확인하세요(현재는 9999999여야 함).

sysctl -a | grep "net.core.wmem"

그리고 문제를 재현해 보세요.

관련 정보