504 gateway time out nginx


Что значит ошибка 504 Gateway Timeout (time out)?

Ошибка 504 Gateway Timeout (time out) — одна из самых распространенных. Что же такое — 504 Gateway Timeout (time out)? Как правило, подобного рода ошибка может возникать в том случае, если на сервер, на котором находится какой-то веб-ресурс, посылается огромное количество запросов, и он просто не успевает их обрабатывать, то есть у него не получается в установленный лимит времени вернуть HTTP-ответ. Вследствие этого может даже прерываться соединение, а пользователь так и не получит доступ к веб-ресурсу. Это обусловлено тем, что сервер не успевает обрабатывать старые запросы, которых накопилось уже много, а появляются еще и новые, которые встают в очередь и не успевают обрабатываться.

Как устранить ошибку 504 Gateway Timeout (time out)?

Проблема может заключаться еще и в скрипте, который не успевает справиться с поставленной задачей за отведенное ему время. В большинстве случаев это происходит тогда, когда скрипт обращается к сторонним узлам. Для того чтобы решить такую проблему, достаточно увеличить значение параметра PHP max_execution_time. Если проблема не будет решена, тогда придется каким-либо образом оптимизировать сам скрипт, чтобы он смог выполнять задачи за установленное время.


Справиться с насущной проблемой может только администратор сервера, который должен увеличить его производительность в несколько раз. Осуществить задуманное можно только если увеличить количество оперативной памяти компьютера, а также сменить процессор на более мощный. Кроме того, потребуется увеличить количество процессов httpd непосредственно в среде Apache. Может случиться и такое, что сайту вообще придется «переехать» на другой хостинг. Такая необходимость возникнет только в том случае, если сайт будет располагаться на обычном виртуальном хостинге, администратор которого либо не будет отвечать на запросы, либо откажется от помощи или если у него не получится решить такую проблему.

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

www.kakprosto.ru

Борьба с ошибкой 504 Gateway Time-out


Что значит ошибка 504 gateway time-out

Итак, на своём сайте мы столкнулись с ошибкой 504 Gateway Time-out и не знаем, что же делать. В этом посте постараюсь описать полный алгоритм действий для решения этой проблемы, а так же поведать о причинах её возникновения. Следуйте под кат!

Так вот, продолжим.

Для начала выясним, что это за HTTP код ошибки такой, а точнее, что же он  означает? 504 — пятьсот четвёртая ошибка, она же Gateway Timeout, а точнее, на русском это звучит примерно так: «Время прохождения через шлюз истекло». Код означающий, что сервер при работе в качестве внешнего шлюза или прокси-сервера не получил своевременно отклик от вышестоящего бэкенда сервера, к которому он обратился, пытаясь исполнить запрос.

По этой ошибке легко можно представить внутреннюю организацию вашего web сервера. Это явно связка двух web серверов в которой один выступает в роли фронтенда (переднего сервера) и второй в качестве бэкенда (заднего сервера).

И скорее всего, так бывает в 99% случаев, установлен веб сервер nginx, который выступает в качестве фронтенда и так же стоит сервер Apache в качестве бэкенда.

Nginx берёт на себя роль распределяющего proxy сервера и отдаёт статику (картинки, файлы), а apache вместе с PHP обрабатывает динамику, там же и MySQL неподалёку. И ошибку  504 Gateway Time-out вы получаете именно от nginx.

В общем вернёмся к делу. Ситуация предельно ясна! За отведённое время сервер nginx просто не дожидается обратного ответа от apache и сообщает об этом вам. Т.е. прослеживаются явные перегрузки на «внутренней» стороне бэкенда.


Другой вопрос в том, что именно порождает эти перегрузки от чего apache не успевает во время ответить? Это уже вопрос другой. Тут так просто не разобраться, надо смотреть логи сервера. Ну понятное дело, что кто-то перегружен.

Либо скрипт долго работает, либо СУБД не успевает обработать множество запросов, что кстати бывает чаще всего ведь коннектор с СУБД это самое слабое место. В общем ваш внутренний сервер не успевает в срок выполнить скрипт, точнее он просто долго выполняет, а nginx не хочет ждать и спешит отдать вам 504 ошибку.

От чего не укладывается по времени apache так же ясно, либо много запросов извне и ресурсов сервера не хватает (это можно узнать из счётчика посещаемости сайта), либо выполняемый скрипт очень тяжёлый.

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

