Ошибка 504 Gateway Timeout (time out) nginx. Как исправить

В этой статье описаны причины возникновения ошибки 504 Gateway Timeout (time out).

Часто ошибку можно видеть на серверах, где установлен nginx в качестве фронтенда и Apache в качестве бэкенда. И многие думают, что проблема в nginx. Это не так.

504 Gateway Timeout - значит, что клиентский запрос nginx передал апачу, а апач не смог в установленный лимит времени вернуть HTTP-ответ. Немного подробнее о взаимоотношениях nginx’а и апача в статье про 502 Bad Gateway.

Почему Apache не смог ответить?

Скорее всего дело в возросшей нагрузке на сайт, при которой Apache не успевает отдавать HTTP-ответы, и новые запросы встают в очередь. Клиенты «висят» в очереди, но за приемлемое время их так и не успевают обслужить, поэтому соединения сбрасываются.

Чтобы решить проблему, можно добавить ресурсов серверу, в частности оперативной памяти, и увеличить количество процессов httpd (Apache). Другой вариант - оптимизировать работу скриптов сайта, чтобы они выполнялись быстрее. Если вы на обычном виртуальном хостинге, то без усилий администрации ситуация не улучшится. Если проблема не решается, надо искать другого провайдера.

Другая возможная причина возникновения ошибки 504 - исполняемый скрипт не укладывается в отведенный лимит времени. Это бывает, когда скрипт обращается к другим сайтам, либо просто выполняет тяжелую операцию, например, строит поисковый индекс.

Варианты решения: увеличить значение параметра PHP max_execution_time или облегчить скрипт.

Критические замечания к статье приветствуются.

Смотрите также

Комментарии

еакселератор может немного помочь

а можно попроще написать? Ну прям ваще подробно. Как и куда нажать, чтоб эту ошибку исправить, а то я блондинка))

Проблема непростая. Если не разбираетесь, то у вас два варианта:

1) На удачу переехать к другому хостеру / на другой сервер / на дорогой тариф. Не факт, что проблема решится, но шансы неплохие.

2) Найти специалиста, который всё осмотрит и скажет, нельзя ли что-то сделать с сайтом, чтобы ошибок не было. Есть вероятность, что специалист в конце концов посоветует вам сменить хостинг.

А специалист просто уберет апач нафиг и оставит один gninx+ fastcgi php.

У меня постоянно такая ошибка 504 возникает - раз в день точно, не знаю уже что и делать(( Переехал к другому хостеру - все равно одно и то же. Помогает только перезагрузка ВПС-сервера. Движок сайта - Datalife Engine (DLE) - может есть какое-то решение для него? Кто-нибудь знает?

Какой-то кривой модуль установлен, вероятнее всего.

если у вас VPS значит скорее всего валится из-за того что не хватает оперативной памяти, часто вижу такую проблему на сайтах которые на движках типа DLE, Drupal, Wordpress ...
перейдите на обычный хостинг, и не надо брать VPS с памятью 1/2 Гб

У меня тоже аналогичная проблема с nginx. Позволю себе не согласиться с автором статьи. Утверждение что в таком случае всегда виноват Apache мне кажется не всегда верным. Например у меня, возникает эта ошибка довольно часто0, но если в это время зайти напрямую в Apache, то Apache летает. И даже если зайти на страницу статистики nginx, то она тоже тормозит и еле грузиться, хотя тут уж Apache точно не причем. Может кто посоветует, куда копать?

проблема в скриптах и хостерах, а не в серверах, например если юзаеш крон то эт постояные тормоза будут особено если хостер ограничивает на всем

вообще сложно все, но если ошибка поевляется эт говорит о том что нужно уже арендавать сервер.

не забывайте если у вас 10к посещалки и лагает тормозит то тут логичнее удалить нах все и сайт и хостинг и улететь на луну =))) _________ просто идет нагрузка на сервер, либо вас ddos-ят либо вы юзаете крон, либо у вас высокая посещаемость.

а в случае dle (часто там эт косяк) то это скорее и за вашего скрипта граббинга+крон =))

504 - значит скрипт слишком долго отвечал или скрипт завершается раньше, чем получен ответ.
Причин может быть много: недостаток ресурсов (чаще всего - оперативной памяти), кривые скрипты, проблемы с базой данных и файловой системой, кривая настройка сервера...
Увеличение количества ресурсов и смена тех.площадки часто в таких случаях являются только отсрочкой проблем (до увеличения посещаемости).

Увеличение времени ожидания nginx при проксировании.
Для работы некоторых скриптов действительно требуется увеличение времени ожидания и выполнения, но таких немного.
Для изменения времени ожидания в конфиг надо добавить следующие параметры (лучше вставлять в контекст location):

proxy_send_timeout 60; # время ожидания при передаче запроса
proxy_read_timeout 60; # время ожидания при чтении ответа

Время указывается в секундах, по-умолчанию 60, т.е. 1 минута.

Но будьте готовы, что не каждый хостер пойдёт на это, т.к. увеличение лимитов = увеличение расхода ресурсов.

данная ошибка является что ли больше кривыми настройками апач, если очень много обращений?

может быть дело и в настройке апача.
но чаще всего дело в тормозных скриптах/серверах.

а может из за 504-й ошибки выкинуть из индексации поисковиком?

Может.
Если ошибка будет висеть довольно долго (по крайней мере больше часа).
Причём выкидываются конкретные страницы, на которых была ошибка.

А если PHP скрипт по _задумке_ _должен_ долго работать, например, вычислять Google PR для сотни сайтов с паузой в 10 сек (во избежание бана)? В скрипте указан set_time_limit(20000), но если не производить вывод, все равно скрипт вывалится по 504... А мне надо, чтобы работа скрипта была автономной, без вывода...
Вопрос: возможно ли в настройках nginx для определенной папки установить таймлимит посущественнее? (сервер не виртуал, дедик)
Спасибо!

По моему такая проблема в основном зависит от ресурсов сервера, а точнее оперативной памяти. Когда у моего сайта выросла посещаемость часто начала возникать ошибка 504 Gateway Timeout, и тогда я поменял тариф VDS сервера на более дорогой, и это помогло избежать такой ошибки.

Скажите плиз где увеличить значение max_execution_time ?
в PHP.ini?

Да это значение нужно увеличить в php.ini

Ответ в следующем: Такая проблема возникает из за:
Малой скорости интернет соединения
Долгой обработки запроса

Надо вначале общаться с хостером, если они не чешуться то надо самому ковырять код, сжимать его, убирать ненужные скрипты, также надо через акцесс банить айпишники роботов и т.п., но надолго этого не хватит, как только увеличиться посещалка проблема вернется.