Назад | Перейти на главную страницу

Gunicorn за Nginx - большое количество TIME_WAIT во время нагрузочного теста

версия 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, чтобы поддерживать соединения открытыми и повторно использовать существующие сокеты?