В общем, ближе к делу, наша задача сказать серверу nginx, что бы он ждал ответа от apache подольше и не торопился отдавать клиенту ошибку 504. С этим всё просто! Естественно нужно иметь root доступ к своему серверу, о виртуальных хостингах и даже говорить не буду.


В общем заходим на свой сервер, хоть даже по протоколу ssh в терминале и идём в папку с конфигурационными файлами сервера nginx. Сразу скажу, что они меняются от версии к версии и поэтому точно сказать какой именно файл будет не могу.

Плюс ко всему всё ещё зависит от того в каком режиме работает nginx и кто его вам настраивал. Грубо говоря нам нужен текущий файл настроек сервера nginx для требуемого виртуального хоста (сайта) либо же для всего сервера в целом. Возможно это даже будет nginx.

conf, как в общем-то и должно быть.

Далее будут показывать на своём примере, думаю применить к себе будет не сложно, ОС Linux Ubunut.

Заходим в условный файл настроек виртуальных хостов сервера nginx, расположенному по адресу: /etc/nginx/nginx.conf

Здесь можем либо поискать уже установленные директивы (если есть) или дописать вручную. Можно дописать естественно как для всех хостов, так и для каждого конкретного, не важно. В общем пишем следующее:

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

Эти директивы нужны для изменения времени ожидания. Лучше вставлять в контекст location. У меня получилось примерно следующим образом:

server { listen xxx.xxx.xxx.xxx:80; # ip адрес сервера и прослушиваемый порт server_name someserver..


в полях заголовка “Location” и “Refresh” в ответе проксируемого сервера proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } }

Далее сохраняем файл конфигурации и перезапускаем сервер nginx. Теперь он будет ждать ответа от apache именно столько времени, сколько вы указали в добавленных директивах, а не по значению по умолчанию. Думаю понятно, что время вы сами выставляете какое хотите. Всё, теперь ошибка 504 Gateway Time-out вас беспокоить не будет.

Понятное дело, что это лишь вершина айсберга и нужно будет разбираться с самой причиной долгой генерации страницы, но это уже другая тема. Возможно придётся так же поставить таймаут побольше и для PHP, а то может быть такое, что и он начнёт ругаться, мол ему дают мало времени на обработку. Для этого используем PHP директивы max_input_time и max_execution_time в файле настроек PHP — php.

ini или в файле локальных настроек сервера Apache — .htaccess


Дополню тем, что если вы используете сервер Apache в качестве переднего сервера (фронтенда) и получаете ошибку 504 Gateway Time-out именно от него, тогда можно попробовать поменять опцию Timeout, находится в файле конфигураций веб сервера, чаще всего это либо httpd.conf или httpd-default.conf. Находим следующие строки:

# # Timeout: The number of seconds before receives and sends time out. # Timeout 60

Вместо 60 пишем своё новое значение, рекомендую не мелочиться и сразу поставить на 600 секунд (Timeout 60), т.е. 10 минут.

На этом пожалуй всё, думаю проблема 504 Gateway Time-out теперь для вас решена.

Источник: http://softodom.com/604/borba-s-oshibkojj-504-gateway-time-out.html

Как исправить 504 gateway time out Nginx

504 gateway time out nginx» alt=»Как исправить 504 gateway time out Nginx» width=»» height=»» class=»alignleft» />

Веб-сервер Nginx часто работает не только в качестве самого веб-сервера для отдачи контента, но и в качестве прокси, когда он вступает только посредником. Такая ситуация наблюдается намного чаще, чем можно было бы ожидать. Например, при работе с php-fpm и другими модулями динамических языков.


Именно в таком режиме может наблюдаться ошибка 504 gateway time out Nginx. В нашей сегодняшней статье мы попытаемся разобраться почему она возникает и как с ней бороться. Разберем несколько способов решения и причин.

Что значит 504 gateway time out Nginx?

Как я уже сказал, такая ошибка возникает, когда сервер Nginx работает в режиме прокси. Например, при использовании php-fpm или Apache. Дословно, она означает, что превышено время ожидания ответа от сервера. В нашем случае, превышено время ожидания ответа от php-fpm. Рассмотрим несколько причин такого поведения:

  • Скрипт PHP или на другом языке полностью завис и уже не вернет никакого ответа;
  • Скрипт работает очень долго, но в Nginx настроен интервал на сброс соединения если целевой сервер не ответил на запрос за отведенный строк;
  • Сервер перегружен и не успевает обслужить всех клиентов, вернуть ответы на все запросы Nginx;

Дальше рассмотрим что можно сделать если вы встретились с ошибкой 504 gateway time out Nginx.

Как исправить 504 gateway time out Nginx?

Самый первый вариант — это если вашему серверу, php-fpm или apache не хватает ресурсов системы, например, памяти или процессора. Вы можете посмотреть свободную память с помощью команды free:

free -h

Нагрузку на процессор можно узнать командой htop:

htop

Естественно, если вы видите, что PHP занимает все процессорное время, то значит проблема в ресурсах сервера. Вы можете покопаться в движке своего сайта, пытаться оптимизировать те или иные моменты, об этом будет отдельная статья или же взять более дорогой тариф VPS.


Второй вариант — это если так и было запланировано, чтобы скрипт работал долго. В таком случае нужно настроить Nginx, чтобы он дождался ответа от Apache или php-fpm. Для решения проблемы в случае с php-fpm нужно только добавить две строчки в блок настройки fastgci:

fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

Здесь 300 означает 300 секунд, для большинства скриптов, этого будет вполне достаточно, но вы можете еще больше увеличить значение если это нужно. Также ошибка 504 может возникать, когда Nginx используется в качестве прокси для Apache или любого другого веб-сервера, тогда нужно еще настроить время ожидания для прокси. Добавьте эти строки в секцию server:

proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600;

send_timeout 600;

Тут уже мы задаем таймаут 600 секунд для различных видов действий — подключения, отправки данных, чтения данных и так далее. После завершения настройки Nginx стоит перезапустить:

sudo systemctl restart nginx

Последний вариант, который мы рассмотрим — это скрипт завис. Если вы сами запускаете скрипт, то сразу увидите что зависло, но если такая ошибка встречается у пользователей, то это уже более серьезная проблема. Вы можете посмотреть встречаются ли вашим пользователям такие ошибки и где они встречаются с помощью команды:


fgrep -i » 504 » /var/log/nginx/access.log

Более подробную информацию иногда можно увидеть в error.log:

fgrep -i » 504 » /var/log/nginx/error.log

Дальше, если проблема именно в php-fpm, вы можете отследить какие скрипты выполняются медленно с помощью встроенной функции slow-log. Для ее активации добавьте следующие строки в конфигурацию вашего пула:

sudo vi /etc/php-fpm.d/www.conf

slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

Здесь 5 секунд, означает, что в лог файл будут добавляться скрипты, которые выполняются дольше пяти секунд. Вы можете менять это значение по своему усмотрению. В логе вы сможете увидеть не только сами скрипты, но и трассировку методов, которые привели к проблемам:

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

Выводы

В этой статье мы рассмотрели как исправить 504 gateway time out Nginx 1.2 7, а также почему может возникнуть эта ошибка. Надеюсь, эта информация была полезной для вас.

Источник: https://losst.ru/kak-ispravit-504-gateway-time-out-nginx

Ошибка 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 или облегчить скрипт.

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

Источник: http://hosting101.ru/504-gateway-timeout.html

Ошибка 504 Gateway Time-out (nginx), как правильно исправить

Ваш сайт находится на сервере (чаще всего Apache), когда вы хотите просмотреть сайт, то через браузер посылается запрос к серверу.

Но этот запрос не сразу попадает на Apache, а сначала он приходит на nginx-сервер (своего рода распределитель запросов), а тот уже посылает его на Apache.

Так вот, ошибка 504 Gateway Time-out обычно происходит из-за того, что сервер nginx передал запрос на Apache, но в течение определенного времени не получил от него ответ.

Почему это происходит?

Зачастую, данная ошибка является следствием большой нагрузки на сервер, в итоге Apache не успевает обрабатывать запросы, а nginx не дождавшись ответа, обрывает соединение и выдает в браузер пользователя сообщение об ошибке.

Такая критичная нагрузка обычно происходит либо из-за огромного количества посетителей сайта, либо из-за тех процессов, которые происходят внутри самого сайта.

В данном случае примером может служить любой скрипт на сайте, который выполняется слишком долго, приводя тем самым к Ошибке 504.

В этом случае обычно помогает увеличение ресурсов сервера, на котором находится ваш сайт. Т.е. вам нужно попытаться сменить тарифный план, задуматься о покупке виртуального выделенного сервера, или же арендовать физический сервер. В любом случае, сначала проконсультируйтесь с технической поддержкой хостинг-провайдера, а потом уже принимайте решение.

Неправильная работа сайта

В этом случае нужно оптимизировать сайт, причем таким образом, чтобы работа скриптов укладывалась в отведенное время. Если для оптимизации нет возможности, то может помочь изменение параметра, который отвечает за максимальное время ожидания работы скрипта. Для этого в файле .htaccess нужно написать:

Где N — это время ожидания в секундах, обычно по умолчанию оно равно 30 секунд. Но такая процедура помогает не у всех хостинг-провайдеров, и в таком случае следующим Вашим шагом должно стать обращение в службу поддержки или же смена хостинг-провайдера.

Не нашли ответ на свой вопрос?Задайте его экспертам! Ответ приходит очень быстро и прямо на ваш email.

Источник: https://ru.hostings.info/schools/504-gateway-time-out-nginx.html

504 Gateway Time-out что значит

504 Gateway Time-out что значит

При переходе на интернет страницу пользователь может столкнуться с невозможностью получения доступа к содержимому указанного сайта, и соответствующим сообщением «504 Gateway Time-out».

Обычно данная проблема возникает из-за отсутствия ответа от требуемого сервера на протяжении фиксированного промежутка времени, и прямой вины пользователя в этом нет.

В данном материале я расскажу, что значит 504 Gateway Time-out, каковы причины данной проблемы, и как исправить ошибку на вашем ПК.

Ошибка 504 в окне браузера

Что такое 504 Gateway Time-out и каковы её причины

С английского языка текст данного сообщения переводится как «504 Время прохождения через шлюз истекло». Обычно данная ошибка связана с ситуацией, при которой один сервер, пытаясь загрузить интернет-страницу или выполнить что-либо релевантное, не получил на протяжении заданного промежутка времени ответ от другого сервера.

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

Отсутствие своевременного ответа от нужного сервера становится причиной возникновения ошибки 504

Причины ошибки 504 Gateway Time-out могут быть следующими:

  • Вебмастер некорректно настроил проблемный сервер;
  • На проблемном сервере наблюдаются какие-либо технические проблемы;
  • На проблемном сервере некорректно работают различные скрипты;
  • Имеются проблемы с сетевым подключением у самого пользователя (нестабильно работают роутер или модем, сбились настройки DNS и так далее);
  • На требуемый сервер оказывается большая нагрузка пользовательских запросов, и сервер не успевает их обрабатывать.Изучаем ошибки 504

Как исправить ошибку 504 Gateway Time-out

Как я уже писал выше, данная проблема обычно связана с некорректно работающим сервером, и вины пользователя, столкнувшегося с ошибкой 504 Gateway Time-out, в случившемся нет. Тем не менее, рекомендую таким пользователям выполнить следующее:

  • Перегрузите проблемную страницу (обычно с помощью нажатия на F5), или вновь введите требуемый адрес в адресную строку вашего браузера, и нажмите ввод;
  • Просто подождите. Ошибка может иметь временный характер, связанный с техническими работами на сервере и иными релевантными причинами. Обычно через некоторое время работа сервера нормализуется, и пользователь получает доступ к требуемому ресурсу;
  • Перезапустите ваш роутер (модем). В небольшом количестве случаев сбои в работе указанных устройств могут вызывать проблемы с интернет-соединением, и появление ошибки 504;Перезагрузите ваш роутер с помощью нажатия на кнопку включения-выключения
  • Если вы используете прокси для работы в сети, проверьте настройки прокси, и убедитесь, что всё работает стабильно и без сбоев;
  • Попробуйте сменить настройки ваших DNS серверов. Для этого нажмите на кнопку «Пуск», в строке поиска введите ncpa.cpl и нажмите ввод. В открывшемся списке сетевых подключений найдите ваше интернет-подключение, наведите на него курсор, нажмите правую клавишу мыши и выберите «Свойства». В списке компонентов найдите протокол версии 4, и дважды кликните на нём. В открывшемся окне выберите опцию «Использовать следующие адреса ДНС-серверов», и укажите какие-либо публичные адреса, например от:

Источник: http://it-doc.info/504-gateway-time-out-chto-znachit/

Как исправить ошибку 504 Gateway Timeout Error?

Ошибка 504 Gateway Timeout Error в буквальном смысле означает, что один сервер не смог вовремя получить ответ от другого сервера, к которому он обращался, пытаясь выполнить запрос браузера или загрузить страницу. Проще говоря, ошибка указывает на то, что между сервером, на котором расположен Ваш сайт, и вашем компьютером отсутствует стабильное достаточно быстрое соединение с интернетом.

Существует несколько способов для решения проблемы.

Способ 1. Перезагрузка страницы в веб-браузере

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

