У меня есть приложение Rails, которое подается с nginx/unicorn, у которого есть один конкретный запрос, который может занять 2-3 минуты, потому что он генерирует несколько PDF-файлов и добавляет их в zip-файл и используя send_data, чтобы позволить клиенту загружать сразу несколько отчетов.Nginx upstream рассчитан на длительный запрос единорога
Первоначально мои рабочие единорога были убиты после 30-х годов, поэтому я увеличил свой тайм-аут в файле unicorn.rb. Теперь запрос получает 504 ошибку после 60 секунд вместо 30 секунд. Поэтому мои рабочие-единороги убиваются, но nginx отключается.
Вот сообщение об ошибке в моем Nginx error_log:
upstream timed out (110: Connection timed out) while reading response header from upstream
Я попытался увеличение всех настроек времени ожидания Nginx, которые имеют смысл, но после того, как service nginx restart
запрос еще timeing вне.
Вот мой nginx.conf и сайты с поддержкой/по умолчанию
/***nginx.conf***/
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300s;
client_header_timeout 300s;
client_body_timeout 300s;
send_timeout 300s;
types_hash_max_size 2048;
}
/***sites-enabled/default***/
upstream app {
unix:[PATH]/unicorn.sock fail_timeout=120s;
}
server {
listen 80;
root [PATH];
server_name www.[URL].com [URL].com;
proxy_read_timeout 600s;
try_files $uri/index.html $uri @app;
access_log /var/log/nginx/APP_access.log combined;
error_log /var/log/nginx/APP_error.log;
location @app {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 75;
}
Может кто-нибудь сказать мне, почему Nginx еще таймаут после 60 секунд?
вы уверены, что вам больше не нужно увеличивать тайм-аут единорога - это сообщение об ошибке указывает на проблему с тайм-аутом «вверх по течению» – house9
действительно вы должны использовать фоновое задание для обработки вещей, которые занимают больше 30 секунд - вам может потребоваться задержка работы: https://github.com/collectiveidea/delayed_job – house9
@ house9, да, я забыл упомянуть об этом. Фоновые задания нужны, но это не в MVP. Когда тайм-аут единорога был проблемой, сообщение об ошибке было в журнале ошибок единорога, и он сказал что-то вроде «тайм-аута (31 с> 30 секунд)», теперь ошибка выше, и она находится в журналах ngoni. Также я установил тайм-аут единорога более 60 секунд. –