Ошибка 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.

-

а как быть с тем, что при установленном nginx не работает set_time_limit? Можно ли как нибудь менять время выполнения скрипта не в php.ini а непосредственно в скрипте при установленном nginx ?

А если чужой сайт не мой постоянно выдает мне эту ошибку? А сайтт этот мне нужен. Что делать? Или тут без вариантов?

подскажите, где менять лимит времени? имеется доступ к root, но не знаю в какой файл вносить изменения..

Менять в php.ini .

У меня постоянно такая ошибка 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 минута.

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

У меня такой вопрос може ли эта ошибка выскакивать приотключении хостинга !

да

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

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

Отправить комментарий

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
5 + 7 15 + 8 плюс 3 0
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.