Подтвердить что ты не робот

Как предотвратить время ожидания шлюза с помощью FastCGI на Nginx

Я запускаю Django, FastCGI и Nginx. Я создаю api, в котором кто-то может отправлять некоторые данные через XML, которые я обработаю, а затем возвращать некоторые коды состояния для каждого отправленного node.

Проблема заключается в том, что Nginx выкинет 504 Gateway Time-out, если я займу слишком много времени на обработку 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;
    }

Изменить: что у меня нет:)

4b9b3361

Ответ 1

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

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

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

НТН.

Ответ 2

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

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

timeout 500

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

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

Ответ 3

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

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

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

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

Ответ 4

В разделе 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

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