504 Gateway timeout (time out) nginx
Рішення 504 Gateway Timeout - в перекладі з англійської мови на українську мову, означає час відповіді шлюзу вийшло, шлюз не відповідає.
Помилка часто виникає на серверах з встановленим nginx в якості фронтенда і Apache в якості бекенд. Користувачі сервера найчастіше думають, що суть проблеми полягає в nginx, але насправді це не так.
Про причини появи помилки.
Однією з основних причин є зростання навантаження на сайт, при якій кількість запитів до сервера apache зростає до критичної позначки і нові запити стають в чергу.
У зв'язку з цим час на вступ до обробки запитів (які потрапили в чергу) більше, ніж встановлено в конфігурації сервера. Запит не встигає потрапити на обробку та з'єднання скидається.
Для вирішення проблеми:
1. Збільшити ресурс сервера, оперативну пам'ять, процесор. У більшості випадків вирішує проблему, але часто необхідно робити з рішенням 3.
2. Збільшити кількість одночасних процесів apache і ліміт часу в конфігурації nginx. Чи не рекомендовано вживати без 1 і 3 пунктів, можливі ще більші проблеми.
3. Провести оптимізацію роботи скриптів. Можливо, як самостійне рішення.
4. У конфігурації nginx збільшити час очікування виконання скрипта:
proxy_read_timeout 120;
proxy_connect_timeout 120;
Існує ще одна поширена причина. Скрипт вимагає значно більше часу на його обробку, ніж відведено сервером.
Наприклад виробляє імпорт великої кількості даних, робить віддалені підключення. Причин може бути багато.
Для вирішення проблеми:
Можна збільшити значення PHP max_execution_time або оптимізувати роботу скрипта.
Прошу зауважити, що сильне збільшення max_execution_time може привести до виникнення першої причини появи помилки 504 яка описана вище.
Вищевказані рішення не є єдиними, а тільки часто використовуваними.
До кожної проблеми необхідний індивідуальний підхід.