it-swarm.com.de

Verwenden Sie Node.js nur im Vergleich zu Node.js mit Apache / Nginx

In welchen Fällen sollte man es vorziehen, Node.js nur als Server in der realen Bereitstellung zu verwenden?

Wenn man nicht nur Node.js verwenden möchte, was spielt besser mit Node.js? Apache oder Nginx?

202
7cows

Es gibt mehrere gute Gründe, einen anderen Webserver vor Node.js zu platzieren:

  • Sie müssen sich keine Gedanken über Berechtigungen/setuid für den Node.js-Prozess machen. Normalerweise kann nur root eine Bindung zu Port 80 herstellen. Wenn Sie es Nginx/Apache überlassen, als Root zu beginnen, sich an Port 80 zu binden und dann seine Root-Rechte aufzugeben, bedeutet dies, dass sich Ihre Node App nicht darum kümmern muss.
  • Bereitstellen von statischen Dateien wie Bildern, CSS, JS und HTML. Node ist möglicherweise weniger effizient als die Verwendung eines geeigneten Webservers für statische Dateien (Node ist möglicherweise auch in bestimmten Szenarien schneller, aber dies ist wahrscheinlich nicht die Norm.) Zusätzlich zu Dateien, die effizienter bereitgestellt werden Sie müssen sich keine Gedanken darüber machen, wie Sie mit eTags oder Cache-Control-Headern umgehen würden, wenn Sie Dinge außerhalb von Node servieren. Einige Frameworks können dies für Sie erledigen, möchten jedoch sicher sein. Unabhängig davon, wahrscheinlich immer noch langsamer.
  • Wie Matt Sergeant in seiner Antwort erwähnt hat, können Sie leichter aussagekräftige Fehlerseiten anzeigen oder auf eine statische Site zurückgreifen, wenn Ihr Knotendienst abstürzt. Anderenfalls erhalten Benutzer möglicherweise nur eine Zeitüberschreitungsverbindung.
  • Das Ausführen eines anderen Webservers vor Node kann dazu beitragen, Sicherheitslücken und DoS-Angriffe gegen Node abzumildern. In der Praxis lautet CVE-2013-445 - verhindert durch Ausführen von Nginx vor Node .

Ich werde den zweiten Punkt einschränken, indem ich sage, dass Sie Ihre statischen Dateien wahrscheinlich über ein CDN oder hinter einem Caching-Server wie Varnish bereitstellen sollten. Wenn Sie dies tun, spielt es keine Rolle, ob der Ursprung Node oder Nginx oder Apache ist.

Vorsichtsmaßnahme für Nginx: Wenn Sie Websockets verwenden, sollten Sie eine aktuelle Version von Nginx (> = 1.3.13) verwenden, da diese gerade erst Unterstützung für das Upgrade einer Verbindung für die Verwendung von Websockets hinzugefügt hat.

189
pauljz

Um die Antwort von pauljz um einen weiteren Grund zu erweitern, verwende ich einen Front-End-Server, der beim Neustart des Back-End-Servers 502 Fehlerseiten ausliefert oder aus irgendeinem Grund abstürzt. Auf diese Weise erhalten Ihre Benutzer niemals den Fehler, dass keine Verbindung hergestellt werden kann.

63
Matt Sergeant

Ich bin der Überzeugung, dass die Verwendung von Node zum Bereitstellen statischer Dateien unter allen Umständen in Ordnung ist sofern Sie wissen, was Sie tun. Dies ist mit Sicherheit ein neues Paradigma für Verwenden Sie den Anwendungsserver, um statische Dateien bereitzustellen, da so viele (alle?) konkurrierende Technologien (PHP, Ruby, Python usw.) einen Webserver wie HTTPD oder Nginx vor den Anwendungsservern erfordern.

Jeder objektive Grund, warum ich jemals gegen das Liefern statischer Dateien mit Node) gelesen habe, dreht sich um die Idee, das zu verwenden, was Sie am besten wissen oder was als besser getestet/stabiler empfunden wird. Dies sind sehr gute Gründe praktisch gesehen, aber wenig rein technisch relevant.

Wenn Sie keine Funktion finden, die mit einem klassischen Webserver möglich ist, der mit Node (und ich bezweifle, dass Sie dies tun werden) nicht möglich ist, wählen Sie, was Sie am besten wissen oder mit was Sie lieber arbeiten möchten da jeder Ansatz in Ordnung ist.

Was Nginx vs Apache betrifft, so "spielen" sie mit Node=. Sie sollten sie ohne Rücksicht auf Node vergleichen.

25
user636044

Ein Extra: Es ist auch wichtig, wenn Sie einen Reverse-Proxy benötigen, um beispielsweise einen Websocket-Server auf demselben Port auszuführen, oder einige Techonlogies zu mischen (Antworten Sie mit NodeJS und einigen Anfragen mit PHP=) andere oder was auch immer)

0
Enrique