%20-%2090%20mensagens%20muito%20longas.png)
Tentando proxy do tráfego UDP. O nginx não gera nenhum erro sobre a configuração. O cliente se conecta até a metade (diz que pode chegar ao servidor final), mas a conexão fica presa e eventualmente fecha com tempo limite.
Versão nginx: 1.21.3 SO: 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;
}
}
erro.log:
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 do cliente 66.42.xx: IP do proxy 217.178.xx: IP do servidor final
ip uma saída
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
Alguma ideia do que há de errado? Alguém pode ver algum problema na configuração?
Obrigado
Responder1
Talvez o problema "90: Mensagem muito longa" possa estar associado ao erro 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
), caso em que você pode tentar resolvê-lo aumentando o tamanho do buffer de envio do soquete. Os seguintes parâmetros têm valores padrão:
net.core.wmem_default = 212992
net.core.wmem_max = 212992
Os valores atuais do seu servidor podem ser verificados com o comando:
sysctl -a | grep "net.core.wmem"
Para o teste, usando o seguinte comando, você pode definir, por exemplo, os seguintes valores:
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
A seguir, verifique se foram aplicados corretamente (agora devem ser 9999999):
sysctl -a | grep "net.core.wmem"
E tente reproduzir o problema.