Es gibt viele Tutorials zum Konfigurieren von nginx für die Zusammenarbeit mit uWGSI, wenn ich eine Django-Anwendung bereitstellen möchte.
Aber warum brauche ich Nginx in diesem Kit? uWSGI selbst kann WSGI-Python-Anwendungen bedienen, statische Dateien und SSL. Was kann nginx, was uWSGI nicht kann?
Antworten:
Das tust du nicht.
Das ist jedenfalls die einfache Antwort - du brauchst es nicht. uWSGI ist selbst ein fähiger Server.
Andere Server wie nginx gibt es jedoch schon länger und sie sind (wahrscheinlich) sicherer und verfügen über zusätzliche Funktionen, die von uWSGI nicht unterstützt werden, z. B. einen verbesserten Umgang mit statischen Ressourcen (über eine beliebige Kombination von Expires oder E-Tag) Header, GZIP-Komprimierung, vorkomprimiertes GZIP usw.), die die Server- und Netzwerklast erheblich reduzieren können; Darüber hinaus kann ein Server wie nginx vor Ihrer Django-Anwendung auch das Zwischenspeichern Ihres dynamischen Inhalts implementieren, wodurch die Serverauslastung weiter verringert und sogar die Verwendung eines CDN erleichtert wird (was normalerweise bei dynamischem Inhalt nicht gut funktioniert) ). Sie könnten sogar noch weiter gehen und nginx auf einem vollständig separaten Server installieren und Anforderungen für dynamischen Inhalt an einen Cluster von Anwendungsservern mit Lastenausgleich umkehren, während Sie den statischen Inhalt selbst verarbeiten.
Zum Beispiel ist mein Blog (während es WordPress ist, es hat Nginx davor) so eingestellt, dass Posts für 24 Stunden und Indexseiten für 5 Minuten zwischengespeichert werden. Obwohl ich nicht genug Verkehr sehe, um die meiste Zeit wirklich von Bedeutung zu sein, hilft es meinem winzigen VPS, die gelegentlichen Anstiege zu überstehen, die es sonst niederschlagen könnten - wie den großen Verkehrsanstieg, wenn einer meiner Artikel gepickt wird von einem Twitterer mit vielen Tausenden von Followern, von denen viele es ihren Tausenden von Followern erneut getwittert haben.
Wenn ich einen "nackten" uWSGI-Server betrieben hätte (und davon ausgegangen wäre, dass es sich um eine Django-Site und nicht um WordPress handelte), wäre es vielleicht ganz gut dagegen angekommen - oder es wäre abgestürzt und hätte mich vermisste Besucher gekostet . Nginx davor zu haben, um mit dieser Last fertig zu werden, kann wirklich helfen.
Abgesehen davon, wenn Sie nur eine kleine Site betreiben, auf der nicht viel Verkehr herrscht, brauchen Sie weder Nginx noch etwas anderes. Verwenden Sie uWSGI einfach für sich, wenn Sie dies möchten. Auf der anderen Seite, wenn Sie eine Menge Verkehr sehen werden ... na ja, Sie noch vielleicht uwsgi wollen, aber Sie sollten zumindest etwas vor ihm betrachten mit der Last zu helfen. Eigentlich sollten Sie mit Ihrer fertigen Site verschiedene Konfigurationen testen, um zu bestimmen, was für Sie unter Ihrer erwarteten Last am besten funktioniert, und was auch immer das sein mag.
quelle
IMO, wenn Sie Ihre Website in das Internet anstatt in Lab stellen, werden Sie möglicherweise den Unterschied bemerken.
Stellen Sie sich einen Benutzer aus einem anderen Land mit niedriger Netzwerkgeschwindigkeit vor, und öffnen Sie den Webbrowser, um auf Ihre Website zuzugreifen. uWSGI behandelt diese HTTP-Verbindung in einem Thread. Dieser Thread kann aufgrund der geringen Netzwerkgeschwindigkeit ziemlich lange auf eine vollständige HTTP-Anforderung warten. Stellen Sie sich vor, dass 100 Benutzer so langsam sind, wenn Ihre Thread-Pool-Größe 100 beträgt. Was passiert dann? Kein inaktiver Thread für andere HTTP-Anforderungen.
Bei Nginx sieht es ganz anders aus. Nginx ist in 'Reactor Pattern' entworfen. Sie könnten 'Reactor Pattern' googeln, um zu sehen, wie es funktioniert. Kurz gesagt, eine langsame Verbindung wirkt sich nicht auf die Verarbeitung anderer HTTP-Anforderungen aus.
quelle