%20-%2090%EA%B0%9C%EC%9D%98%20%EB%A9%94%EC%8B%9C%EC%A7%80%EA%B0%80%20%EB%84%88%EB%AC%B4%20%EA%B9%81%EB%8B%88%EB%8B%A4..png)
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"
그리고 문제를 재현해 보세요.