Сайт Django на Nginx + FastCGI выходит (тайм-аут шлюза 504) - PullRequest
2 голосов
/ 18 марта 2010

Иногда весь мой сайт, основанный на Django, сталкивается с ошибками тайм-аута 504, поэтому ни одна страница не может быть отображена.

Можно ли написать программу-оболочку и запускать ее каждые 5 минут, чтобы обнаруживать такие ошибки и при необходимости перезапускать процесс FastCGI?

В настоящее время я использую приведенную ниже команду для перезапуска FastCGI в случае его сбоя, но он не работает для вышеуказанной ситуации, поскольку при возникновении ошибок шлюза 504 процессы все еще работают.

ps ax | grep -v grep | grep port=8001 > /dev/null || restart_fcgi.sh

Ответы [ 2 ]

3 голосов
/ 21 марта 2010

Возможно, вам следует выяснить , почему сайт начинает обслуживать 504 ошибки в первую очередь - проверьте журналы (или добавьте журналы, если у вас недостаточно информации) и устраните проблему. В качестве альтернативы, вы можете найти nginx + apache + mod_wsgi более стабильным подходом - nginx - это фантастический интерфейсный веб-сервер для обслуживания статического контента, но Apache отлично подходит для размещения динамических процессов. Попробуйте объединить их обоих. Раньше я использовал nginx + fastcgi, но я обнаружил, что первый подход гораздо более стабильный.

Если вы все еще не можете определить причину вашей проблемы, вы можете настроить скрипт монитора, который запускается локально и проверяет код ответа - если он находит 5XX, он может принудительно перезапустить процесс fastcgi. Вы можете использовать Python + httplib для скрипта и os.system, выполняющую ваш скрипт оболочки (плюс подходящий оператор kill -9) выше.

0 голосов
/ 12 мая 2010

Я думаю, что если у вас возникла эта проблема, то супервизор - ваш друг. Очень хороший друг Как и daemontools, кроме простой конфигурации, большой помощи и использования без прав root.

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

...