He implementado Gunicorn (con matraz) detrás de Nginx (como servidor proxy). Uso 2 contenedores docker (Gunicorn, Nginx).
Comencé una prueba de carga de "5000 usuarios simultáneos", enviando solicitudes al servidor Nginx en el puerto 80 (usando Locust). después de unos segundos detuve la prueba de carga. Después de detener la prueba de carga, Nginx dejó de responder a las solicitudes (pero aún puedo enviar solicitudes a Gunicorn directamente en el puerto 8000).
No espero que Nginx responda a tantas solicitudes simultáneas mientras se ejecuta en mi sistema con 1 servidor Gunicorn, pero ¿por qué ya no responde a las solicitudes? Necesito reiniciar el contenedor de Nginx para que vuelva a estar disponible. La razón por la que agregué Nginx es porque observé el mismo comportamiento mientras realizaba pruebas de carga en Gunicorn directamente.
Esperaría que Nginx bloqueara o pusiera en cola las solicitudes, pero no que congelara/bloqueara las solicitudes para siempre.
¿Qué estoy haciendo mal? ¿Cuál es la configuración correcta para permitir muchas solicitudes simultáneas (usando 1 contenedor Nginx y 1 contenedor Gunicorn)?
Mi sistema: MacBook Pro 2.9 GHz 6-Core Intel Core i9 32 GB 2400 MHz DDR4
Configuración de gunicornio:
bind = '0.0.0.0:8000', workers = 8 (sync), loglevel = 'info', preload_app=trueConfiguración de Nginx:
worker_processes 8; user nobody nogroup; error_log /dev/stdout info; pid /var/run/nginx.pid; events { worker_connections 20000; # increase if you have lots of clients accept_mutex on; # set to 'on' if nginx worker_processes > 1 } http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log combined; sendfile on; server { # if no Host match, close the connection to prevent host spoofing listen 80 default_server; return 444; } server { listen 80; client_max_body_size 4G; # set the correct host(s) for your site server_name localhost; keepalive_timeout 5; # path for static files root /path/to/app/current/public; location / { # checks for static file, if not found proxy to app try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; # we don't want nginx trying to do something clever with # redirects, we set the Host: header above already. proxy_redirect off; proxy_pass http://flask-container:8000; } error_page 500 502 503 504 /500.html; location = /500.html { root /path/to/app/current/public; } } }Gracias de antemano.