Gunicorn позади Nginx - большое количество TIME_WAIT во время нагрузочного теста
Версия nginx: gunicorn nginx/1.9.3 (версия 19.7.1)
У меня есть маленькая колба API, работающая через gunicorn за 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, чтобы соединения оставались открытыми и повторно использовались существующие сокеты?