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?
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
tunVarnish --> 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:
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:
Ich benutze Nginx-> Lack-> uWSGI-> Django