- Увеличение времени выполнения PHP скрипта с Nginx
- Изменения в php.ini
- Изменения в PHP-FPM
- Изменения в Nginx Config
- Перезагружаем PHP-FPM и Nginx
- Установка Postgresql 9.4 Debian 7
- Установка ImageMagick PHP на Debian/Ubuntu
- Как исправить 504 gateway time out Nginx
- Что значит 504 gateway time out Nginx?
- Как исправить 504 gateway time out Nginx?
- Выводы
- Как избежать ошибку 504 Gateway Time-out?
- 🌐 Как увеличить время ожидания запроса в NGINX
- Увеличение тайм-аута запроса в NGINX
- Заключение
- You may also like
- 🌐 Повышение производительности вашего сайта с помощью кэширования.
- 🌐 Nginx или Apache: Сравнение двух ведущих веб-серверов
- 🌐 Сопоставление URL с другим путем в Nginx
- ⌨️ Простой редирект с помощью .htaccess
- 📦 Как быстро протестировать веб-сайты с помощью встроенного.
- Методы продвижения сайтов
- ☁️ Когда следует выбрать управляемый веб-хостинг
- 🌐 Как создать пользовательскую страницу ошибки 404 в.
- 🌐 Как использовать преимущества динамического резолва DNS в.
- 🌐 Ошибка 502: причины и методы устранения неполадок
- Leave a Comment Cancel Reply
- • Свежие записи
- • Категории
- • Теги
- • itsecforu.ru
- • Страны посетителей
- IT is good
- CodeMarks
- Убираем 504 Gateway Time-out nginx — при выполнении долгих скриптов
Увеличение времени выполнения PHP скрипта с Nginx
Если у вас есть большой проэкт или сервер с ограниченными ресурсами, то Вы будете часто видеть «504 Gateway Time-out» ошибку.
Вы можете выполнить приведенные ниже шаги, чтобы увеличить значение тайм-аута. В PHP по умолчанию 30 секунд.
Изменения в php.ini
Если вы хотите изменить максимальное время выполнения для PHP скриптов из 30 секунд (по умолчанию) до 300 секунд.
В Apache PHP работает как модуль, этих изменений будет достаточно. Но в нашем случае мы должны сделать изменения еще в нескольких местах.
Изменения в PHP-FPM
Это нужно, если Вы раскоментировали параметр request_terminate_timeout ранее. По умолчанию он закоментирован и берет значение max_execution_time found из php.ini
nano /etc/php5/fpm/pool.d/www.conf
request_terminate_timeout = 300
Изменения в Nginx Config
Увеличение time limit-а для одного домена example.com
nano /etc/nginx/sites-available/example.com
Если Вы хотите увеличить time-limit для всех доменов на вашем сервере, Вы можете отредактировать главный конфигурационный файл nginx.conf:
Добавить следующий параметр в http секцию
Перезагружаем PHP-FPM и Nginx
service php5-fpm restart service nginx restart
Установка Postgresql 9.4 Debian 7
Установка Postgresql 9.4 Debian 7 Wheezy Вышла новая версия PostgreSQL под…
Установка ImageMagick PHP на Debian/Ubuntu
Установка ImageMagick PHP на Debian/Ubuntu Установка пакета ImageMagick: apt-get install imagemagick…
Как исправить 504 gateway time out Nginx
Веб-сервер 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, а также почему может возникнуть эта ошибка. Надеюсь, эта информация была полезной для вас.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Как избежать ошибку 504 Gateway Time-out?
Всем привет, задался таким вопросом, я начал писать бота на php, мне нужно чтоб при запуске скрипта в браузере скрипт выполнялся не малый промежуток времени, допустим это минут 5-10, но выдаст ошибку 504 Gateway Time-out на секундах 30.
Мне не нужна оптимизация кода, мне нужно избежать ошибку 504.
Возможно я не правильно пишу бота ?
Можно ли сделать чтоб скрипт выполнялся столько сколько ему нужно ?
Средний 1 комментарий
Судя по 504 Gateway Time-out у вас перед PHP стоит nginx. Если это так — добавьте в конфигурацию сайта настройку для ожидания времени ответа upstream. Если у вас используется FastCGI то:
fastcgi_read_timeout 30m;
если используется проксирование, то:
proxy_read_timeout 30m;
А вообще такие скрипты запускают не через веб-сервер, а из консоли, устанавливая при этом set_time_limit(0);
Со стороны nginx — вряд ли, но нужно помнить что TCP соединения не поддерживаются живыми автоматически, поэтому реальная ситуация может отличаться в зависимости от деталей вашей конфигурации
Можете обьяснить эту часть «но нужно помнить что TCP соединения не поддерживаются живыми автоматически» не особо понял, пожалуйста ?
При запросе скрипта из браузера на самом деле создаётся соединение «браузер-nginx» и, возможно, соединение «nginx-upstream» в зависимости от того какова у вас конфигурация. Если второго соединения (nginx-upstream) может и не быть (к примеру там подключение через unix socket, а не через tcp) то соединение с браузером есть и никто не будет гонять там дополнительные пакеты чтобы поддержать его в живом состоянии, оно просто будет закрыто через какое-то время, причём не обязательно по инициативе nginx. В итоге если вы хотите запускать что-то что работает долго, но отдаёт результат в браузер, а не просто использовать браузер для запуска удалённого скрипта — то реальная схема несколько другая. Если же вы просто хотите запускать скрипт на сервере — то лучше делать это из консоли, а не через браузер.
Dmitry, вам же будет легче, если вы примете за аксиому, что ответа от скрипта, выполняющегося дольше 5 минут, никто никогда не дождется. И построите решение, которое это учитывает.
Ну то есть как, скрипт просто обрабатывается, по сути его нужно просто запустить и чтоб он работал, сейчас подвох в том, что пол кода написано в веб интерфейсе, и переписывать под консоль времени нету.
Как я понимаю если я даже настрою сервер там допустим на отклик в течении 5 минут, браузер сам может отключить, тем самым все сорвав и это уже настроить нельзя ? Правильно я понимаю ?
Dmitry да, правильно. вы, конечно, можете закинуть в браузер скрипт который будет поддерживать соединение, но в целом это решение сложнее чем просто запускать скрипт из консоли. при условии что ваш скрипт использует какой-нибудь современный framework — переделать его на запуск из консоли в целом будет весьма тривиальной задачей.
🌐 Как увеличить время ожидания запроса в NGINX
Иногда долго выполняющиеся запросы завершались неудачей с сообщением об ошибке “504: Gateway Timeout” в веб-сервере NGINX.
Чтобы решить эту проблему, необходимо увеличить таймаут запроса в конфигурации сервера NGINX.
По умолчанию таймаут запроса NGINX составляет 60 секунд.
Его можно увеличить или уменьшить путем обновления конфигурационных файлов.
В этом кратком FAQ вы узнаете, как изменить таймаут запроса в веб-сервере NGINX.
Увеличение тайм-аута запроса в NGINX
Например, вы хотите увеличить таймаут запроса до 300 секунд.
Тогда вам нужно добавить директивы proxy_read_timeout, proxy_connect_timeout, proxy_send_timeout в блок http или server.
Здесь блок http позволяет вносить изменения на всех серверах NGINX.
Чтобы внести изменения для всех серверов, отредактируйте основной конфигурационный файл NGINX и добавьте следующее содержимое в блок http.
Если вы хотите увеличить таймаут запроса только для определенного сервера или поддомена, то добавьте директивы только для его блока server.
Отредактируйте файл конфигурации конкретного серверного блока и добавьте следующие параметры:
После внесения изменений необходимо перезапустить службу NGINX, чтобы применить изменения.
Системы, работающие с Systemd, могут использовать следующую команду.
sudo systemctl restart nginx
Все готово, с помощью вышеуказанных изменений вы успешно увеличили таймаут запроса в сервере NGINX.
Заключение
Это руководство поможет вам увеличить таймаут запроса в веб-сервере NGINX.
itisgood
🗃️ В чем разница между Tar и Gzip? Подробности с примером
☁️ Как установить Rclone на Linux и Unix
You may also like
🌐 Повышение производительности вашего сайта с помощью кэширования.
🌐 Nginx или Apache: Сравнение двух ведущих веб-серверов
🌐 Сопоставление URL с другим путем в Nginx
⌨️ Простой редирект с помощью .htaccess
📦 Как быстро протестировать веб-сайты с помощью встроенного.
Методы продвижения сайтов
☁️ Когда следует выбрать управляемый веб-хостинг
🌐 Как создать пользовательскую страницу ошибки 404 в.
🌐 Как использовать преимущества динамического резолва DNS в.
🌐 Ошибка 502: причины и методы устранения неполадок
Leave a Comment Cancel Reply
• Свежие записи
• Категории
• Теги
• itsecforu.ru
• Страны посетителей
IT is good
На сегодняшний день услуги системного администратора становятся все более востребованными как у крупных, так и у мелких организаций. Однако важно понять, что это за специалист,…
В мире компьютерных игр Steam, платформа разработанная компанией Valve, является одной из самых популярных и широко используемых. Она предоставляет огромный выбор игр для…
В этой статье вы узнаете, как удалить удаленный Git-репозиторий. Процесс прост, но его полезно запомнить, чтобы избежать неожиданностей в будущем. Git – это…
В 11-й версии своей операционной системы Microsoft серьезно переработала интерфейс и убрала несколько привычных функций. Нововведения не всем пришлись по душе. Мы дадим…
Продажа ноутбука нередко становится хлопотным занятием. Кроме поиска покупателя, продавцу необходимо подготовить устройство перед проведением сделки. Но если последовательно выполнить все шаги, ничего…
CodeMarks
Профессиональная доработка OpenCart интернет магазинов. Гарантия, поэтапная работа, высочайшее качество!
Убираем 504 Gateway Time-out nginx — при выполнении долгих скриптов
При запуске скриптов PHP требующих длительного выполнения бывает часто, что появляется ошибка 504 Gateway Time-out nginx, — это говорит о том, что nginx работает в режиме прокси и обрубает коннект не дождавшись выполнения скрипта.
Для решения этой проблемы в моем случае помогли следующие манипуляции:
1) Увеличил время выполнения PHP скриптов.
Выставляем значение max_execution_time = 360 — это означает 360 сек.
2) В конфиг nginx добавляем директивы позволяющие ожидать выполнения скрипта более длительное время.
В ispManager это делается так — Домены -> WWW-домены -> Конфиг -> Добавляем как на скрине, сохраняем и готово!
Поставлю 600 (600 сек.) — этого должно быть достаточно.
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
Вот и все, теперь скрипты будут выполняться долго и nginx будет дожидаться выполнения — это очень часто требуется при парсинге или импорте/экспорте товаров (в моем случае).