6 Stimmen

nginx + FastCGI für Django-Anwendung - führen Sie zwei Webserver oder eine?

Ich bin im Begriff, eine Django-Anwendung auf einem Nginx-Webserver bereitzustellen, und möchte sicherstellen, dass ich das System korrekt aufbaue.

Es scheint eine allgemeine Weisheit zu sein, dass man, wenn man Django auf einem Apache-Server einsetzt, trotzdem einen nginx-Server vor die Anwendung setzen sollte, um statische Dateien zu bedienen, da nginx leistungsfähiger ist.

Wenn anstelle von Apache für den Django-Code, möchte ich Nginx + FastCGI verwenden, um die Django-Anwendung zu hosten, gibt es keinen Grund, eine zweite Nginx-Installation zu konfigurieren, um vor dem Nginx-Server zu sitzen, die dynamische Inhalte dient, um statische Inhalte sowie Umleitung auf den dynamischen Inhalt zu behandeln?

Insbesondere gibt es unterschiedliche Konfigurationsparameter für den statischen und dynamischen Inhalt, die mich wollen, um die Server getrennt zu halten, oder kann ich Host es alle in einer einzigen Nginx-Installation, mit einigen der URLs zugeordnet werden, um Django Inhalt, und der Rest zugeordnet werden, um statische Inhalte von der gleichen Nginx-Installation serviert?

Vielen Dank für Ihren Rat!

5voto

dwc Punkte 22998

Die meisten Konfigurationsdirektiven können innerhalb von Ortsblöcken stehen (d.h. sie sind nicht nur global) und es ist sehr üblich, dies in der Praxis zu tun. Sie sollten keine Probleme haben, dies mit nur 1 Instanz von nginx einzurichten.

Das Tolle daran ist, dass Sie es anfangs so einrichten und später Ihre Meinung ändern können, indem Sie den Standortblock an einen Backend-Server weiterleiten, ohne dass dies für die Außenwelt sichtbar ist.

Machen Sie es also jetzt auf einem Server, denn Sie wissen, dass Sie später einen Backend-Server oder ein Cluster einrichten können, wenn Sie das System erweitern müssen.

4voto

Jesper M Punkte 5216

Um Ihre Frage zu beantworten, wie man einen Nginx-Server vor einen anderen Nginx-Server setzt: Nein, dafür gibt es normalerweise keinen guten Grund. Dieser alte Ratschlag stammt von Apache, insbesondere als mod_python mit dem Apache prefork MPM verwendet wurde. In diesem Setup würde jede Instanz von Django als separater Prozess innerhalb eines mod_python / Apache Containers laufen, was eine Menge RAM verbrauchen würde. Die Idee war, das Serving statischer Dateien vom Apache fernzuhalten, indem man einen leichtgewichtigen, ereignisgesteuerten HTTP-Server wie nginx vor die schweren Apache-Prozesse stellte. Das spart RAM und erhöht die Leistung. Wenn ein leichtgewichtiger Server wie nginx für alle Anfragen verwendet wird, ist dies kein Problem.

nginx hat eine gute Handhabung des URL-Rewritings, schauen Sie sich das Rewrite-Modul an.

Aus Ihrer Frage geht nicht hervor, welche Last (Verbindungen/Sekunde) Sie erwarten, oder warum Sie überhaupt nginx verwenden möchten. Wenn es sich um einen Blog auf einem VPS-Server oder einer ähnlichen Einrichtung mit geringer Last handelt, dann sollten Sie Apache mit mod_wsgi im Daemon-Modus verwenden. Die Leistung und der RAM-Verbrauch kommen dem von FastCGI sehr nahe, und mod_wsgi ist seit kurzem die offiziell empfohlene Art, Django zu hosten, siehe http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/

Im Allgemeinen würde ich vorschlagen, wenn möglich Apache / mod_wsgi zu verwenden, da dies eine stabile und flexible Kombination ist. Seien Sie sicher, dass Sie nicht "voreilig optimieren", indem Sie nginx verwenden, wo Apache + mod_wsgi genau das Richtige wäre. Einen Überblick über die Leistung von mod_wsgi im Daemon-Modus finden Sie hier: http://code.google.com/p/modwsgi/wiki/PerformanceEstimates

nginx ist großartig, aber für eine Django-Lösung ist nginx IMHO eine bessere Lösung als Load Balancer für viele Apache-Instanzen oder ein separater Server für statische Dateien. Beide Einsatzszenarien sind nur bei großen Lasten sinnvoll.

2voto

sleepyjames Punkte 779

Ich würde sagen, proxy-ing django zu seinem eigenen Server nur wirklich kommt, wenn Ihr Rolling mit mod_python, dh: dienen statische mit nginx und proxy django zu einem Apache-Instanz läuft mod_python. Ich bin glücklich, django in lighttpd über fastcgi mit dem gleichen lighttpd dienen statische Inhalte zu laufen.

0voto

ramusus Punkte 6929

Ich bin mir sicher, dass es möglich ist, alle dynamischen und statischen Inhalte in einer Konfigurationsdatei mit einem Nginx-Server zu konfigurieren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X