Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Как победить ошибку 504 Gateway Time-out на стеке Django→uWSGI→nginx?

Собственно настраиваю веб-сервер на Raspbery pi . Дело для меня совсем новое, особенно в части настройки nginx и uWSGI (до того все настраивал на apache и passenger_wsgi). Но настроить все таки получилось и веб-сервер заработал. Чтобы не забыть как это делается (а пришлось пройти изрядный сад граблей) сделал для себя инструкцию-памятку в githab-е своего проекта. Там вся последовательность установок, настроек, conf- и ini-файлов. Можете смотреть, что и как настроено.

Но есть у меня в проекте несколько скриптов которые изрядно долго работают. Переиндексация всего дерева, в частности. При 10000 единиц в дереве категорий, переиндексация может идти около 10 минут. Причем этот скрипт отлично работает и на разработческом сервере Django, и при выгрузке на боевой сервер под apache + passenger_wsgi . А вот на Raspberi pi c nginx и uWSGI вылетает через 60 секунд по 504 Gateway Time-out.

Пробовал и менять значение harakiri в ini-настройках uWSGI... Игрался опциями keepalive_requests, keepalive_timeout, proxy_read_timeout, client_header_timeout, client_body_timeout и send_timeout конфигов nginx. Ставил их и в болки http, и server, и location. Ставил настройки и в nginx.conf своего сайта, и в глобальный конфиг /etc/nginx/nginx.conf nginx. Эффекта никакого. Скрипт отваливается через 60 секунд, какие-бы я настройки не устанавливал.

Само-собой не забывал каждый раз после изменения настроек перезапускать nginx по sudo service nginx restart при смене его настроек, и перезапускать uWSGI при правках его ini. Безрезультатно. Скрипт все равно умирает через 60 секунд.

Что делать? Какая еще может быть магия для победы над 504 Gateway Time-out?
  • Вопрос задан
  • 2675 просмотров
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
Никогда так не делать

Тебе нужно запустить скрипт и отвалиться с кодом 200
Для такого рода вещей можно делать разного рода колхозные решения (запуск скрипта из крона с периодичностью 1 мин, вотчер на файловую систему) или работа с Celery

В баше типичного убунту есть переменная $USER и можно сделать переменную для текущей сессии баша export $SITE_NAME=www.foo.bar

cd $HOME
===
cd

Изменять ./configure для nginx не обязательно - по-умолчанию он вполне ок
Делать make install не следует или следует все ставить в /opt

Как вариант мануал для сборки деб https://serversforhackers.com/compiling-third-part...

Директория /etc/nginx/sites-enabled/ уже давно не актуальна
Используй /etc/nginx/conf.d/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы