Ошибка 504 gateway time out

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

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

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

Ошибка 504 gateway time out

Как я уже сказал, такая ошибка возникает, когда сервер 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

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

htop

Ошибка 504 gateway time out

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

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

fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

Ошибка 504 gateway time out

Здесь 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

 

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

Ошибка 504 gateway time out

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

Выводы


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

losst.ru

Причины 504 ошибки.

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

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

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

Решение ошибки.

Но это более глобальные задачи. А пока попробуйте увеличить время ожидания и выполнения для ряда скриптов. Это поможет устранить пресловутую ошибку 504. По умолчанию время выполнения в настройках сервера установлено 30с.


Чтобы увеличить его, можно применить set_time_limit. Только не всегда удается задействовать эту схему из-за ограничений на хостинге. Если PHP запущен в так называемом безопасном режиме, то нужно в конфигурации php увеличить время работы скрипта(функция max_execution_time). Когда же не удается снять запрет на использование set_time_limit, попробуйте запустить данную функцию (max_execution). Наконец, можно в конфигурации сервера увеличить время работы скрипта. Для этого прописать следующее:

  • • proxy_send_timeout 60; (ожидание для процесса передачи);
  • • proxy_read_timeout 60; (ожидание для процесса чтения).

Ставим 60 с (120) вместо 30с стоящих по умолчанию.

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

computest.ru

Если сервер, на котором располагается ваш ресурс, перегружен (это происходит вследствие исчерпывания лимита трафика), он выдает пользователю сообщение: «Ошибка 504 gateway time out». В переводе на русский это означает: «время ответа шлюза вышло, шлюз не отвечает». Возникает ситуация, когда Apache чисто физически не может обработать все http-запросы, и они встают в очередь. Однако проходит лимитное время, и приходит сообщение о том, что запрос не обработан.


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

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

Есть и еще одна причина, по которой может возникнуть 504-ошибка: скрипт, выполняющий какую-то команду, не укладывается в те временные рамки, которые для него заданы. Это может быть связано с запросом сторонних ресурсов, либо он сам в это время занимается другим делом.
пример, выстраивает поисковый индекс.
Для удаления неисправности вы можете пойти двумя путями:
1) облегчить скрипт путем его оптимизации;
2) увеличить значение PHP-параметра max_execution_time.
Еще раз хотелось бы затронуть вопрос о технической поддержке хостинг-провайдера, на котором расположен ваш сайт. Безусловно, у каждого он свой, но обязанности саппортов для всех обязательны. Бывают такие случаи, когда вопросы, отправленные в службу поддержки, остаются без внимания. Особенно если это касается каких-нибудь лагов. Например, возникает та же самая ошибка 504. В этом случае меняйте хостинг. Если начнутся более серьезные проблемы, то вряд ли вы сможете рассчитывать на их помощь.

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

Вот и все, что хотелось вам рассказать о таком явлении, как ошибка 504. Пускай она встречается вам как можно реже!


fb.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

Информация об операционной системе

Сообщения об ошибках Gateway Timeout могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:

  • Windows 10
  • Windows 8
  • Windows 7
  • Windows Vista
  • Windows XP
  • Windows ME
  • Windows 2000

www.solvusoft.com

Решение ситуации

Существует несколько способов того, как решить проблему:

  • Аппаратный.
  • Программный.
  • Оптимизированный.
  1. Первый подразумевает приобретение дополнительной операционной памяти и увеличение мощности главного процессора, который отвечает за работу сервера.
  2. Второй требует облегчения скриптов, особенно если этот элемент дополнительно в своей работе выполняет обращение к огромному числу разнообразных сайтов. Параллельно этому действию рекомендуется увеличить значения, установленные для параметра PHP max_execution_time.
  3. Последний способ того, как исправить 504 gateway time out nginx, заключается в процедуре оптимизации всех процессов, которые выполняет сервер во время своего функционирования. Это и скрипты и SQL запросы, и так далее. Естественно, что для этой процедуры, как минимум надо обладать правами на администрирование, а в идеальном варианте – иметь полный доступ ко всей системе.

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

windowserror.ru

Что такое ошибка 504 Gateway Timeout?

Коды состояния HTTP, начинающиеся с цифры 5, являются ошибками на стороне сервера. Они появляются, когда невозможно выполнить запрос из-за нарушения связи между несколькими серверами.

Ошибка 504 gateway timeout – это код состояния HTTP, который появляется, когда один сервер не получает своевременный ответ от другого сервера, который действует как шлюз или прокси. Проще говоря, это означает, что сервер не смог выполнить ваш запрос в течение заданного периода времени.

Ошибка 504 - страница в браузере

Ошибка 504 gateway timeout также может иметь и другие формулировки, например:

504 Gateway Timeout nginx
Gateway Timeout Error
HTTP Error 504
504 Gateway Time-out – The server didn’t respond in time
HTTP Error 504 – Gateway Timeout

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

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

1. Обновите страницу

Первый шаг в решении ошибки 504 gateway timeout самый простой. Подождите несколько минут и обновите страницу. Может быть, что сервер в какой-то момент получил больше запросов, чем обычно и не смог обработать их.

Пока вы ожидаете, вы можете использовать онлайн инструмент и проверить, работает ли сайт. Это хороший способ определить, относится ли проблема к локальной сети.

Проверка работы сайта онлайн инструментом

2. Попробуйте другой браузер

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

3. Очистите кэш DNS

Ошибка 504 gateway timeout иногда может быть результатом некорректного устаревшего кэша DNS, но его не сложно очистить. Способ очистки зависит от вашей операционной системы. Вот руководство как очистить кэш DNS в ОС Windows, Linux и Mac OS.

Временно переключите DNS сервера на Google Public DNS, это поможет определить возник ли код состояния HTTP по причине DNS проблемы. Однако мы рекомендуем этот вариант для более опытных пользователей.

4. Проверьте на разных устройствах

Попробуйте загрузить сайт на разных компьютерах, в разных сетях или на мобильных устройствах. Если ничего из выше перечисленного не помогло исправить ошибку 504 gateway timeout, этот шаг поможет вам определить, проблема находится на стороне сервера или имеет локальный характер.

5. Посмотрите журнал ошибок

Ошибка 504 gateway timeout может также быть вызвана недавними изменениями или обновлениями на сайте. Самый быстрый путь обнаружения – проверка журнала ошибок (англ.) для поиска подсказок. Пользователи WordPress могут включить журналирование ошибок добавлением таких строк в файл wp-config.php:

define( 'WP_DEBUG', true );  define( 'WP_DEBUG_LOG', true );  define( 'WP_DEBUG_DISPLAY', false );

Теперь все возникающие варианты ошибок будут появляться в файле wp-contents/debug.log.

Журнальный файл для ошибок WordPress

6. Проверьте плагины

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

Для отключения всех плагинов WordPress перейдите в каталог wp-content, дайте каталогу plugins другое имя.

Отключение всех плагинов в WordPress

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

Отключение плагина WordPress по FTP

7. Проверьте CDN

Если вы используете CDN для более быстрого получения контента, то обязательно проверьте всё ли в порядке с этой стороны. Самый распространённый случай – это CloudFlare, который работает как CDN и как сервис предотвращения негативных последствий от DDoS. При его использовании вы можете столкнуться в двумя видами ошибок 504 gateway timeout.

Ошибка 504 gateway timeout cloudflare - 1

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

Ошибка 504 gateway timeout cloudflare - 2

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

8. Измените настройки сервера

Если вы используете VPS хостинг, то есть ещё несколько дополнительных моментов, которые вы можете попробовать для исправления ошибки 504 gateway timeout. Они будут заключаться в изменении настроек сервера и увеличении лимитов некоторых ресурсов.

Apache

Пользователи Apache могут увеличить значение timeout по умолчанию в файле httpd.conf. Например:

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

Также увеличение лимита max_execution_time в php.ini может позитивно сказаться:

max_execution_time 300

