Проблема с тайм-аутом Gunicorn Nginx
Я запускаю 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 conf:
bind = "127.0.0.1:29000"
logfile = "/path/to/logs/gunicorn.log"
workers = 3
Я попытался изменить таймаут, но он не сработал.
Ответы
Ответ 1
Вы можете попробовать обновить таймаут для прокси-сервера в Nginx, добавив:
proxy_connect_timeout 75s;
proxy_read_timeout 300s;
on/var/nginx/sites-available/[site-config] или /var/nginx/nginx.conf, если вы хотите увеличить тайм-аут на всех сайтах, обслуживаемых nginx.
Вы должны добавить --timeout 300
, а также к вашему процессу пушки/конфигурации.
В прошлом это решило мои проблемы с большими загрузками.
Ответ 2
Это не тайм-аут nginx, но, вероятно, тайм-аут Gunicorn. Gunicorn по умолчанию имеет тайм-аут 30 секунд.
В общем, вы должны исправить это, не вернув конечную точку, которая занимает больше 30 секунд, но если это редко используемая конечная точка, вы также можете просто увеличить тайм-аут пушки. Если вы сделаете это, вы, вероятно, также должны увеличить количество рабочих рабочих-артиллеристов.
Чтобы увеличить тайм-аут и работников для пушки, вы можете добавить в командной строке следующие параметры командной строки:
gunicorn --timeout 120 - работники
Ответ 3
У нас была такая же проблема с использованием Django + nginx + gunicorn.
Из документации Gunicorn мы настроили грациозный тайм-аут, который практически не отличался.
После некоторых тестов мы нашли решение, параметр для настройки: timeout
(И не грациозный таймаут). Он работает как часы.
Итак, Do:
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
Ответ 4
Это может помочь кому-то с аналогичной проблемой.
Я получал ошибку тайм-аута от nginx и gunicorn в своем приложении Django. Поскольку я получал ошибку тайм-аута от nginx, я не мог видеть реальную ошибку из Django. После добавления нового тайм-аута, например, предложенного fijter. Я видел, что ошибка была в файле settings.py.
Если вы установите DEBUG в False и не добавили доменное имя в ALLOWED_HOSTS, вы можете получить эту ошибку.
Я только что добавил домен в ALLOWED_HOSTS в settings.py, и ошибка исчезла.
Очень простое решение!