nginx php fpm timeout

Долгий скрипт на Nginx, php5-fpm. Ошибка 504 через 60 сек. Куда смотреть?

Форум работает отлично, кроме этого скрипта.
Кусок конфига nginx:

Браузер при обращении к скрипту выдает через минуту: «504 Gateway Time-out»

phpinfo() утверждает, что max_execution_time = 0

Кто еще может ограничивать время выполнения скрипта? Куда копать?

Сервер, на котором возникла проблема не имеет белого IP, а проброшен через виртуальные хосты другого nginx`а. Он, наверное и не дожидался ответа бэкенда.

Всем спасибо за обсуждение, проблема решена.

ну раз получаете ответ c 504 значит тюнить надо nginx
fastcgi_connect_timeout
также возможно придется поднять keepalive_timeout

а вообще перенесите выполнение этого скрипта на cron

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

Алексей Сундуков: это время сохранения неактивного соединения с браузером пользователя, похоже же разве нет?

а по поводу 75 секунд можно всетаки пруф, вот вам исходник fastcgi модуля
https://github.com/nginx/nginx/blob/master/src/htt.

единственный таймаут который по умолчанию 75 секунд это keepalive_timeout
https://github.com/nginx/nginx/blob/master/src/htt.

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

neolink: Правильнее было говорить, что это механизм передачи по одному tcp сокету разных http ресурсов. Это ключевой момент. Потому что «неактивным» может быть и простое, не keepalive, соединение.

Пруф по исходникам я не найду, он упоминался в рассылке Максимом Дуниным если не ошибась, можно поискать либо поднять этот вопрос повторно. Пруф по докам вот: nginx.org/ru/docs/http/ngx_http_fastcgi_module.htm.

https://github.com/nginx/nginx/blob/bb8c0683da7735.
для spdy это точно такой же таймер как и например *_read_timeout, я поэтому и написал «возможно»

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

neolink: Не закрывать сокет после отправки последнего байта клиенту можно и не по keepalive соединению.

Касательно таймаутов и харкода посмотрю на досуге, может в последних версиях харкод убрали.

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

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

Значит автору нужно либо выносить в крон, либо тюнить ядро, либо не выходить за таймауты (по времени исполнения, либо сбрасывая буфера).

75 секунд это таймаут на доставку syn пакета, то есть если у вас бекенд не упал (или сеть не перегружена и т.п.) вы в это не упретесь

Источник

Prevent nginx 504 Gateway timeout using PHP set_time_limit()

I am getting 504 timeouts message from nginx when my PHP script is running longer than usual. set_time_limit(0) does not seem to prevent that! Does it not work when running php5-fpm on nginx? If so, whats the proper way of setting the time limit?

Error:

10 Answers 10

There are several ways in which you can set the timeout for php-fpm. In /etc/php5/fpm/pool.d/www.conf I added this line:

Also, in /etc/nginx/sites-available/default I added the following line to the location block of the server in question:

The entire location block looks like this:

Now just restart php-fpm and nginx and there should be no more timeouts for requests taking less than 180 seconds.

Try this link, it has a better solution on how to fix this. So the steps are:

Add this below piece of code under http < section:

Reload Nginx and php5-fpm.

If the error persists, consider increasing the values.

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

You can’t use PHP to prevent a timeout issued by nginx.

To configure nginx to allow more time see the proxy_read_timeout directive.

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

Add these variables to nginx.conf file:

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

The correct answer is increasing fastcgi_read_timeout in your Nginx configuration.
Simple as that!

There are three kinds of timeouts which can occur in such a case. It can be seen that each answer is focused on only one aspect of these possibilities. So, I thought to write it down so someone visiting here in future does not need to randomly check each answer and get success without knowing which worked.

So the fixes for each issue are as follows.

nginx Client timeout

nginx proxied server timeout

So use the one that you need. Maybe in some cases, you need all these configurations. I needed.

Источник

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

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

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

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

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

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

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

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

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

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

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

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

fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

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

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

sudo systemctl restart nginx

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

Более подробную информацию иногда можно увидеть в 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

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

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

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

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

Выводы

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

Источник

Как я победил ошибку 502 Gateway timeout error в nginx+php-fpm

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

Php-fpm считается на сегодняшний день одним из самых быстрых движков для веб-сервера.

Но он очень нестабилен при работе со сложным php-кодом. И в один прекрасный день вы можете получить ошибку 502 Gateway timeout error.

У меня в проекте так и получилось. На VPS стоял nginx + php7.0-fpm + MariaDB + memcached.

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

Для проверки, когда мой скрипт все-таки работает, я написал скрипт-чекер на php и запускал каждые 10 минут его по сron. Чекер запускался через консоль, а обращался через функцию file_get_contents() к url скрипта на сайте.

В случае недоступности скрипта я отсылал через mail() письмо себе на почту.

Я выяснил, что ошибка 502 Gateway timeout error возникала не всегда. Могла появиться раз в час, а могла и на протяжении многих часов.

Временно исправить проблему помогала перезагрузка nginx и memcached.

Почитав мануалы, я решил применить то, что советуют — увеличить proxy timeout в директиве Location, а также timeout в настройках php-fpm.

Не помогло. Причем, когда я вообще сделал timeout в php-fpm бесконечным, скрипту все равно не хватало времени и он выполнялся без конца.

Решив, что все-таки дело в php-fpm я подумал, чем же его заменить. Порывшись в интернете я нашел решение для замены — OpenLightSpeed Webserver + php-модуль к нему.

Установив этот вебсервер, что было не совсем просто, но все же осуществимо в конце концов я обнаружил, что 502-я ошибка появляется все также.

Еще я не смог настроить BasicAuth авторизацию на папках, поэтому недолго думая запустил восстановление бэкапа диска VPS-сервера и через 10 минут снова работал с nginx+php-fpm.

Последнее обстоятельство толкало на новую мысль — дело не в сервере, а в скрипте. И это оказалось правильным.

Я залез в скрипт — там было 5 sql-запросов к mysql. 2 я слил в 1 при помощи LEFT JOIN, из 2-х запросов сделал 1. И еще 1 оставил, как есть.

Исследуя запросы, я обратил внимание на запрос

Источник

Ошибка 504 Gateway Timeout в Nginx

nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout nginx php fpm timeout. Смотреть фото nginx php fpm timeout. Смотреть картинку nginx php fpm timeout. Картинка про nginx php fpm timeout. Фото nginx php fpm timeout

Ошибка 504 gateway time-out возникает, когда Nginx не может достаточно долго получить ответ от какого-либо сервиса. Например от PHP-FPM.

Nginx и PHP-FPM

Наиболее частая причина такой ошибки — это совместная работа Nginx и PHP-FPM. В случае, если есть очень медленные PHP скрипты, Nginx будет отдавать 504 ошибку когда он не дожидается ответа в течение 30 секунд (по умолчанию).

Чтобы избавиться от этой ошибки, попробуйте поднять время ожидания:

В этом случае Nginx будет ждать 300 секунд (в 10 раз больше стандартного значения)

Проксирование

Gateway time-out также может возникать, когда Nginx используется как прокси-сервер. Например, при работе с Apache. Для того, чтобы избежать проблем, необходимо настроить параметры времени ожидания при проксировании:

Nginx будет ждать ответ 600 секунд от проксируемого сервиса

Не забывайте перезапускать Nginx после изменения настроек:

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

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

Источник

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

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