Также можно попробовать открыть ту же страницу в каком-либо другом браузере. Кроме того, можно воспользоваться специальным онлайн-сервисом, показывающем недоступность сайта исключительно для вас или для всех пользователей. Если сервис выдал сообщение “site.

ru looks down from here”, то действительно сайт недоступен для всех.

Способ 2. Отключение параметров прокси

Часто ошибка 504 может возникнуть вследствие использования прокси-сервера, который может быть подключен как в самом браузере, так и в настройках сетевого адаптера. Рекомендуется проверить, действительно ли используется прокси-сервер, и отключить его.

novpedkolledg2.ru

504 gateway timeout – что это?

 

Естественно, что любую процедуру лечения рекомендуется начинать с понимания причин возникновения ошибки. Или, как минимум, знания определения каждой неприятности. Если сделать перевод на русский «504 gateway time out», то получиться сообщение, в котором говорится о шлюзе, к которому истекло время, отведенное для подключения.

То есть, выглядит это примерно так:

  • Какой-то пользователь пытается совершить вход на интересный ему ресурс.
  • Начинается процесс подключения к серверу.
  • Процедура не успевает закончится в отведенное для нее время.

В итоге, возникает код ошибки 504 Gateway Time-out.

Как избавиться от ошибки 504 Gateway Time-out

Естественно, что посетители, видящие, что доступ на нужный им сайт невозможен, могут просто пойти на конкурирующие, рабочие ресурсы. То есть, владелец проблемного сервера может потерять посетителей, трафик и свой доход. Следовательно, очень важно владеть информацией о том, как решить проблему 504 gateway time out.

Как исправить 504 gateway time out nginx и ее аналоги

 

Существует три способа, которые могут помочь решить данную проблему.

  1. Аппаратный.

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

image1

  1. Программный.

Этот вариант подразумевает при возникновении 504 gateway timeout облегчить используемые скрипты, которые, кроме своих положительных качеств имеют и отрицательные. Например, увеличивают время подключения к удаленному серверу.

821a8564de5dfb0f56b31d65e680652a

Кроме того, рекомендуется увеличить установленные значения для параметра PHP max_execution_time.

 

  1. Оптимизирование.

При своей работе любой сервер запускает целый ряд различных процессов. Те же скрипты, SQL запросы и так далее. Естественно, что следует получить доступ к подобным процедурам, просмотреть список и отключить те, которые могут оказаться не обязательными.

Homme avec une tablette numérique touchant un écran tactil

 

helpmyos.ru

Что значит 504 gateway time out Nginx?

504 gateway time out nginx

Как я уже сказал, такая ошибка возникает, когда сервер Nginx работает в режиме прокси. Например, при использовании php-fpm или Apache. Дословно, она означает, что превышено время ожидания ответа от сервера. В нашем случае, превышено время ожидания ответа от php-fpm. Рассмотрим несколько причин такого поведения:

  • Скрипт PHP или на другом языке полностью завис и уже не вернет никакого ответа;
  • Скрипт работает очень долго, но в Nginx настроен интервал на сброс соединения если целевой сервер не ответил на запрос за отведенный строк;
  • Сервер перегружен и не успевает обслужить всех клиентов, вернуть ответы на все запросы Nginx;

Дальше рассмотрим что можно сделать если вы встретились с ошибкой 504 gateway time out Nginx.

Как исправить 504 gateway time out Nginx?

Самый первый вариант — это если вашему серверу, php-fpm или apache не хватает ресурсов системы, например, памяти или процессора. Вы можете посмотреть свободную память с помощью команды free:

free -h

504 gateway time out nginx

Нагрузку на процессор можно узнать командой htop:

htop

504 gateway time out nginx

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

Второй вариант — это если так и было запланировано, чтобы скрипт работал долго. В таком случае нужно настроить Nginx, чтобы он дождался ответа от Apache или php-fpm. Для решения проблемы в случае с php-fpm нужно только добавить две строчки в блок настройки fastgci:

fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

504 gateway time out nginx

Здесь 300 означает 300 секунд, для большинства скриптов, этого будет вполне достаточно, но вы можете еще больше увеличить значение если это нужно. Также ошибка 504 может возникать, когда Nginx используется в качестве прокси для Apache или любого другого веб-сервера, тогда нужно еще настроить время ожидания для прокси. Добавьте эти строки в секцию server:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

Тут уже мы задаем таймаут 600 секунд для различных видов действий — подключения, отправки данных, чтения данных и так далее. После завершения настройки Nginx стоит перезапустить:

sudo systemctl restart nginx

