Ошибка, возвращаемая web-сервером "504 gateway timeout", стала знакома многим с массовым внедрением nginx, haproxy и других proxy-серверов для web. Так же эту ошибку можно получить от обычного squid в офисе. С чем же связано появление такой ошибки?
Дело в том, что сам nginx не занимается обработкой запроса к backend, а перенаправляет(проксирует) его дальше - в php-fpm, apache, nodejs, unicorn и кучу других серверов, на которых и работает web-приложение.
Как и всё в нашем мире, проксирование имеет свои ограничения. Нас же интересует ограничение по времени обработки запроса бакендом. Именно в ситуации медленно работающего backend "504 gateway timeout" и происходит. Nginx не дождавшись ответа отдает ошибку 504.
За это время отвечают параметры конфига nginx:
Но не спешите их увеличивать!
Если ошибки ранее не было и она появилась внезапно, дело может быть в том, что бакенд начал работать медленнее. Проверьте значения load average - возможно, возросла нагрузка и сервер просто не справляется.
Проверьте, что все сервисы доступны из php: memcached, СУБД, файловая система успешно записывает сессии (если они на диске).
Проверьте текущие запросы в СУБД (возможно, все застряло именно там):
Так же 504 при нормально доступном и работающем php может быть вызван "тормозами" в сети между серверами nginx, бакенда, СУБД, если они расположены на разных серверах.
Лучший способ понять, что происходит - читать логи всех задействованных узлов системы (nginx, php-fpm, СУБД, прочее) и сразу исключить рассыпавшуюся файловую систему, прочитав вывод dmesg и mount.
Протокол WebSocket имеет свои преимущества и свои недостатки: детальный разбор
Не секрет, что хорошо настроенный сервер "падает" гораздо реже, чем доступ из него в Интернет
Позволяет решать интеллектуальные задачи помимо задач самого мониторинга
И снова о маленьких сетевых фокусах ради надежности работы web-сервисов
Особенности серверных приложений, работающих с сетью IoT-устройств на практике и в теории