wake-up-neo.net

Apache oder Nginx für Django-Anwendungen?

Ich möchte eine Django-Webanwendung bereitstellen und muss daher einen Webserver auswählen, der die Python-Dateien bereitstellt.

Ich sollte erwähnen, dass sich meine Produktionsstätte auf einem einzigen Server befindet, auf dem die Datenbank und der Webserver gehostet werden. Als Momentum möchte ich die Datenbank auf dedizierte Server usw. verschieben.

Hier sind meine Fragen:

  1. Soll ich einen oder zwei Webserver verwenden? Der Kontext dieser Frage ist, dass viele Leute empfehlen, NginX für statische Mediendateien und Apache für Python zu verwenden, was die folgenden Fragen hervorruft:
    1. Warum können wir nicht nur einen Server verwenden? Ich verstehe, dass Apache zuweilen ein Biest sein kann. Daher vermute ich, dass Leute NginX verwenden, um sowohl statische Mediendateien als auch Python-Dateien zu liefern.
    2. Wenn Sie einen Server verwenden, was ist besser, Apache oder NginX. Ich habe Erfahrung in Apache, aber ich habe nur gute Dinge über NginX gehört.
  2. Welche Vorteile bietet die Verwendung von FastCGI im Gegensatz zu mod_wsgi?

Vielen Dank im Voraus

40
Barry Steyn

Soll ich einen oder zwei Webserver verwenden? Der Kontext dieser Frage ist, dass viele Leute empfehlen, NginX zum Bereitstellen statischer Mediendateien und Apache zum Bereitstellen von Python zu verwenden, was die folgenden Fragen aufwirft: Warum können wir nicht nur einen Server verwenden? Ich verstehe, dass Apache manchmal eine Bestie sein kann, daher würde ich vermuten, dass NginX sowohl für statische Mediendateien als auch für python files verwendet wird.

Wenn Sie derzeit keine anderen Sites haben, die bereits auf die eine oder andere Weise konfiguriert sind, oder bestimmte Funktionen benötigen, die sich zwischen den verschiedenen Servern gegenseitig ausschließen, sehe ich keinen Grund für die Verwendung mehrerer Server. Dies fügt nur unnötige Komplexität und Konfiguration hinzu.

Wenn Sie einen Server verwenden, was ist besser, Apache oder NginX. Ich habe Erfahrung mit Apache, aber ich habe nur gute Dinge über NginX gehört.

Wie bei allen "Was ist besser" -Fragen ist dies normalerweise eine Frage der Präferenz. Und um eine bestimmte Antwort zu erhalten, müssen Sie wahrscheinlich spezifischere Fragen stellen.

Wenn Sie bereits Erfahrung mit einem bestimmten Server haben und nur schnell zum Laufen kommen möchten, würde ich vorschlagen, mit dem zu arbeiten, was Sie vorerst bereits kennen. Sie können später jederzeit zu einem anderen Webserver wechseln. Andererseits ist es eine gute Gelegenheit, sich über die Alternativen zu informieren.


tl; dr: Ich würde mich für das entscheiden, was einfacher zu konfigurieren und zu verwalten ist. Persönlich würde ich mich für einen Nginx und ein Gunicorn entscheiden, hauptsächlich, weil es einfach ist und es viele Ressourcen gibt, wenn Sie stecken bleiben sollten.

Ich würde mir nicht allzu viele Sorgen um die Leistung machen, bis du eigentlich musst. Alle Staple-Webserver sind erprobt und getestet, sodass es hauptsächlich auf die Anforderungen der Anwendung und die tatsächliche Last ankommt, die auf jeden Fall überwacht, modelliert und getestet werden müssen, um eine Feinabstimmung zu erzielen.

Was sind die Vorteile von FastCGI gegenüber mod_wsgi?

nterschiede und Verwendungszwecke zwischen WSGI, CGI, FastCGI und mod_python in Bezug auf Python?


zu lesende Artikel (einige alte, andere neue);

9
kalvatn

Ich bin nicht sicher, wer Ihnen empfiehlt, sowohl Nginx als auch Apache zu verwenden, aber das ist eine schreckliche Idee. Was auch immer Sie wählen, entweder fungiert es einfach als Reverse-Proxy, der nur statische Ressourcen bereitstellt und alles andere an einen Unterprozess wie uwsgi übergibt.

Ich bevorzuge Nginx, weil es leicht und extrem schnell ist. Apache can kann genauso gut sein, erfordert jedoch das Erstellen von Quellen und das genaue Wissen, welche Konfiguration für Nginx verwendet werden muss. Apache hat jedoch mehr Funktionen und ist etwas einfacher zu handhaben. Es liegt wirklich an Ihnen und den Bedürfnissen Ihrer Anwendung.

Was auch immer Sie wählen, Sie benötigen nur one - nicht beides.

2
Chris Pratt

Frage 1) Sie können nur einen Server verwenden, aber für die Bereitstellung statischer Medien ist eine Lösung wie lighttpd oder nginx viel schneller. Ich würde bei Apache bleiben, wenn Sie wirklich nur einen Server verwenden möchten, er hat alle Flexibilität, die Sie benötigen, und es ist der häufigste Webserver.

Frage 2) Abhängig von Ihrem Zweck. Informationen finden Sie hier: Bereitstellen von Django (fastcgi, Apache mod_wsgi, uwsgi, gunicorn)

2
marue

Ich denke, die beste Wahl ist virtualenv, uwsgi und nginx ... Ich habe alle Server gewechselt und bin mit der Leistung wirklich zufrieden.

Hier finden Sie eine gute Anleitung zum Einrichten Ihres Webservers http://senya.pl/2011/03/sexy-nginx-uwsgi-stack-for-Django-with-virtualenv/

2
nicowernli

Ich habe versucht, dem vorgeschlagenen Link von Nicowernli zu folgen, aber senya.pl war zu diesem Zeitpunkt inaktiv ... Das scheint eine gute Alternative zu sein .... Ich versuche es, lesen Sie einfach die ersten beiden Kapitel, aber es scheint sehr komplett und wirklich Schritt für Schritt:

http://www.abidibo.net/blog/2012/04/30/deploy-Django-applikationen-nginx-uwsgi-virtualenv-south-git-and-fabric-part-1/

0
michel.iamit
  1. Je weniger desto besser.
  2. Die beste Möglichkeit, eine Django-Anwendung über Nginx bereitzustellen, ist die Verwendung von uwsgi . Es ist reines WSGI und wird von der neuen Version Nginx unterstützt.
0
risent

Ich habe gunicorn + eventlet als Python-Server und nginx als Reverse-Proxy mit großem Erfolg verwendet. Vor kurzem bin ich zu uWSGI gewechselt und es scheint eine ebenso gute Lösung zu sein, wenn nicht besser. Ich habe Apache und Django noch nicht ausprobiert, obwohl ich vor der Verwendung von Django ein Apache-Benutzer war. Hier ist ein guter Bericht darüber, wie alles fertig gestellt wird: http://radtek.ca/blog/Django-production-deployment-via-nginx-and-gunicorn-and-virtualenv/

0
radtek