nginx versão: nginx / 1.9.3 gunicorn (versão 19.7.1)
Eu tenho uma pequena API flask correndo através do gunicorn por trás do nginx. Quando eu carrego o teste diretamente através do gunicorn tudo está funcionando bem, no entanto, assim que eu aponto para o nginx, eu recebo um número muito alto de soquetes TIME_WAIT no servidor nginx. Caixa de Gunicorn está bem. Aqui estão as configurações:
Gunicorn:
bind = '0.0.0.0:7030'
workers = 10
threads = 1
daemon = True
DEBUG = "True"
Nginx: blocos relevantes:
upstream api {
keepalive 32;
server box1:7030;
server box2:7030;
}
server {
listen 7077;
server_name localhost;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 1;
location / {
proxy_next_upstream error timeout http_500 http_404 http_502;
proxy_pass http://api;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
Eu tenho testado e ajustado as configurações, mas não vejo nenhuma alteração na quantidade de soquetes abertos. Eu sei que há várias configurações de SO que são recomendadas para ajustar, como ip_local_port_range e tcp_tw_recycle / tcp_tw_reuse. No entanto, estou trabalhando em um desses ambientes em que tenho que compartilhar o servidor e não posso ajustá-los sem um longo lead time.
Posso fazer alguma coisa no lado nginx / gunicorn? Note que o servidor que executa o gunicorn não está mostrando muitos sockets abertos, o Nginx está esperando algo do gunicorn / flask / api para manter as conexões abertas e reutilizar os sockets existentes?