#Что означает ошибка
Ошибка 504 Gateway Timeout
Ошибка 504 Gateway Timeout означает, что промежуточный сервер (прокси, CDN, балансировщик) не дождался ответа от основного сервера. Обычно проблема не на вашей стороне, но проверить можно несколько вещей.
Если вы владелец сайта, решение лежит на серверной стороне.
Ошибка 504 означает, что промежуточный сервер (прокси, CDN) не дождался ответа от основного. Для посетителя — повторить позже; владельцу — проверить таймауты и скорость бэкенда.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Медленный бэкендСкрипт. | Долго. | Оптимизируйте. |
| Короткие таймаутыПрокси. | Обрыв. | Увеличьте. |
| ПерегрузкаНагрузка. | Часто. | Мониторинг. |
| Проблемы сетиСеть. | Между серверами. | Проверьте. |
#Пошаговое решение
- Обновите страницуНажмите
Ctrl+F5, чтобы запросить страницу заново без обычного кэша (на некоторых системах сочетание отличается). Если ошибка осталась, откройте страницу в другом браузере или приватном окне и сравните результат. - Проверьте с другой сетиЕсли сейчас используется Wi-Fi, временно переключите телефон на мобильный интернет и откройте тот же адрес. Если есть второй компьютер или телефон, проверьте страницу и на нём. Ошибка только в одной сети указывает на роутер, DNS или ограничения сети; ошибка на всех устройствах и сетях — скорее на стороне сайта.
- Проверьте статус сервисаОткройте официальную страницу состояния соответствующего сервиса (если она есть) и проверьте сообщения о текущих сбоях. Сравните работу сервиса в приложении и браузере; при общей аварии дождитесь восстановления, не сбрасывая устройство.
- Владельцу: проверьте логиАдминистратору: найдите в журнале доступа и ошибок веб-сервера запись, соответствующую точному времени и URL сбоя. На системах с systemd можно начать с
sudo journalctl -u nginx --since "15 minutes ago"(если nginx работает как служба); для файловых логов используйте путь, указанный в конфигурацииaccess_log/error_log. Ищите сообщения подключения к upstream, тайм-ауты и отказ приложения; не меняйте лимиты без подтверждённой причины. Посетителю достаточно записать код и время и обратиться к владельцу. - Увеличьте тайм-ауты и оптимизируйте запросыАдминистратору: в журналах nginx, прокси и приложения сопоставьте время начала запроса с моментом обрыва. Если подтверждён тайм-аут, сначала найдите медленный запрос/блокировку в приложении и базе данных; увеличение
proxy_read_timeout/fastcgi_read_timeoutбез устранения причины лишь отложит сбой. Перед правкой сохраните конфигурацию, выполнитеnginx -tи применяйте её только после успешной проверки. Посетителю эти действия не нужны.
#Для посетителя
Обновите страницу через минуту, откройте сайт с другого устройства и сети. Проверьте статус на или . Очистите кэш и отключите VPN. Если сайт не открывается только у вас, смените DNS на 1.1.1.1.
#Для владельца: nginx и PHP-FPM
Увеличьте тайм-ауты: proxy_read_timeout 120s; или fastcgi_read_timeout 120s; в nginx и request_terminate_timeout в PHP-FPM. Проверьте нагрузку top/htop и логи /var/log/nginx/error.log. Медленные запросы ищите в slow log PHP-FPM и MySQL.
#CDN и балансировщики
В Cloudflare 504 приходит, когда исходный сервер отвечает дольше 100 секунд: оптимизируйте длительные запросы или выносите их в очередь. Проверьте здоровье бэкендов на балансировщике и тайм-аут idle timeout. Включите кэширование статики.
tail -n 50 /var/log/nginx/error.logcurl -o /dev/null -s -w "%{http_code} %{time_total}\n" https://example.com#Как найти медленный запрос на сервере
Включите логирование медленных запросов PHP-FPM: в www.conf задайте request_slowlog_timeout = 10s и slowlog = /var/log/php-fpm/slow.log. Для MySQL включите slow_query_log = 1 и long_query_time = 2, затем анализируйте файл через mysqldumpslow -s t /var/log/mysql/slow.log. В nginx добавьте в формат лога $request_time $upstream_response_time, чтобы сопоставить медленные адреса. Часто причиной служит один тяжёлый отчёт, парсер или неоптимальный индекс, а не нехватка мощности.