Я пытаюсь использовать 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;
}
}