Тайм-аут Gunicorn во время загрузки файла - PullRequest
0 голосов
/ 01 июня 2019

Я использую nginx в качестве обратного прокси-сервера, чтобы иметь возможность доступа к моему Django API, а также обслуживать статические файлы.Мой Django API использует gunicorn .

У меня есть конечная точка, позволяющая пользователю загрузить CSV-файл.Я следовал инструкциям здесь, Потоковая передача больших CSV-файлов: https://docs.djangoproject.com/en/2.2/howto/outputting-csv/

Вот конфигурация nginx:

upstream docker-api {
    server api;
}

server {
    listen 443 ssl;
    server_name xxxx.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to//privkey.pem;
    include /path/to/options-ssl-nginx.conf;
    ssl_dhparam /path/to/ssl-dhparams.pem;


    location /static {
        autoindex on;
        alias /static/;
    }

    location /uploads {
        autoindex on;
        alias /uploads/;
    }

    location / {
        proxy_pass         http://docker-api;
        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;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Это команда, которую я использую для запуска моего gunicorn сервер:

gunicorn my_api.wsgi -b 0.0.0.0:80 --enable-stdio-inheritance -w 2 -t 180 -k gevent

И когда я пытаюсь загрузить файл, Gunicorn всегда блокирует мой запрос через 3 минуты.Он не должен превышать время ожидания ответа HTTP.

1 Ответ

0 голосов
/ 01 июня 2019

Проблема в вашей команде gunicorn.

Давайте посмотрим:

gunicorn my_api.wsgi -b 0.0.0.0:80 --enable-stdio-наследство -w2 -t 180 -k gevent

-t в вашей команде gunicorn означает timeout, это в секундах, и время ожидания вашего рабочего gunicorn, потому что вы установили тайм-аут на 180 секунд (3минут).

И когда я пытаюсь загрузить файл, Gunicorn всегда блокирует мой запрос через 3 минуты.

Чтобы решить эту проблему, вы можете просто увеличить время ожиданияНапример, следующая команда gunicorn установит время ожидания на 5 минут:

gunicorn my_api.wsgi -b 0.0.0.0:80 --enable-stdio-наследование -w 2 -t 300 -k gevent

Для получения дополнительной информации см. документацию: http://docs.gunicorn.org/en/stable/settings.html#timeout

...