версия nginx: nginx / 1.9.3 gunicorn (версия 19.7.1)
У меня есть небольшой API-интерфейс фляги, работающий через пулемет за nginx. Когда я загружаю тест напрямую через gunicorn, все работает нормально, однако, как только я указываю его на nginx, я получаю очень большое количество сокетов TIME_WAIT на сервере nginx. Коробка Gunicorn в порядке. Вот конфиги:
Gunicorn:
bind = '0.0.0.0:7030'
workers = 10
threads = 1
daemon = True
DEBUG = "True"
Nginx: соответствующие фрагменты:
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 "";
}
}
Я тестировал и настраивал конфиги, но не вижу изменений в количестве открытых сокетов. Я знаю, что есть несколько настроек ОС, которые рекомендуется изменить, например ip_local_port_range и tcp_tw_recycle / tcp_tw_reuse, однако я работаю в одной из тех сред, где мне приходится делиться сервером, и я не могу настроить их без длительного времени.
Могу я что-нибудь сделать на стороне nginx / gunicorn? Обратите внимание, что сервер, на котором запущен gunicorn, вообще не показывает много открытых сокетов, ожидает ли Nginx чего-то от gunicorn / flask / api, чтобы поддерживать соединения открытыми и повторно использовать существующие сокеты?