На моем сервере Nginx время ожидания 504: 504 Gateway Time-out
. Веб-сайт позволяет пользователям загружать пользовательские файлы данных. Сайт отлично работает в большинстве условий, и пользователи могут без проблем скачивать некоторые файлы. Проблема в том, что файлы данных создаются только по запросу. Поэтому, когда запрашиваются сложные данные, бэкэнду Python требуется больше минуты, чтобы сгенерировать файл и начать загрузку. Поскольку в течение минуты нет ответа, Nginx возвращает 504 Gateway Time-out
. Сами файлы представляют собой файлы CSV и не очень большие, поэтому загрузка выполняется быстро после того, как серверная часть сгенерировала файл, но мне нужен способ заставить Nginx ждать дольше.
Я ищу способ увеличить время ожидания Nginx с 1 минуты до 10 минут.
Пока я пробовал:
изменение nginx.conf
файл, чтобы включить следующие строки между http {}
подтяжки
uwsgi_connect_timeout 75s;
proxy_connect_timeout 600;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
Я также пробовал добавить timeout.conf
файл в /etc/nginx/conf.d/
как было предложено https://asdqwe.net/blog/solutions-504-gateway-timeout-nginx/:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
После внесения каждого изменения я перезапускал сервер, но тайм-аут все еще происходит через 1 минуту. это было дополнительно проверено запуском curl -o
на сервере, чтобы обойти любые проблемы с поставщиком услуг. На выходе получилось следующее.
$curl -o out-put-file.csv "./localhost/my/url"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 183 100 183 0 0 3 0 0:01:01 0:01:00 0:00:01 48
И эта ошибка записывается в error.log
2018/03/26 09:55:15 [error] 10105#10105: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 142.1.2.3, server: localhost, request: "GET /my/url", upstream: "uwsgi://unix:/tmp/my-applacation.sock", host: "142.1.2.3"
Когда я запускаю свое приложение без Nginx и запускаю то же самое curl -o
запрос занимает довольно много времени (до 8 минут в зависимости от запрашиваемых данных), но он завершается правильно без ошибок или тайм-аута.
Бег $ /usr/sbin/nginx -V 2>&1 | grep conf
показывает, что файл конфигурации расположен в --conf-path=/etc/nginx/nginx.conf
Версия Nginx: nginx / 1.12.2 и nginx / 1.4.6 (Ubuntu)
Версия ОС: Ubuntu 16.04.1 и Ubuntu 14.04.5 LTS
Редактировать:
Я протестировал изменение количества worker_processes в файле конфигурации, чтобы убедиться, что изменения в других вещах в файле конфигурации были подобраны, и, конечно же, изменение этого числа изменяет количество рабочих, поэтому файл является правильным файлом и изменяется на быть подхваченным Nginx. Просто не меняет таймауты (или, может быть, весь раздел http?). Я также тестировал установку тайм-аутов на 30 секунд, но они все еще превышают 1 минуту. Кроме того, попробовал поставить эти настройки в sites-enabled/my_site
но у меня все еще те же результаты.
Edit2:
Насколько я могу судить, я устанавливаю значения в соответствии с документацией Nginx. uwsgi_connect_timeout
Я решил !!
Проблема оказалась связана с uwsgi, пока я ставил
uwsgi_connect_timeout 75s;
на самом деле мне нужно было установить
uwsgi_read_timeout 600s;