Могу ли я настроить свой nginx для запуска какой-либо команды / сценария оболочки при обнаружении ошибки 5xx?
Мой spawn-fcgi часто дает сбой, я периодически перезапускаю его cronjob, но я думаю, что лучшим решением будет, если nginx не сможет достичь spawn-fcgi, а затем перезапустить его с помощью команды.
Ты мог бежать контролировать сделать это в конфиге:
check process spawn-fcgi with pidfile /var/run/spawn-fcgi.pid
start program = "/etc/init.d/spawn-fcgi start"
stop program = "/etc/init.d/spawn-fcgi stop"
if failed host localhost port 80 protocol HTTP request /test.php then restart
if 5 restarts within 5 cycles then timeout
depends on nginx
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
if failed host localhost port 80 protocol HTTP request /token.html then restart
if 5 restarts within 5 cycles then timeout
test.php - это просто файл php, который выводит эхо "ОК"
Конечно, я предполагаю, что у вас уже есть сценарий инициализации spawn-fcgi и файл PID.
Нет, вы не можете без исправления исходного кода nginx, и это было бы неправильно, потому что nginx может столкнуться с ошибкой 5xx по многим причинам, а не только из-за сбоя spawn-fcgi.
Просто запустите spawn-fcgi под управлением процесса, например DAEMON Tools или руководитель, который вы можете настроить для перезапуска spawn-fcgi при сбое.
Вы можете написать сценарий, который подключается к вашему серверу через порт 80 (telnet / curl) и ищет указанный синтаксис, а если он недоступен, перезапускает демон. Вы могли бы вынуть его из заголовка сервера?