Назад | Перейти на главную страницу

Как отключить тайм-аут для nginx?

На локальной машине разработки У меня обратный прокси nginx вот так:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

Тем не менее, если я отлаживаю свое приложение, ответ может быть отложен на бесконечное время, но через 30 секунд я получаю:

504 Gateway Time-out

как ответ.

Как отключить тайм-аут и заставить обратный прокси-сервер вечно ждать ответа? И мне нравится, чтобы настройка была глобальной, поэтому мне не нужно устанавливать ее для каждого прокси.

Отключить его может быть невозможно, но возможным обходным путем является увеличение времени выполнения. На учебный сайт nginx, это было написано:

Если вы хотите увеличить лимит времени для всех сайтов на своем сервере, вы можете отредактировать основной nginx.conf файл:

vim /etc/nginx/nginx.conf

Добавить в раздел http {..}

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

и перезагрузите конфигурацию nginx:

sudo service nginx reload

Я использовал довольно большое значение, которое вряд ли произойдет, т.е. 999999 или используя единицы времени, до одного дня через 1d.

Помните, что установка значения на 0 немедленно вызовет ошибку тайм-аута шлюза.

Если вы используете AWS и Load Balancer, вам следует изменить время ожидания простоя. Я думаю, что по умолчанию 60 секунд

Можно увеличить таймаут для nginx, чтобы добавить к ответу @ k0pernikus, в блок местоположения можно добавить следующее:

        location /xyz {
         proxy_read_timeout 1800;
         proxy_connect_timeout 1800;
         proxy_send_timeout 1800;
         send_timeout 1800;
        }

Здесь 1800 в секундах.

После изменения конфигурации проверьте синтаксис с помощью:

nginx -t -c /some/path/nginx.conf

Затем перезагрузите nginx с помощью:

nginx -s reload

Я боролся с ошибкой тайм-аута nginx 502 и не мог решить проблему. Однако ошибка тайм-аута была вызвана пулеметом. Так что вам также может потребоваться проверить настройки fastcgi.

Для Gunicorn это:

gunicorn wsgi:application --timeout 300