Последний вариант, который мы рассмотрим — это скрипт завис. Если вы сами запускаете скрипт, то сразу увидите что зависло, но если такая ошибка встречается у пользователей, то это уже более серьезная проблема. Вы можете посмотреть встречаются ли вашим пользователям такие ошибки и где они встречаются с помощью команды:

fgrep -i " 504 " /var/log/nginx/access.log

Более подробную информацию иногда можно увидеть в error.log:

fgrep -i " 504 " /var/log/nginx/error.log

Дальше, если проблема именно в php-fpm, вы можете отследить какие скрипты выполняются медленно с помощью встроенной функции slow-log. Для ее активации добавьте следующие строки в конфигурацию вашего пула:

sudo vi /etc/php-fpm.d/www.conf

slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

504 gateway time out nginx

 

Здесь 5 секунд, означает, что в лог файл будут добавляться скрипты, которые выполняются дольше пяти секунд. Вы можете менять это значение по своему усмотрению. В логе вы сможете увидеть не только сами скрипты, но и трассировку методов, которые привели к проблемам:

504 gateway time out nginx

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

Выводы

В этой статье мы рассмотрели как исправить 504 gateway time out Nginx 1.2 7, а также почему может возникнуть эта ошибка. Надеюсь, эта информация была полезной для вас.

losst.ru

что значит ошибка 504 Gateway Time-out Nginx

При попытке зайти на сайт Вы получаете сообщение ошибка 504 с текстом «Gateway Time-out. Nginx«. Такое сообщение появляется, как правило, на тех сайтах, где веб-сервер Nginx работает как фронт-энд для сервера Apache. Что это значит?
Несмотря на то, что ошибка 504 выдаётся именно Nginx, причиной появления её он не является, а сообщает нам о том, что долго ждал ответа от Апача, но так его и не дождался. Обычно такое происходит в тех случаях, когда на сервере, где расположен сайт, очень высокая нагрузка и он не успевает обрабатывать все HTTP-запросы. Как это устранить? 

Если Вы посетитель сайта. В там случае у Вас только один выход — ждать пока администрация веб-ресурса решит проблему у себя. Вы, как простой посетитель, ничего сделать не сможете. Просто с некоторой периодичностью (раз в 2-3 часа) просто пробуйте зайти на страничку. Чаше не надо! Коли там действительно превышена нагрузка, то вы будете только «подливать масло в огонь».
В тех случаях, когда надо срочно посмотреть содержимое странички, а она пишет «Error 504 Gateway Time-out» — можно воспользоваться кешированной версией, которая храниться в веб-кеше крупных поисковых сервисов — Яндекс и Гугл. Для этого достаточно ввести адрес страницы в строку поиска и в найденном результате выбрать вариант «Сохранённая копия».

Если Вы администратор сайта. В этом случае возможны два варианта:
а) Вы арендуете VPS/VDS и имеете SSH-доступ к нему.
Начните с перезапуска серверов. Я покажу на примере Fedora/CentOS. Сначала рестартим Апач:

service httpd restart

Затем — перезагрузим Nginx:

service nginx restart

Не помогло? Тогда можно попробовать увеличить таймаут. Для этого в nginx.conf прописываем параметр:

keepalive_timeout 60

По умолчанию его значение — 0.
Снова перезапускаем веб-сервер и смотрим изменилась ли ситуация.
Такой ход иногда может помочь. Но если на ресурс очень сильная нагрузка, то увеличив таймаут вы увеличите и количество ожидающих http-соединенний, а значит ещё повысите нагрузку, что крайне не желательно! А то плюсом добавится ещё и ошибка 502 Bad Gateway из-за перегруза httpd запросами.
Поэтому надо разобраться с тем, что же создаёт такую сильную нагрузку. Для этого воспользуемся командой:

top -c

Обратите внимание на значения в строчке «load average».

load average

Его максимальное значение должно быть не более количества ядер у процессора. Ну плюс/минус 2. Если значение более 10 — надо бить тревогу. Обычно такое возникает в случае DDOS-атаки, из-за которой Apache забит Sync-запросами. Ишите с помощью команды netstat IP-адреса ботов и заносите их в DROP-правила пакетного фильтра Firewall.
Если на Вашем ресурсе Nginx работает вместе с PHP-FPM, то очень часто ошибка 504 возникает из-за медленных скриптов. Веб-сервер просто не дожидается результата выполнения. Спаси может помочь добавление параметра

fastcgi_read_timeout 300;

в раздел:

location ~ .php$ {  ....  }