Сохраните изменения и перезапустите apache, после чего проверьте. Ошибка 504 gateway timeout должна уйти, если её причиной были недостаточное значение таймаута запроса.

Nginx

Если ваш VPS использует Nginx, попробуйте увеличить такие параметры в файле /etc/nginx/conf.d/timeout.conf:

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

Также рекомендуется увеличить max_execution_time в php.ini:

max_execution_time 300

После сохранения изменений перезапустить Nginx и попробуйте ещё раз открыть свой сайт.

9. Свяжитесь со службой поддержки

В случае настойчивой ошибки 504 gateway timeout после прохождения всех шагов выше, рекомендуется обратиться в службу поддержки вашего хостинга. Постарайтесь описать, какие шаги вы проделали для выявления причины ошибки и её устранения и предоставьте как можно больше информации, это значительно ускорит процесс.

Выводы

В этом руководстве мы рассмотрели общие шаги для решения проблемы, связанной с ошибкой 504 gateway timeout. Если у вас есть свои хитрости, подсказки или дополнительные решения для устранения этого кода состояния HTTP, дайте нам знать в комментариях!

www.hostinger.ru

Что означает ошибка «504 Gateway Time-out»

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

Техническая сторона вопроса

В подавляющем большинстве случаев проблема с кодом 504 возникает:

  • если на сервере в качестве бэкенда установлен Apache;
  • при этом в качестве фронтенда установлен nginx.

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

Из-за чего появляется ошибка 504

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

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

Из-за чего появляется ошибка 504 gateway time out

Ошибка на стороне скриптов

Иногда код «504 Gateway Tme-out» вызывает не чрезмерная нагрузка, а неправильная настройка скриптов на сайте. Любому скрипту отводится определённый отрезок времени на выполнение. На практике, по ряду причин, этого времени скрипту может не хватить.

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

Задержка в процессе выполнения скриптов на сайте может вызываться и другими причинами:

  1. Если скрипту для работы необходимы внешние ресурсы (к примеру, база данных на стороннем сервере), которая на данный момент недоступна.
  2. Если скрипт работает не напрямую, а с установкой соединения через прокси-сервер. В случае недоступности прокси-сервера или превышения времени ожидания ответа скрипт также выдаст код 504.
  3. Скрипт загружает данные со сторонних серверов, которые на данный момент недоступны.

Как объяснить появление ошибки 504 gateway time out

Как решить проблему 504

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

  1. Попробовать определить основные источники нагрузки на сервере. Нужно найти, какие именно запросы обрабатываются дольше всего и приводят к возникновению очереди и последующей ошибки 504, и оптимизировать эти места.
  2. Оптимизировать все скрипты. Желательно, чтобы загружаемые сайтом скрипты физически находились на том же сервере, что и сам сайт, или по крайней мере на физическом пространстве, находящемся под контролем владельца сайта. Если оптимизировать скрипты, настроить время их выполнения и выделить необходимые для этого серверные ресурсы, ошибка 504 перестанет возникать из-за скриптов.
  3. Можно пойти простым путём: просто увеличить ресурсы сервера, если есть такая возможность. Увеличение оперативной памяти, количества процессов httpd для Apache и другие меры повышения производительности приведут к тому, что серверу снова станет хватать ресурсов для выполнения запросов. Правда, подобное решение может являться лишь временной мерой, и с ростом нагрузки отсутствие должной оптимизации опять заявит о себе.

Решение ошибки 504 gateway time out

В том случае, если сайт с достаточно высокой посещаемостью (или требующий много ресурсов) располагается на обычном виртуальном хостинге, мощностей может элементарно не хватать. Некоторые хостеры присылают своим клиентам уведомления о превышении допустимой нагрузки, некоторые – нет. Следует посмотреть логи и запросить нужную информацию о технической поддержке хостинга. Вполне возможно, что с сайтом всё в порядке, просто из-за роста посещаемости пора переходить на VPS, VDS и другие тарифы и услуги с существенно большими ресурсами.

liveposts.ru


You May Also Like

About the Author: admind

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

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

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

Adblock
detector