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 aufproxy_read_timeoutnginx.--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:
- Konfigurieren Sie nginx so, dass „/static/“ und „/media/“ als Aliase bereitgestellt werden – Gunicorn sollte nur Dynamik verarbeiten.
- 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.
- Zeitüberschreitungen angleichen zwischen Nginx und Gunicorn, um Unterbrechungen während der Verarbeitung zu vermeiden.
- Auslagerung von Exporten und Berichten, die länger als 30 Sekunden dauern, an Celery oder eine Warteschlange.
- 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.
