
Я получаю тайм-аут 504 на моем сервере Nginx:
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 в файле конфигурации, просто чтобы убедиться, что изменения других вещей в файле конфигурации были подхвачены, и, конечно же, изменение этого числа изменяет количество worker'ов, поэтому файл становится правильным файлом, и изменения подхватываются Nginx. Только не изменения тайм-аутов (или, может быть, всего раздела http?). Я также протестировал установку тайм-аутов на 30 с, но они все еще имеют тайм-аут в 1 минуту. Кроме того, я пробовал вводить эти настройки, sites-enabled/my_site
но у меня все еще те же результаты.
Редактировать2:
Насколько я могу судить, я устанавливаю значения в соответствии с документацией Nginx. uwsgi_connect_timeout
решение1
Я решил это!!
Проблема оказалась связана с uwsgi, в то время как я установил
uwsgi_connect_timeout 75s;
что мне на самом деле нужно было установить, так это
uwsgi_read_timeout 600s;