Веб-сервер 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:

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

504 Gateway Time-out. Исправить ошибку, как увеличить тайм-аут | max_execution_time = 300.

Если проделанные ниже действия не помогут — меняйте хостинг.

Имененяем в php.ini

Изменить максим. время выполнения для PHP скриптов из 30 до 300 секунд.

Установите…

В Apache PHP работает как модуль, этих изменений будет достаточно. В нашем случае нужно сделать изменения еще в нескольких местах.

Изменяяем в PHP-FPM

Это нужно, если Вы раскоментировали параметр request_terminate_timeout ранее. По умолчанию он закоментирован и берет значение max_execution_time found из php.ini

Изменяем в Nginx Config

Увеличение time limit-а для одного домена example.com

nano /etc/nginx/sites-available/example.com location

Если Вы хотите увеличить time-limit для всех доменов на вашем сервере, Вы можете отредактировать главный конфигурационный файл nginx.conf:

Добавить следующий параметр в http <..>секцию

Перезагружаем PHP-FPM и Nginx

service php5-fpm restart service nginx restart

Method 1 – Modify your php.ini file with the following entries:

  • memory_limit = 256M
  • max_execution_time = 600
  • upload_max_filesize = 200M
  • post_max_size = 201M

Method 2 – In your /admin/ folder of OpenCart, create an .htaccess file with the following entries:

  • php_value memory_limit 256M
  • php_value max_execution_time 600
  • php_value upload_max_filesize 200M
  • php_value post_max_size 201M

Что такое ошибка 504 Gateway Time-out (nginx)?

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

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

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

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

Слишком большое количество пользователей

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

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

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

php_value max_execution_time N

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

Юзеры ( 3 ) оценили на 3.3 из 5

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

Также мы собрали тарифы от тысяч хостеров, чтобы вы могли выбрать хостинг по конкретной цене.

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

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

VPS — подходит для более сложных проектов с достаточно большой нагрузкой и посещаемостью до 10000 человек в сутки. Здесь мощность сервера фиксированная для каждого виртуального сервера, при этом сложность настройки увеличивается.

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

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

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

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

Moneyback — период на протяжении которого хостер обязуется вернуть деньги, если вам не понравится хостинг.

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

Абузоустойчивый хостинг — компании, которые разрешают размещать практически любой контент, даже запрещенный (спам, варез, дорвеи, порнографические материалы). Такие компании не удаляют контент вашего веб-сайта при первой же жалобе (“абузе”).

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

Безопасный хостинг — тот, где администрация постоянно обновляет ПО установленное на серверах, устанавливает базовую защиту от DDoS-атак, антивирус и файерволлы, блокирует взломанные сайты и помогает их "лечить".

Защита от DDOS — компании, которые предоставляют хостинг с защитой от DDoS-атак. Такие пакеты ощутимо дороже обычных, но они стоят своих денег, так как ваш сайт будет защищен от всех видов сетевых атак.

На языке программирования PHP и базах данных MySQL сейчас работает большинство сайтов. Они же поддерживаются практически всеми современными хостингами.

ASP.NET — платформа для разработки веб-приложений от Майкрософт.

От панели управления зависит ваше удобство в настройке хостингесайта.

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