б) Вы арендуете только хостинг без доступа к его настройкам.
При таком раскладе самостоятельно ничего сделать Вы не сможете и остаётся только обращаться в техподдержку Вашего хостинг-провайдера с просьбой устранить ошибку 504 Gateway Time-out. Обычно системные администраторы хостера помогают пользователям найти источник проблемы и устранить его. Если же они пошлют Ваш куда подальше, то выход будет только один единственный — менять хостинг-провайдера.

set-os.ru

Итак, на своём сайте мы столкнулись с ошибкой 504 Gateway Time-out и не знаем, что же делать. В этом посте постараюсь описать полный алгоритм действий для решения этой проблемы, а так же поведать о причинах её возникновения. Следуйте под кат!

Так вот, продолжим. Для начала выясним, что это за HTTP код ошибки такой, а точнее, что же он  означает? 504 — пятьсот четвёртая ошибка, она же Gateway Timeout, а точнее, на русском это звучит примерно так: «Время прохождения через шлюз истекло». Код означающий, что сервер при работе в качестве внешнего шлюза или прокси-сервера не получил своевременно отклик от вышестоящего бэкенда сервера, к которому он обратился, пытаясь исполнить запрос.

По этой ошибке легко можно представить внутреннюю организацию вашего web сервера. Это явно связка двух web серверов в которой один выступает в роли фронтенда (переднего сервера) и второй в качестве бэкенда (заднего сервера). И скорее всего, так бывает в 99% случаев, установлен веб сервер nginx, который выступает в качестве фронтенда и так же стоит сервер Apache в качестве бэкенда. Nginx берёт на себя роль распределяющего proxy сервера и отдаёт статику (картинки, файлы), а apache вместе с PHP обрабатывает динамику, там же и MySQL неподалёку. И ошибку  504 Gateway Time-out вы получаете именно от nginx.

В общем вернёмся к делу. Ситуация предельно ясна! За отведённое время сервер nginx просто не дожидается обратного ответа от apache и сообщает об этом вам. Т.е. прослеживаются явные перегрузки на «внутренней» стороне бэкенда. Другой вопрос в том, что именно порождает эти перегрузки от чего apache не успевает во время ответить? Это уже вопрос другой. Тут так просто не разобраться, надо смотреть логи сервера. Ну понятное дело, что кто то перегружен. Либо скрипт долго работает, либо СУБД не успевает обработать множество запросов, что кстати бывает чаще всего ведь коннектор с СУБД это самое слабое место. В общем ваш внутренний сервер не успевает в срок выполнить скрипт, точнее он просто долго выполняет, а nginx не хочет ждать и спешит отдать вам 504 ошибку. От чего не укладывается по времени apache так же ясно, либо много запросов извне и ресурсов сервера не хватает (это можно узнать из счётчика посещаемости сайта), либо выполняемый скрипт очень тяжёлый.

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

В общем, ближе к делу, наша задача сказать серверу nginx, что бы он ждал ответа от apache подольше и не торопился отдавать клиенту ошибку 504. С этим всё просто! Естественно нужно иметь root доступ к своему серверу, о виртуальных хостингах и даже говорить не буду. В общем заходим на своей сервер, хоть даже по протоколу ssh в терминал и идём в папку с конфигурационными файлами сервера nginx. Сразу скажу, что они меняются от версии к версии и поэтому точно сказать какой именно файл будет не могу. Плюс ко всему всё ещё зависит от того в каком режиме работает nginx и кто его вам настраивал. Грубо говоря нам нужен текущий файл настроек сервера nginx. Возможно это даже будет nginx.conf, как в общем то и должно быть.

Далее будут показывать на своём примере, думаю применить к себе будет не сложно, ОС Linux Ubunut.

Заходим в условный файл настроек виртуальных хостов сервера nginx, расположенному по адресу: /etc/nginx/nginx.conf

Здесь можем либо поискать уже установленные директивы (если есть) или дописать вручную. Можно дописать естественно как для всех хостов, так и для каждого конкретного, не важно. В общем пишем следующее:

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

Эти директивы нужны для изменения времени ожидания. Лучше вставлять в контекст location. У меня получилось примерно следующим образом:

