Как предотвратить тайм-аут шлюза с FastCGI на Nginx - PullRequest
196 голосов
/ 18 февраля 2009

Я использую 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;
    }

Редактировать: что у меня не работает:)

Ответы [ 4 ]

241 голосов
/ 18 февраля 2009

Тайм-ауты прокси хорошо, для прокси, а не для FastCGI ...

Директивы, которые влияют на таймауты FastCGI: client_header_timeout, client_body_timeout и send_timeout.

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

НТН.

23 голосов
/ 11 декабря 2012

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

положить большой тайм-аут в единорога.

timeout 500

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

upstream foo_server {
        server 127.0.0.1:3000 fail_timeout=0;
}
1 голос
/ 09 декабря 2015

Если вы используете единорога.

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

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

  • Проверьте версию единорога. Может быть, вы недавно обновили его, и что-то сломалось.

0 голосов
/ 30 января 2017

В http разделе nginx (/etc/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;

В файле php в деле 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf) изменить:

request_terminate_timeout = 300

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

...