Comparativa independiente · sin rankings de pago
Inicio / Blog / Técnico / Gunicorn y Nginx: distribuyen correctamente roles para Django

Gunicorn y Nginx: distribuyen correctamente roles para Django

Gunicorn dirige Django; Nginx sirve archivos estáticos y protege el socket. Invertir o fusionar roles significa saturar a los trabajadores de Python con favicons.

Redacción Hébergeurs.eu 5 min Actualizado 19 jul. 2026

Django en producción: Gunicorn se lanzó con diecisiete trabajadores “por fórmula de Internet”, Nginx que representa todo, incluido /static/, a Gunicorn. La CPU Gunicorn aumenta al 100% durante el rastreo de imágenes. Solución: nginx alias /static/ y trabajadores reducidos a cinco: la latencia de API se divide por tres.

La pila estándar de Django en producción se ve así:


Cliente → Nginx (TLS, compresión, archivos estáticos, limitación de velocidad) → Gunicorn (WSGI) → Django

Gunicorn no es un servidor web público, es un administrador de procesos WSGI. Nginx no ejecuta Python; nunca debería interpretar Django.

Dimensionar Gunicorn con medida, no solo con fórmula

Fórmula inicial en un VPS de dos núcleos: trabajadores = (2 × núcleos) + 1 → cinco trabajadores.

Luego refine según:

  • RAM: permita de 100 a 300 MB por trabajador Django dependiendo de la aplicación.
  • --timeout 30: mata a un trabajador bloqueado; un informe largo debe pasar por Celery, no por HTTP.
  • --graceful-timeout: alineado con proxy_read_timeout nginx.
  • --max-requests 1000 --max-requests-jitter 50: recicla trabajadores para limitar las pérdidas leves de memoria.

gunicorn myproject.wsgi:aplicación\

  --bind unix:/run/gunicorn.sock \

  --trabajadores 5 \

  --tiempo de espera 30 \

  --archivo-de-registro-de-acceso-

Configuración típica de nginx


ubicación /estática/ {

    alias /var/www/miproyecto/static/;

    caduca en 30 días;

}

ubicación /medios/ {

    alias /var/www/miproyecto/media/;

}

ubicación / {

    proxy_pass http://unix:/run/gunicorn.sock;

    proxy_set_header Anfitrión $anfitrión;

    proxy_set_header X-Reenviado-Para $proxy_add_x_forwarded_for;

    proxy_set_header X-Forwarded-Proto $esquema;

}

Configure ALLOWED_HOSTS y SECURE_PROXY_SSL_HEADER en Django para que HTTPS detrás de nginx se reconozca correctamente.

systemd, socket e implementación perfecta

Una unidad gunicorn.service con User=www-data y Restart=always garantiza el reinicio automático. Los permisos del socket Unix deben permitir que nginx acceda a él.

En la implementación: collectstatic, luego recarga Gunicorn (elegante HUP). Los trabajadores completan las solicitudes actuales antes de cargar código nuevo; no hay terminaciones abruptas si los tiempos de espera están alineados.

Trabajadores asincrónicos: precaución

gevent puede ayudar si la creación de perfiles muestra una espera significativa en la red (llamadas API externas). Esta no es la opción predeterminada para el comercio electrónico con muchas bases de datos: la sincronización con un grupo de conexiones Postgres de buen tamaño sigue siendo más predecible.

Para tareas de larga duración, consulte Apio y colas.

Restricciones de alojamiento y producto

Un VPS es el mínimo para un Django serio en producción. Gunicorn abstracto PaaS (Railway, Clever Cloud): configura un Procfile o equivalente. Python compartido sigue siendo poco común y generalmente no permite controlar la cantidad de trabajadores.

La cima: Gunicorn sobrecargado a menudo sirve lo que Nginx daría gratis

Audite sus registros de nginx: si más del cero por ciento de las solicitudes estáticas o de medios van al flujo ascendente de Gunicorn, corrija los alias antes de agregar trabajadores.

Decide y avanza sin puntos ciegos

Para restablecer una pila de Django sobre una base saludable:

  1. Configure nginx para que sirva /static/ y /media/ como alias: Gunicorn solo debe manejar dinámicas.
  2. Tamaño de los trabajadores según la cantidad de núcleos y la RAM medida, no una fórmula copiada y pegada.
  3. Alinear tiempos de espera entre nginx y Gunicorn para evitar interrupciones durante el procesamiento.
  4. Subcontratar exportaciones e informes de más de treinta segundos a Celery o una cola.
  5. Script para una recarga elegante durante la implementación: recopilación estática, HUP y prueba de humo HTTP.

Para la agrupación de conexiones de Postgres, consulte Agrupación de conexiones. Para comparar hosts VPS, explore nuestro directorio.

Preguntas frecuentes

¿Cuántos trabajadores Gunicorn?

Comience con (2 × núcleos) + 1, luego ajuste según la RAM y las mediciones bajo carga real.

¿Nginx sirve archivos estáticos de Django?

Sí, recopila estática en una carpeta alias nginx. Gunicorn no debería servir CSS, JS o medios.

¿Socket Unix o TCP?

Socket Unix en la misma máquina; TCP localhost para arquitecturas en contenedores.

¿sincronización frente a gevent?

sincronización predeterminada; Esto ocurre sólo si la elaboración de perfiles demuestra una expectativa dominante en la red.


Gunicorn dirige Django; Nginx hace el resto: confundir a los dos es pagar a Python para que sirva archivos PNG.

Compara proveedores europeos

Filtra por cumplimiento, ubicación y caso de uso — luego abre las fichas para verificar el alcance real.

Explorar el directorio
Blog

Lecturas relacionadas

Todos los artículos →