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

Невозможно изменить тайм-аут NGINX

На моем сервере 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

ngx_http_proxy_module

Я решил !!

Проблема оказалась связана с uwsgi, пока я ставил

uwsgi_connect_timeout 75s;

на самом деле мне нужно было установить

uwsgi_read_timeout 600s;