На локальной машине разработки У меня обратный прокси 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