用於反向代理 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"

並嘗試重現該問題。

相關內容