server {  	listen xxx.xxx.xxx.xxx:80; # ip адрес сервера и прослушиваемый порт  	server_name someserver.loc; # имя сервера  	rewrite ^(/manager/.*)$ https://$host$1 permanent;  	error_page 404 = @fallback;  	# Далее две строки, которые надо добавить  	proxy_send_timeout 600; # время ожидания при передаче запроса  	proxy_read_timeout 600; # время ожидания при чтении ответа  	location / {  		proxy_pass http://xxx.xxx.xxx.xxx:8080; # протокол и адрес проксируемого сервера, а также необязательный URI, на который должен отображаться location   		proxy_redirect http://sitename.loc:8080/ /; # текст, который нужно изменить в полях заголовка “Location” и “Refresh” в ответе проксируемого сервера  		proxy_set_header Host $host;  		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  		proxy_set_header X-Real-IP $remote_addr;  	}  }

Далее сохраняем файл конфигурации и перезапускаем сервер nginx. Теперь он будет ждать ответа от apache именно столько времени, сколько вы указали в добавленных директивах, а не по значению по умолчанию. Думаю понятно, что время вы сами выставляете какое хотите. Всё, теперь ошибка 504 Gateway Time-out вас беспокоить не будет. Понятное дело, что это лишь вершина айсберга и нужно будет разбираться с самой причиной долгой генерации страницы, но это уже другая тема. Возможно придётся так же поставить таймаут побольше и для PHP, а то может быть такое, что и он начнёт ругаться, мол ему дают мало времени на обработку. Для этого используем PHP директивы max_input_time и max_execution_time в файле настроек PHP —php.ini или в файле локальных настроек сервера Apache — .htaccess

Дополню тем, что если вы используете сервер Apache в качестве переднего сервера (фронтенда) и получаете ошибку 504 Gateway Time-out именно от него, тогда можно попробовать поменять опцию Timeout, находится в файле конфигураций веб сервера, чаще всего это либо httpd.conf илиhttpd-default.conf. Находим следующие строки:

#  # Timeout: The number of seconds before receives and sends time out.  #  Timeout 60  

Вместо 60 пишем своё новое значение, рекомендую не мелочиться и сразу поставить на 600 секунд (Timeout 60), т.е. 10 минут.

На этом пожалуй всё, думаю проблема 504 Gateway Time-out теперь для вас решена.

vagur.wordpress.com

What does the 504 gateway timeout mean?

As I said, this error occurs when the Nginx server is running in proxy server mode. For example, using Apache as backend server and Nginx as front-end proxy server. Literally, it means that the response time from the server has been exceeded. In our case, the response time from php-fpm has been exceeded. Consider several reasons for this behavior:

  • The PHP script or in another language is completely frozen and will not return any response;
  • The script runs for a very long time, but in Nginx, the interval is set to reset the connection if the target server did not respond to the request for the allocated rows;
  • The server is overloaded and does not have time to serve all clients, return the answers to all Nginx requests;

Next, consider what you can do if you encountered a 504 gateway timeout error Nginx.

How to fix 504 gateway timeout Nginx

The first option – it is when your server, php-fpm or Apache has not enough system resources such as memory or CPU. You can view free memory with the command free:

The load on the processor can be observed by the top command:

Naturally, if you see that PHP takes up all of the CPU time, it means a problem in the server resources. You can investigate the issue and optimize certain settings to reduce the response time.

The second option is if it was planned for the script to work for a long time. In this case, you need to configure Nginx to wait for a response from Apache or php-fpm. To solve the problem in the case of php-fpm, you just need to add two lines to the FastCGI configuration block:

Here 300 means 300 seconds, for most scripts, this is quite enough, but you can further increase the value if necessary. Also, error 504 can occur when Nginx is used as a proxy for Apache or any other web server, then you still need to configure the timeout for the proxy. Add these lines to the server section:

Here we already set a timeout of 600 seconds for various kinds of actions – connecting, sending data, reading data and so on. After the Nginx setup is complete, restart it:

The last option that we will consider is the script freezes. If you execute the script yourself, you will immediately see that it has performance issues due to some ill or bad coding or maybe non-compatibility with php version. If such error occurs it is a more serious problem. You need to immediately read the error log and trace out the problem. Grep is very helpful in such situations,

More information can sometimes be seen in the error.log:

Further, if the problem is in php-fpm, you can track which scripts are executed slowly using the built-in function slow-log. To activate it, add the following lines to the configuration of your pool:

Here 5 seconds, means that scripts will be added to the log file, which runs for more than five seconds. You can change this value at your discretion. In the log, you can see not only the scripts themselves but could also trace the root cause that led to such problems.

Then you just have to figure out what to do with it, for example, optimize scripts or disable extra plug-ins.

Conclusions

In this article, we examined how to fix 504 gateway timeout issue faced in Nginx, and also why this error may occur.

www.smashinglab.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.