Рейтинг:1

Как отключить восходящую буферизацию Nginx + Docker + Gunicorn?

флаг ph

Я пытаюсь использовать Nginx в качестве прокси-сервера между клиентом и Gunicorn. Nginx, Gunicorn (Django) — контейнеры Docker. Проблема в том, что я не могу отключить буферизацию восходящего потока, когда отправляю большой файл с клиента в приложение Django. Время TTFB довольно мало, поэтому мой индикатор выполнения (который использует событие xhr.upload.progress) становится на 100% очень быстрым (менее секунды). Затем мне нужно подождать 30 секунд, пока файл будет загружен на сервер. Вот мои настройки. Пожалуйста помоги. Я пробовал много конфигураций, пытаясь установить размер буфера равным нулю и т. д., проверьте много ответов на StackOverflow, но ничего не помогает.

docker-compose.yaml

...
    Сервисы:
  дБ:
    изображение: postgres:12.4
    тома:
      - postgres_data:/var/lib/postgresql/data/
    перезапуск: всегда
    порты:
      - ${DB_PORT}:${DB_PORT}
    env_file:
      - ./.env

  серверная часть:
    сборка: ./src/бэкенд
    тома:
      - RUDZASV0021:/код/хранилище/RUDZASV0021
      - логи:/код/логи
    перезапуск: всегда
    зависит от:
      - дб
    env_file:
      - ./.env

  нгинкс:
    строить:
      контекст: .
      докерфайл: ./src/frontend/Dockerfile
    тома:
      - ./docker-settings/default.conf:/etc/nginx/conf.d/default.conf:ro
    перезапуск: всегда
    порты:
      - 80:80
      - 443:443
    зависит от:
      - бэкенд

Серверный файл Docker

ИЗ Python: 3.8.7-тонкий

РАБОЧИЙКАТАЛОГ /код
КОПИРОВАТЬ . .
ЗАПУСК pip install -r /code/requirements.txt
RUN apt-get update && apt-get install -y mc
CMD gunicorn entrypoints.wsgi:application --workers=4 --worker-class=gevent --timeout=90 --graceful-timeout=10 --bind 0.0.0.0:8000

Докерфайл Nginx

ОТ nginx: 1.20.0

РАБОЧИЙ КАТАЛОГ / интерфейс
КОПИРОВАТЬ ./src/frontend/расст.
РАБОЧИЙКАТАЛОГ /сертификат
КОПИРОВАТЬ ./cert/device.key .
КОПИРОВАТЬ ./cert/device.crt .

Nginx default.conf

вверх по течению hello_django {
    серверная часть: 8000 fail_timeout = 0;
}

сервер {
    слушать 80;
    вернуть 301 https://$host$request_uri;
}

сервер {

    слушать 443;

    SSL включен;
    ssl_certificate /cert/device.crt;
    ssl_certificate_key /cert/device.key;

    client_max_body_size 2G;
    keepalive_timeout 5;

    журнал доступа /frontend/nginx-access.log;
    журнал ошибок /frontend/nginx-error.log;

    место расположения / {
        корень/фронтенд;
        try_files $uri /index.html;
    }

    расположение /API/ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $ схема;
        proxy_set_header Хост $http_host;
        прокси_буферизация выключена;
        proxy_request_buffering выключен;
        прокси_перенаправление выключено;
        прокси_пасс http://hello_django;
    }

}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.