nginx 504 Gateway Time-out: upstream timed out
Ошибка 504 означает, что приложение не ответило за отведённое время. nginx тут ни при чём: он честно ждал и прервал ожидание. Разбираться надо с приложением, а таймаут поднимать только осознанно.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Приложение отвечает дольше таймаута
Тяжёлый запрос, медленная база, внешний вызов без ограничения времени. Значение по умолчанию — 60 секунд.
-
Пул обработчиков исчерпан
Если все рабочие процессы заняты, новый запрос ждёт в очереди и может не дождаться. В журнале приложения рядом будут сообщения о достижении предела.
-
Таймаут занижен в конфигурации
Иногда 504 получают на операциях, которые по смыслу длинные: выгрузка отчёта, загрузка большого файла.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Строка с адресом приложения и временем ожидания.
sudo tail -40 /var/log/nginx/error.log | grep -i "upstream timed out"Действующие таймауты ожидания ответа.
sudo nginx -T 2>/dev/null | grep -E "_read_timeout"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Тяжёлый запрос, медленная база, внешний вызов без ограничения времени. Значение по умолчанию — 60 секунд.
- Как проверить
-
Посмотрите журнал ошибок и время ответов.
sudo tail -30 /var/log/nginx/error.log | grep -i timeout sudo tail -20 /var/log/nginx/access.log
- Как исправить
- Ускоряйте приложение: выносите тяжёлые операции в фоновые задачи. Поднятие таймаута лишь удлиняет ожидание для посетителя и держит соединения.
- Почему происходит
- Если все рабочие процессы заняты, новый запрос ждёт в очереди и может не дождаться. В журнале приложения рядом будут сообщения о достижении предела.
- Как проверить
-
Посмотрите журнал обработчика.
journalctl -u php8.3-fpm -n 30 --no-pager | grep -i max_children
- Как исправить
- Поднимите число рабочих процессов с учётом памяти или ускорьте обработку.
- Почему происходит
- Иногда 504 получают на операциях, которые по смыслу длинные: выгрузка отчёта, загрузка большого файла.
- Как проверить
-
Посмотрите действующие таймауты.
sudo nginx -T 2>/dev/null | grep -E "read_timeout|send_timeout|connect_timeout"
- Как исправить
- Поднимите таймаут точечно для нужного пути, а не для всего сервера: так остальные запросы останутся под защитой.
Пример вывода
Приложение не ответило за 60 секунд. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
2026/09/15 14:32:11 [error] 1120#1120: *42 upstream timed out (110: Connection timed out) while reading response header from upstream, client: <адрес>, server: example.org, request: "GET /report HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock"
Связанные ошибки
- nginx 502 Bad Gateway: connect() failed к приложению nginx работает, а приложение недоступно: connect() failed, connection refused, no such file or directory для сокета. Разбор 502.
- php-fpm: server reached pm.max_children setting Пул php-fpm исчерпал рабочие процессы: сайт отвечает медленно или отдаёт 502. Как считать pm.max_children.
- Connection timed out в журнале службы Соединение не устанавливается по таймауту: пакеты отбрасываются, узел недоступен, перегружен сервер на другой стороне.
- A start job is running: загрузка висит на одной службе Загрузка останавливается с обратным отсчётом: служба не укладывается в таймаут. Как найти виновника и не ждать.
- Failed with result 'timeout' Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
- Job for … failed because a timeout was exceeded Задание на запуск прервано по таймауту. Как отличить медленный старт от заблокированного и правильно настроить TimeoutStartSec.
- nginx 403 Forbidden и Permission denied на файлы сайта nginx отдаёт 403: нет прав на файлы сайта, закрыт каталог по пути, мешает SELinux или AppArmor, нет индексного файла.
- nginx reload не применяет изменения Перезагрузка nginx прошла, а изменения не действуют: правка не в том файле, файл не включён, кеш, старые рабочие процессы.
Где встречается чаще всего
Источники
- Документация nginx: таймауты прокси
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено обработчиком с искусственной задержкой в 90 секунд.