• Главная
  • Интернет
  • Ошибка 504 Gateway TimeOut (время прохождения через шлюз истекло) | Вебмастеру
Интернет

Ошибка 504 Gateway TimeOut (время прохождения через шлюз истекло) | Вебмастеру

что значит ошибка 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.


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

.yuzo_related_post .relatedthumb{background: !important; -webkit-transition: background 0.2s linear; -moz-transition: background 0.2s linear; -o-transition: background 0.2s linear; transition: background 0.2s linear;;color:!important;} .yuzo_related_post .relatedthumb:hover{background:#fcfcf4 !important; -webkit-transition: background 0.2s linear; -moz-transition: background 0.2s linear; -o-transition: background 0.2s linear; transition: background 0.2s linear;;color:!important;} .yuzo_related_post .yuzo_text, .yuzo_related_post .yuzo_views_post {color:!important;} .yuzo_related_post .relatedthumb:hover .yuzo_text, .yuzo_related_post:hover .yuzo_views_post {color:!important;} .yuzo_related_post .relatedthumb a{color:!important;} .yuzo_related_post .relatedthumb a:hover{color:!important;} .yuzo_related_post .relatedthumb:hover a{ color:!important;} .yuzo_related_post .relatedthumb{ margin: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; }

Что значит 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, а также почему может возникнуть эта ошибка. Надеюсь, эта информация была полезной для вас.


Похожие посты

Snapdragon 8150 оказался мощнее Apple A12 Bionic

Avtor

iOS 12 установлена на половине совместимых устройств

Avtor

Royole FlexPai: первый изогнутый смартфон

Avtor
Adblock
detector