Încerc să folosesc Nginx ca server proxy între client și Gunicorn. Nginx, Gunicorn (Django) sunt containerele lui Docker. Problema este că nu pot dezactiva tamponarea în amonte când trimit fișiere mari de la client la aplicația Django. Timpul TTFB este destul de mic, astfel bara mea de progres (care folosește evenimentul xhr.upload.progress) devine 100% foarte rapidă (mai puțin de secundă). Apoi trebuie să aștept 30 de secunde până când fișierul va fi încărcat pe server. Iată setările mele. Te rog ajuta-ma. Am încercat multe configurații încercând să setez dimensiunea tamponului la zero etc., verificați multe răspunsuri pe StackOverflow, dar nimic nu ajută.
docker-compose.yaml
...
Servicii:
db:
imagine: postgres:12.4
volume:
- postgres_data:/var/lib/postgresql/data/
reporniți: întotdeauna
porturi:
- ${DB_PORT}:${DB_PORT}
env_file:
- ./.env
backend:
build: ./src/backend
volume:
- RUDZASV0021:/cod/storage/RUDZASV0021
- jurnal:/cod/jurnal
reporniți: întotdeauna
depinde de:
- db
env_file:
- ./.env
nginx:
construi:
context: .
dockerfile: ./src/frontend/Dockerfile
volume:
- ./docker-settings/default.conf:/etc/nginx/conf.d/default.conf:ro
reporniți: întotdeauna
porturi:
- 80:80
- 443:443
depinde de:
- backend
Backend Dockerfile
DIN python:3.8.7-slim
WORKDIR /cod
COPIE . .
RUN 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 Dockerfile
DE LA nginx:1.20.0
WORKDIR /frontend
COPY ./src/frontend/dist .
WORKDIR /cert
COPY ./cert/device.key .
COPIE ./cert/device.crt .
Nginx default.conf
în amonte hello_django {
server backend:8000 fail_timeout=0;
}
Server {
asculta 80;
returnează 301 https://$host$request_uri;
}
Server {
asculta 443;
ssl activat;
ssl_certificate /cert/device.crt;
ssl_certificate_key /cert/device.key;
client_max_body_size 2G;
keepalive_timeout 5;
access_log /frontend/nginx-access.log;
error_log /frontend/nginx-error.log;
Locație / {
root/frontend;
try_files $uri /index.html;
}
locație /api/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $schema;
proxy_set_header Gazdă $http_host;
proxy_buffering dezactivat;
proxy_request_buffering dezactivat;
proxy_redirect dezactivat;
proxy_pass http://hello_django;
}
}