Проблема тайм-аута Gunicorn Nginx - PullRequest
58 голосов
/ 25 июля 2011

Я использую django на gunicorn + nginx.У меня проблема с загрузкой файлов.На самом деле закачки работают нормально, но время истребления истекло, поэтому в nginx это выглядит так:

2011/07/25 12:13:47 [error] 15169#0: *2317 upstream timed out (110: Connection timed out) while reading response header from upstream, client: IP-ADDRESS, server: SERVER, request: "GET /photos/events/event/25 HTTP/1.1", upstream: "http://127.0.0.1:29000/photos/events/event/25", host: "HOST", referrer: "REFERER_ADDRESS"

Если я обновлю страницу, я вижу, что все фотографии загружены просто отлично.Проблема в том, что это вызывает тайм-аут, создавая впечатление, что загрузка не сработала.

Вот мой конфиг Gunicorn:

bind = "127.0.0.1:29000"
logfile = "/path/to/logs/gunicorn.log"
workers = 3

Я пытался изменить тайм-аут, но он не работал.

Ответы [ 4 ]

84 голосов
/ 29 марта 2012

Вы можете попробовать обновить тайм-аут для прохода прокси в Nginx, добавив:

proxy_connect_timeout 75s;
proxy_read_timeout 300s;

в / var / nginx / sites-available / [site-config] или / var / nginx / nginx.conf, если вы хотите увеличить ограничение времени ожидания на всех сайтах, обслуживаемых nginx.

Вы также должны добавить --timeout 300 к процессу / конфигурации gunicorn.

Это решило мои проблемы в прошломс большими загрузками.

32 голосов
/ 21 апреля 2013

Это не тайм-аут nginx, а, вероятно, тайм-аут Gunicorn.По умолчанию Gunicorn использует 30-секундный тайм-аут.

В общем, вы должны исправить это, не имея конечной точки, для возврата которой требуется более 30 секунд, но если это редко используемая конечная точка, вы также можете просто увеличитьТайм-аут Gunicorn.

Если вы сделаете это, вам, вероятно, также следует увеличить количество рабочих процессов для оружейных.

Чтобы увеличить время ожидания и рабочих для оружейных, вы можете добавить следующие параметры командной строки вначало:

gunicorn --timeout 120 --workers <NUMBER OF WORKER YOU WANT>
15 голосов
/ 19 июня 2014

У нас была та же проблема с использованием Django + nginx + gunicorn.Из документации Gunicorn мы настроили льготный тайм-аут, который почти не изменился.

После некоторых испытаний мы нашли решение, параметр для настройки: timeout (А не graceful timeout).Он работает как часы ..

Итак, сделайте:

1) откройте файл конфигурации оружейного рожка

2) установите для TIMEOUT то, что вам нужно - значение равнов секундах

NUM_WORKERS=3
TIMEOUT=120

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=127.0.0.1:9000 \
--pid=$PIDFILE
0 голосов
/ 16 июня 2016

Это может помочь кому-то с подобной проблемой.

Я получал ошибку тайм-аута от nginx и gunicorn в моем приложении Django.Так как я получал ошибку тайм-аута от nginx, я не мог увидеть реальную ошибку от Django.После добавления нового тайм-аута, как предложил Фийтер.Я мог видеть, что ошибка была в файле settings.py.

Если вы установили для DEBUG значение False и не добавили имя домена в ALLOWED_HOSTS, вы можете получить эту ошибку.* Я только что добавил домен в ALLOWED_HOSTS в settings.py, и ошибка исчезла.

Очень простое решение!

...