fragen stichworte

Nginx-Lack Nginx-Django?

Ich habe eine Django-App und möchte Varnish auf einem Server davor einrichten. In einem anderen Serverfault-Thread schlug jemand vor, Nginx vor Varnish zu stellen.

Soll ich Nginx auf dem Cache-Server vor Varnish platzieren? Wenn ja, sollte ich Nginx auf dem App-Server verwenden?

antworten

Es handelt sich insgesamt um 1 - 3 Frontend-Server, nicht um eine große Serverfarm mit Lastenausgleich zwischen den Ebenen.

Wenn Sie nginx vor Vanish platzieren, können Sie die HTTP-Komprimierung im laufenden Betrieb durchführen. Dies ist eine Best-Practice-Methode, auf die jedoch verzichtet werden kann. (Inhalte in Varnish werden häufig unkomprimiert gehalten, sodass ESI Includes funktionieren und Sie nicht mit mehreren zwischengespeicherten Versionen desselben Objekts arbeiten müssen, abhängig von Vary-Header/Browser-Übereinstimmung.)

In Bezug auf nginx auf dem App-Server - ist Apache mit mod_wsgi nicht die empfohlene und gebräuchlichste Methode, um neue Django-Installationen heutzutage bereitzustellen? Mir ist kein zwingender Grund bekannt, Nginx/fastcgi über Apache/mod_wsgi für Django zu verwenden. Sie sollten sich jedoch von einem Django-Experten beraten lassen.

In Bezug auf Lack mit attraktiven Lastausgleichsfunktionen, die Nginx nicht hat, sehe ich nicht, was sie sind? Lack hat einen zufälligen und Round-Robin-Ausgleich. nginx hat Round-Robin, Client-IP und konsistentes Hashing - ich sehe keinen signifikanten Vorteil für Varnish? Ist es VCL oder Varnishs anmutiges Config-Reload oder etwas anderes?

Für ein kleines 1-3-Server-Setup würde ich wahrscheinlich

tun

Varnish --> Apache/mod_wsgi/Django

oder vielleicht

Squid --> Apache/mod_wsgi/Django

und ignorieren Sie zur Vereinfachung die HTTP-Komprimierung, sofern die Bandbreite nicht teuer ist.

Update:

Graham Dumpleton hat unten einen wertvollen Kommentar geschrieben. Er erwähnt ein sehr häufig verwendetes Setup für ein Blog in einem VPS oder eine kleine Webfarm ohne Zwischenspeicherung:

nginx --> Apache/mod_wsgi/Django

Dies ist aus verschiedenen Gründen eine sehr gute Lösung:

  1. Einfache Einrichtung
  2. nginx, das mit hoher Geschwindigkeit und minimalem Overhead arbeitet, verwaltet statische Dateiservices und hält die Browserverbindung aufrecht.
  3. Django läuft in Graham Dumpletons hervorragendem mod_wsgi, der empfohlenen Plattform für Django.

Der Grund, warum ich das anfangs nicht erwähnt habe, ist, dass für OP scheinbar Varnish erforderlich war, eine sehr leistungsstarke Caching-Lösung. Die Kombination nginx/Apache/mod_wsgi kann nicht mit einer für Varnish passenden Leistung und Flexibilität für das Caching verwendet werden.

Sie können nginx ohne Lack verwenden, um den Inhalt zu proxy und zwischenzuspeichern.

Ich benutze erfolgreich Nginx, Varnish und Apache/mod_wsgi/Django. Ich habe mit der folgenden Konfiguration angefangen:

Nginx -> Apache/mod_wsgi/Django

Nachdem ich eine erhebliche Belastung für Apache festgestellt hatte, fügte ich Varnish hinzu:

Nginx -> Varnish -> Apache/mod_wsgi/Django

Ich benutze Nginx als eine Art "URL-Router". Django-Administrationsanforderungen werden direkt von Nginx an Apache gesendet. Clientanfragen werden von Nginx an Varnish gesendet, die die Anforderungen von Apache zwischenspeichert und außerdem "gestaffelte" Elemente aus dem Cache-Speicher bereitstellt, wenn die App-Server nicht verfügbar sind.

Mein Nginx-Server stellt auch bestimmten statischen Inhalt direkt zur Verfügung (z. B. Bilder, CSS und Javascript-Dateien).

Im Allgemeinen war die Leistung ausgezeichnet. Ich habe einige Vorbehalte bemerkt, die ich erwähnen sollte:

  1. Bei einem stark ausgelasteten Standort kann ein Neustart von Varnish dazu führen, dass die Last auf den App-Servern stark ansteigt. Daher ist es ratsam, den Neustart von Varnish auf ein Minimum zu beschränken. (Varnish scheint kein "reload" zu haben, wie Nginx/Apache, bei dem nur die VCL-Dateien neu gelesen werden). Umgekehrt hat das Neuladen einer Nginx-Konfiguration nur minimale Auswirkungen. Aus diesem Grund verwende ich die meisten URLs in Nginx.
  2. Lacke können leicht zwischen Nginx und Apache eingesetzt werden. Wenn Sie bemerken, dass Ihre App-Server stark ausgelastet sind, kann das Hinzufügen von Lack selbst mit der Standardkonfiguration wirklich einen Unterschied machen.
  3. Wenn Sie Varnish verwenden, müssen Sie auf jeden Fall darüber nachdenken, wie Sie die Cache-Ungültigmachung behandeln.
  4. Ich habe die Erfahrung gemacht, dass Lacke mit Back-ups etwas anmutiger behandelt werden als Nginx (wie Sie bereits gesagt haben).

Ich benutze Nginx-> Lack-> uWSGI-> Django