Unabhängiger Vergleich · keine bezahlten Platzierungen
Startseite / Blog / Technik / Gunicorn und Nginx: Rollen für Django richtig verteilen

Gunicorn und Nginx: Rollen für Django richtig verteilen

Gunicorn leitet Django; Nginx stellt statische Dateien bereit und schützt den Socket. Das Vertauschen oder Zusammenführen von Rollen bedeutet, dass Python-Worker mit Favicons gesättigt werden.

Redaktion Hébergeurs.eu 4 Min. Aktualisiert 19 Juli 2026

Django in Produktion: Gunicorn startete mit siebzehn Mitarbeitern „per Internet-Formel“, Nginx, das alles – einschließlich „/static/“ – an Gunicorn weiterleitet. Die Gunicorn-CPU läuft während eines Image-Crawls auf 100 %. Fix: Nginx-Alias ​​/static/ und Worker auf fünf reduziert – API-Latenz wird durch drei geteilt.

Der Standard-Django-Stack in der Produktion sieht folgendermaßen aus:


Client → Nginx (TLS, Komprimierung, statische Dateien, Ratenbegrenzung) → Gunicorn (WSGI) → Django

Gunicorn ist kein öffentlicher Webserver – es ist ein WSGI-Prozessmanager. Nginx führt kein Python aus – es sollte niemals Django interpretieren.

Die Größe von Gunicorn anhand der Messung bestimmen, nicht allein anhand der Formel

Ausgangsformel für einen VPS mit zwei Kernen: „Arbeiter = (2 × Kerne) + 1“ → fünf Arbeiter.

Dann verfeinern Sie nach:

  • RAM: Erlauben Sie je nach Anwendung 100 bis 300 MB pro Django-Worker.
  • --timeout 30: Einen blockierten Worker töten – ein langer Bericht sollte über Celery und nicht über HTTP erfolgen.
  • --graceful-timeout: ausgerichtet auf proxy_read_timeout nginx.
  • --max-requests 1000 --max-requests-jitter 50: Arbeiter recyceln, um leichte Speicherverluste zu begrenzen.

„Bash gunicorn myproject.wsgi:application\ --bind unix:/run/gunicorn.sock \ --workers 5 \ --timeout 30 \ --access-logfile -


:::Hinweis

**Denken Sie daran.** Ein Worker, der bei einem synchronen Export einhundertzwanzig Sekunden lang blockiert ist, ist ein Worker weniger für den Rest des Datenverkehrs – kein Argument für eine Erhöhung auf fünfzig Worker.

:::



## Typische Nginx-Konfiguration



„Nginx

Standort /statisch/ {

    Alias /var/www/myproject/static/;

    läuft 30 Tage ab;

}

Standort /Medien/ {

    Alias /var/www/myproject/media/;

}

Standort / {

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

    Proxy_set_header Host $host;

    Proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    Proxy_set_header X-Forwarded-Proto $scheme;

}

Konfigurieren Sie „ALLOWED_HOSTS“ und „SECURE_PROXY_SSL_HEADER“ in Django, damit HTTPS hinter Nginx korrekt erkannt wird.

systemd, socket und nahtlose Bereitstellung

Eine „gunicorn.service“-Unit mit „User=www-data“ und „Restart=always“ sorgt für einen automatischen Neustart. Die Unix-Socket-Berechtigungen müssen Nginx den Zugriff ermöglichen.

Bei der Bereitstellung: „collectstatic“, dann Gunicorn neu laden (gnädiges „HUP“). Worker schließen aktuelle Anfragen ab, bevor sie neuen Code laden – kein abrupter Abbruch, wenn Timeouts abgestimmt sind.

Asynchrone Worker: Vorsicht

„gevent“ kann hilfreich sein, wenn die Profilerstellung erhebliche Netzwerkwartezeiten (externe API-Aufrufe) anzeigt. Dies ist nicht die Standardwahl für datenbankintensiven E-Commerce – die Synchronisierung mit einem gut dimensionierten Postgres-Verbindungspool bleibt vorhersehbarer.

Informationen zu Aufgaben mit langer Laufzeit finden Sie unter Celery und Warteschlangen.

Hosting- und Produktbeschränkungen

Ein VPS ist das Minimum für einen ernsthaften Django in der Produktion. PaaS (Railway, Clever Cloud) Zusammenfassung Gunicorn – Sie konfigurieren ein Procfile oder ein Äquivalent. Shared Python bleibt selten und ermöglicht im Allgemeinen keine Kontrolle der Anzahl der Worker.

Oben: Overloaded Gunicorn bietet oft das, was Nginx kostenlos geben würde

Überprüfen Sie Ihre Nginx-Protokolle: Wenn mehr als null Prozent der statischen oder Medienanfragen an den Gunicorn-Upstream gehen, korrigieren Sie die Aliase, bevor Sie Worker hinzufügen.

Entscheide dich und gehe ohne blinden Fleck voran

Um einen Django-Stack wieder auf eine gesunde Grundlage zu stellen:

  1. Konfigurieren Sie nginx so, dass „/static/“ und „/media/“ als Aliase bereitgestellt werden – Gunicorn sollte nur Dynamik verarbeiten.
  2. Größe der Worker basiert auf der Anzahl der Kerne und dem gemessenen RAM, nicht auf einer durch Kopieren und Einfügen eingefügten Formel.
  3. Zeitüberschreitungen angleichen zwischen Nginx und Gunicorn, um Unterbrechungen während der Verarbeitung zu vermeiden.
  4. Auslagerung von Exporten und Berichten, die länger als 30 Sekunden dauern, an Celery oder eine Warteschlange.
  5. Skript für ein ordnungsgemäßes Neuladen bei der Bereitstellung – Collectstatic, HUP, HTTP-Rauchtest.

Informationen zum Postgres-Verbindungspooling finden Sie unter Verbindungspooling. Um VPS-Hosts zu vergleichen, durchsuchen Sie unser Verzeichnis.

Häufig gestellte Fragen

Wie viele Gunicorn-Arbeiter?

Beginnen Sie mit (2 × Kerne) + 1 und passen Sie dann entsprechend dem RAM und den Messungen unter realer Last an.

Stellt Nginx statische Django-Dateien bereit?

Ja – Collectstatic in einem Ordner-Alias ​​Nginx. Gunicorn sollte kein CSS, JS oder Medien bereitstellen.

Socket Unix oder TCP?

Unix-Socket auf derselben Maschine; TCP-Localhost für Containerarchitekturen.

sync vs. gevent?

Standardsynchronisierung; gevent nur, wenn die Profilerstellung eine vorherrschende Netzwerkerwartung beweist.


Gunicorn leitet Django; Nginx erledigt den Rest – die beiden zu verwechseln bedeutet, Python für die Bereitstellung von PNGs zu bezahlen.

Europäische Hoster vergleichen

Filtern nach Compliance, Standort und Einsatzzweck — dann die Datenblätter öffnen, um den echten Umfang zu prüfen.

Verzeichnis durchsuchen
Blog

Weiterlesen

Alle Artikel →