заметки об администрировании и программировании (python, ruby, php). Траблшутинг в «примерах» и HOWTO.

😎 О себе | 📚 Литература и ресурсы | ⚡ Все посты | 📮 E-mail
2 заметки с тегом

504

Исправляем 504 Gateway Time-out в NGINX

Обычно ошибка "504 Gateway Time-out" возникает, если в связке nginx + apache2,  бекэнд (apache2) перестает отвечать. Обычно это может быть связано с долгой отработкой скрипта, если выполняется "тяжелый" скрипт, либо скрипт работает некорректно и зависает во время исполнения.
504 Gateway Time-out
Решением является увеличение времени соединения/ожидания   В файле настроек /etc/nginx/nginx.conf добавляем:

server {
 ... 
proxy_connect_timeout 600; 
proxy_send_timeout 600; 
proxy_read_timeout 600; 
send_timeout 600;
 ... 
}

После правок релодим сервис:

service nginx reload

В нашем случае nginx будет ожидать 600 секунд ответа от Apache2 В большинстве случаев это является костылем, т.к. нужно править скрипт и выяснять почему скрипт некорректно работает, кроме случаев если заведомо известно, что выполняется тяжелый скрипт и на его обработку требуется значительное время (пример, выгрузка товаров в скриптах интернет-магазинов)

NGINX: 504 Gateway Time-out

В большом количестве случаев 504 Gateway Time-out возникает в связке NGINX + Apache, если Apache играющий роль бекэнда не успевает обработать большой запрос. Эту правку лучше всего считать неким костылем, т. к. корректней оптимизировать работу скриптов, но к примеру для выгрузки/загрузки товаров для какого-то скрипта интернет-магазина  — это может быть вполне нормально. Для устранения данной проблемы корректируем файл конфигурации /etc/nginx/nginx.conf и указываем следующие данные в локейшене server {..}:

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

Этими строками мы задаем сколько времени дается на обработку запроса. В указанном примере — 600 секунд, но при необходимости время может быть увеличено. В связке NGINX + PHP-FPM для решения подобной проблемы, в локейшене, который отдает запросы PHP-FPM добавляем следующее:

location ~ \.php$ {
....
....
fastcgi_read_timeout 600
}