Как предотвратить тайм-аут шлюза с помощью 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.

редактировать: учитывая то, что найдено на nginx wiki,send_timeout директивы отвечает за установку общего тайм-аута ответа (который был немного вводящим в заблуждение). Для FastCGI есть fastcgi_read_timeout влияющей на реакция процесса fastcgi ожидания.

HTH.


для тех, кто использует nginx с unicorn и rails, скорее всего, тайм-аут находится в вашем

поместите большой тайм-аут в unicorn.rb

timeout 500

Если вы все еще сталкиваетесь с проблемами, попробуйте иметь fail_timeout=0 в восходящем потоке в nginx и посмотреть, исправляет ли это вашу проблему. Это предназначено для отладки и может быть опасно в производственной среде.

upstream foo_server {
        server 127.0.0.1:3000 fail_timeout=0;
}

Если вы используете unicorn.

посмотреть top на ваш сервер. Unicorn, вероятно, использует 100% CPU прямо сейчас. Причин этой проблемы несколько.

  • вы должны проверить свои HTTP-запросы, некоторые из них могут быть очень жесткими.

  • проверьте версию unicorn. Может быть вы недавно обновили его, и что-то было разрушено.


на nginx'а (/и т. д./nginx/nginx в.conf) добавить или изменить:

keepalive_timeout 300s

на nginx'а (в/etc/nginx/сайты доступны/ваш-конфиг-файл.ком) добавить эти строки:

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.д/ВСП.conf), можно изменять:

request_terminate_timeout = 300

Я надеюсь помочь вам.