1139 Stimmen

Node.js + Nginx - Was nun?

Ich habe Node.js und Nginx auf meinem Server eingerichtet. Jetzt möchte ich es verwenden, aber, bevor ich anfange, gibt es 2 Fragen:

  1. Wie sollten sie zusammenarbeiten? Wie soll ich mit den Anfragen umgehen?
  2. Es gibt 2 Konzepte für einen Node.js-Server, welches ist besser:

    a. Erstellen Sie einen separaten HTTP-Server für jede Website, die ihn benötigt. Laden Sie dann den gesamten JavaScript-Code am Anfang des Programms, so dass der Code einmal interpretiert wird.

    b. Erstellen Sie einen einzigen Node.js-Server, der alle Node.js-Anfragen bearbeitet. Dieser liest die angeforderten Dateien und wertet deren Inhalt aus. Die Dateien werden also bei jeder Anfrage interpretiert, aber die Serverlogik ist viel einfacher.

Es ist mir nicht klar, wie man Node.js richtig einsetzt.

10voto

svnm Punkte 19899

Ich habe ein Repository in Github erstellt, das Sie klonen können, vagrant-node-nginx-boilerplate

grundsätzlich die node.js-Anwendung unter /var/www/nodeapp es

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(4570, '127.0.0.1');

console.log('Node Server running at 127.0.0.1:4570/');

und die nginx-Konfiguration unter /etc/nginx/sites-available/ es

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/nodeapp;
        index index.html index.htm;

        server_name localhost;

        location / {
          proxy_pass http://127.0.0.1:4570;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection 'upgrade';
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
}

9voto

Hugo Mota Punkte 10512

Die Beantwortung Ihrer Frage 2:

Ich würde die Option b Einfach, weil es viel weniger Ressourcen verbraucht. Mit Option 'a' wird jeder Client dazu führen, dass der Server eine Menge Speicher verbraucht, indem er alle benötigten Dateien lädt (auch wenn ich php mag, ist das eines der Probleme damit). Mit Option 'b' können Sie Ihre Bibliotheken (wiederverwendbarer Code) laden und sie auf alle Client-Anfragen verteilen.

Wenn Sie mehrere Kerne haben, sollten Sie node.js so einstellen, dass alle Kerne genutzt werden.

7voto

Vkreddy Punkte 1448

Nginx kann als Reverse-Proxy-Server fungieren, der wie ein Projektmanager arbeitet. Wenn er eine Anfrage erhält, analysiert er sie und leitet die Anfrage an vorgelagerte Stellen (Projektmitglieder) weiter oder bearbeitet sie selbst. Nginx hat zwei Möglichkeiten, eine Anfrage zu bearbeiten, je nachdem, wie er konfiguriert ist.

  • das Ersuchen zustellen

  • Weiterleitung der Anfrage an einen anderen Server

     server{
      server_name mydomain.example sub.mydomain.example;
    
      location /{
       proxy_pass http://127.0.0.1:8000;
       proxy_set_header Host $host;
       proxy_pass_request_headers on;
      }
    
      location /static/{
        alias /my/static/files/path;
      }
    }

Server die Anfrage

Bei dieser Konfiguration wird die URL der Anfrage mydomain.example/static/myjs.js gibt es die myjs.js Datei in /my/static/files/path Ordner. Wenn Sie Nginx so konfigurieren, dass es statischer Dateien konfigurieren, bearbeitet es die Anfrage selbst.

Weiterleitung der Anfrage an einen anderen Server

Wenn die URL der Anfrage mydomain.example/dothis Nginx leitet die Anfrage an http://127.0.0.1:8000 . Der Dienst, der auf dem Port localhost 8000 Port läuft, empfängt die Anfrage und gibt die Antwort an Nginx zurück, und Nginx gibt die Antwort an den Client zurück.

Wenn Sie den node.js-Server auf dem Port 8000 laufen lassen, leitet Nginx die Anfrage an node.js weiter. Schreiben Sie node.js-Logik und bearbeiten Sie die Anfrage. Das war's, Ihr node.js-Server läuft hinter dem Nginx-Server.

Wenn Sie andere Dienste als Nodejs ausführen möchten, führen Sie einfach einen anderen Dienst wie Django, Flask, PHP auf anderen Ports aus und konfigurieren Sie ihn in Nginx.

6voto

Matej Punkte 9082

Sie könnten auch node.js verwenden, um statische Dateien in einem Verzeichnis zu erzeugen, das von nginx bedient wird. Natürlich könnten einige dynamische Teile Ihrer Website von node und einige von nginx (statisch) bereitgestellt werden.

Wenn einige von ihnen von nginx bedient werden, erhöht sich Ihre Leistung.

6voto

Renjith Thankachan Punkte 3886

Wir können eine Nodejs-Anwendung leicht einrichten, indem wir Nginx als Reverse-Proxy verwenden. Die folgende Konfiguration geht davon aus, dass die NodeJS-Anwendung auf 127.0.0.1:8080 läuft,

  server{
     server_name domain.example sub.domain.example; # multiple domains

     location /{
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host;
      proxy_pass_request_headers on;
     }

     location /static/{
       alias /absolute/path/to/static/files; # nginx will handle js/css
     }
   }

im obigen Setup wird Ihre Nodejs-App,

  • erhalten. HTTP_HOST Header, auf den Sie eine domänenspezifische Logik anwenden können, um die Antwort zu liefern. '

  • Ihre Anwendung muss von einem Prozessmanager verwaltet werden wie pm2 oder Supervisor für die Handhabung von Situationen/Wiederverwendung von Steckdosen oder Ressourcen usw.

  • Einrichten eines Fehlerberichterstattungsdienstes für Produktionsfehler wie Wache o Überrollbügel

HINWEIS: Sie können eine Logik für die Übergabe von domänenspezifischen Anfragerouten einrichten, eine Middleware für expressjs-Anwendung

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