@stvoid

Приложение падает 502?

В приложении на фласк выполняется GET запрос в результате которого отдается .xlsx файл.
В определенных ситуациях он может очень большим, поэтому время обработки запроса занимает много времени.
В итоге приложение падает, NGINX выдает 502 ошибку (приложение на 5000 порту).
Подскажи что можно сделать с этим?

PS. Гуглил про настройки размера буфера или времени ответа, но либо не туда вписывал, либо не помогло
PSS. Есть альтернативный вариант высылать пользователям файл на почту, но это не так удобно

Конфиг NGINX (VPS ubuntu 16)
#user  nobody;
worker_processes  auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  HOST.tk;
		client_max_body_size 100m;

		
		location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:5000;}

    }
	server {
			listen       80;
			server_name  stats.HOST.tk;
			client_max_body_size 100m;
			
			location / {
			proxy_set_header   X-Real-IP $remote_addr;
			proxy_set_header   Host      $http_host;
			proxy_pass         http://127.0.0.1:3000;}
	}

}

fr
  • Вопрос задан
  • 150 просмотров
Решения вопроса 2
kotomyava
@kotomyava
Системный администратор
Вероятнее всего, 502 у вас потому, что очень долго занят ваш процесс и не принимает в это время подключений.
Надо либо менять логику работы, либо запускать много процессов, и распределять между ними запросы.

Если бы проблема была в таймауте при обработке, была бы 504 ошибка. Если в размере данных принимаемых от клиента(за это отвечает client_max_body_size), то 413.
Ответ написан
@grinat
Nginx не получает ответа и закрывает скрипт, поскольку срабатывает read_timeout. Решение это либо чтобы фласк слал данные без буферизации, либо хотя бы писал в хедеры что-то регулярно, а затем отправлял файл, либо увеличить таймаут: https://nginx.org/ru/docs/http/ngx_http_proxy_modu...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы