Как предотвратить тайм-аут шлюза с помощью FastCGI на Nginx
Я запускаю Django, FastCGI и Nginx. Я создаю своего рода api, где кто-то может отправлять некоторые данные через XML, которые я буду обрабатывать, а затем возвращать некоторые коды состояния для каждого узла, который был отправлен.
проблема в том, что Nginx будет выбрасывать тайм-аут шлюза 504, если я слишком долго обрабатываю XML-я думаю, что дольше, чем 60 секунд.
поэтому я хотел бы настроить Nginx так, что если какие-либо запросы, соответствующие местоположению / api, не будут тайм-аут для 120 считанные секунды. Какая настройка позволит это сделать.
то, что у меня есть до сих пор:
# Handles all api calls
location ^~ /api/ {
proxy_read_timeout 120;
proxy_connect_timeout 120;
fastcgi_pass 127.0.0.1:8080;
}
Edit: то, что у меня не работает :)
4 ответов:
Прокси, таймауты хорошо, для прокси, а не для FastCGI...
директивы, которые влияют на тайм-ауты FastCGI являются
client_header_timeout,client_body_timeoutиsend_timeout.Edit: учитывая то, что найдено на nginx wiki,send_timeout директивы отвечает за установку общего таймаута ответа (который был немного вводящим в заблуждение). Для FastCGI есть
fastcgi_read_timeoutвлияющей на процесс ответ FastCGI-сервера тайм-аут.НТН.
для тех, кто использует nginx с unicorn и rails, скорее всего, тайм-аут находится в вашем
unicorn.rbfileположите большой тайм-аут в единорога.РБ
timeout 500Если вы все еще сталкиваетесь с проблемами, попробуйте иметь fail_timeout=0 в вашем восходящем потоке в nginx и посмотреть, исправит ли это вашу проблему. Это делается в целях отладки и может быть опасно в рабочей среде.
upstream foo_server { server 127.0.0.1:3000 fail_timeout=0; }
Если вы используете единорога.
посмотреть
topна ваш сервер. Единорог, вероятно, использует 100% процессора прямо сейчас. Существует несколько причин этой проблемы.
вы должны проверить свои HTTP-запросы, некоторые из них могут быть очень жесткими.
проверьте версию единорога. Может быть вы недавно обновили его, и что-то было разрушено.
на nginx'а (/и т. д./nginx/nginx в.conf) добавить или изменить:
keepalive_timeout 300sна
serverраздел nginx (/etc/nginx/sites-available / your-config-file.com) добавьте следующие строки:client_max_body_size 50M; fastcgi_buffers 8 1600k; fastcgi_buffer_size 3200k; fastcgi_connect_timeout 300s; fastcgi_send_timeout 300s; fastcgi_read_timeout 300s;на в случае 127.0.0.1:9000 (в/etc/php в/7.X/fpm / pool.d / www.conf), можно изменять:
request_terminate_timeout = 300Я надеюсь помочь вам.
Comments