Nginx arbeitet als Front-End-Server, der in diesem Fall die Anforderungen an einen node.js-Server weiterleitet. Daher müssen Sie eine Nginx-Konfigurationsdatei für den Knoten einrichten.
Folgendes habe ich in meiner Ubuntu-Box getan:
Erstellen Sie die Datei yourdomain.com
unter /etc/nginx/sites-available/
:
vim /etc/nginx/sites-available/yourdomain.com
Darin sollten Sie etwas haben wie:
# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
# the nginx server instance
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
access_log /var/log/nginx/yourdomain.com.log;
# pass the request to the node.js server with the correct headers
# and much more can be added, see nginx config options
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://app_yourdomain/;
proxy_redirect off;
}
}
Wenn Sie möchten, dass nginx (> = 1.3.13) auch Websocket-Anforderungen verarbeitet, fügen Sie die folgenden Zeilen in den location /
Abschnitt ein:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Sobald Sie dieses Setup haben, müssen Sie die in der obigen Konfigurationsdatei definierte Site aktivieren:
cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com
Erstellen Sie Ihre Knotenserver-App unter /var/www/yourdomain/app.js
und führen Sie sie unter auslocalhost:3000
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
Test auf Syntaxfehler:
nginx -t
Starten Sie nginx neu:
sudo /etc/init.d/nginx restart
Zuletzt starten Sie den Knotenserver:
cd /var/www/yourdomain/ && node app.js
Jetzt sollten Sie "Hello World" auf yourdomain.com sehen
Ein letzter Hinweis zum Starten des Knotenservers: Sie sollten eine Art Überwachungssystem für den Knoten-Daemon verwenden. Es gibt ein fantastisches Tutorial zu Node mit Upstart und Monit .
location / { proxy_pass http://127.0.0.1:3000; }
? Warum brauchst du das ganzeupstream
Konfigurationsbit?sites-enabled
undsites-available
Verzeichnissen darin enthalten ist/etc/nginx
. Wenn Ihre Version ohne diese beiden Verzeichnisse geliefert wurde, verfügt sie wahrscheinlichconf.d
stattdessen über ein einziges Verzeichnis. In diesem Fall hätte das Befolgen dieser Anweisungen keine Auswirkung, es sei denn, Sie ändern dieinclude
Anweisung in der Datei songinx.conf
, dass siesites-enabled
anstelle der Standardeinstellung verweistconf.d
. Hoffe das macht Sinn. Es sollte selbsterklärend werden, sobald Sie die besagteinclude
Aussage darin sehennginx.conf
.Sie können mit nginx auch mehrere Domänen einrichten und an mehrere Prozesse von node.js weiterleiten.
Zum Beispiel, um diese zu erreichen:
Diese Ports (4000 und 5000) sollten verwendet werden, um die App-Anforderungen in Ihrem App-Code abzuhören.
/ etc / nginx / sites-enabled / domain1
In / etc / nginx / sites-enabled / domain2
quelle
http://example.com
wird automatisch302
dazuhttp://www.example.com
. Warum ist das so?proxy_set_header Host $host
, um eine HTTP 302-Umleitung zu vermeiden.Sie können auch verschiedene URLs für Apps in einer Serverkonfiguration haben:
In / etc / nginx / sites-enabled / yourdomain :
Starten Sie nginx neu:
Anwendungen starten.
Knoten app1.js
Knoten app2.js
quelle
Ich vertrete unabhängige Node Express-Anwendungen über Nginx.
Auf diese Weise können neue Anwendungen einfach bereitgestellt werden, und ich kann auch andere Inhalte auf demselben Server an verschiedenen Standorten ausführen.
Hier finden Sie weitere Details zu meinem Setup mit dem Nginx-Konfigurationsbeispiel:
Von: http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html
quelle
Node.js mit Nginx-Konfiguration.
Fügen Sie die folgende Konfiguration hinzu, damit Nginx als Proxy-Umleitung zum Port 3000-Verkehr vom Server fungiert, wenn wir von "subdomain.your_domain.com" kommen.
quelle
Beantwortung Ihrer Frage 2:
Ich würde die Option
b
einfach verwenden, weil sie viel weniger Ressourcen verbraucht. Mit der Option 'a' wird jeder Client dazu führen, dass der Server viel Speicher verbraucht und alle benötigten Dateien lädt (obwohl ich PHP mag, ist dies eines der Probleme damit). Mit der Option 'b' können Sie Ihre Bibliotheken (wiederverwendbarer Code) laden und für alle Clientanforderungen freigeben.Beachten Sie jedoch, dass Sie bei mehreren Kernen die Datei node.js optimieren sollten, um alle zu verwenden.
quelle
Ich habe in Github ein Repository erstellt, das Sie klonen können, Vagrant-Node-Nginx-Boilerplate
im Grunde die node.js app bei
/var/www/nodeapp
ISund die nginx config at
/etc/nginx/sites-available/
istquelle
Sie können auch node.js verwenden, um statische Dateien in einem von nginx bereitgestellten Verzeichnis zu generieren. Natürlich können einige dynamische Teile Ihrer Site vom Knoten und einige von Nginx (statisch) bedient werden.
Wenn einige von ihnen von Nginx bedient werden, erhöht sich Ihre Leistung.
quelle
Wir können problemlos eine Nodejs-App von Nginx einrichten, die als Reverse-Proxy fungiert.
In der folgenden Konfiguration wird davon ausgegangen, dass die NodeJS-Anwendung unter 127.0.0.1:8080 ausgeführt wird.
im obigen Setup wird Ihre Nodejs App,
HTTP_HOST
Holen Sie sich den Header, in dem Sie domänenspezifische Logik anwenden können, um die Antwort zu liefern. 'Ihre Anwendung muss von einem Prozessmanager wie pm2 oder einem Supervisor verwaltet werden, um Situationen zu behandeln / Sockets oder Ressourcen wiederzuverwenden usw.
Richten Sie einen Fehlerberichtsservice ein, um Produktionsfehler wie Wachposten oder Überrollbügel abzurufen
HINWEIS: Sie können eine Logik für die Übergabe domänenspezifischer Anforderungsrouten einrichten und eine Middleware für die ExpressJS-Anwendung erstellen
quelle
Nginx kann als Reverse-Proxy-Server fungieren, der genau wie ein Projektmanager funktioniert. Wenn es eine Anfrage erhält, analysiert es diese und leitet die Anfrage an Upstream (Projektmitglieder) weiter oder bearbeitet sich selbst. Nginx bietet zwei Möglichkeiten, eine Anfrage basierend auf ihrer Konfiguration zu bearbeiten.
Leiten Sie die Anfrage an einen anderen Server weiter
}}
Server die Anfrage
Leiten Sie die Anfrage an einen anderen Server weiter
Wenn Sie den Server node.js auf Port 8000 ausführen, leitet nginx die Anforderung an node.js weiter. Schreiben Sie die Logik von node.js und bearbeiten Sie die Anforderung. Sie haben Ihren nodejs-Server hinter dem nginx-Server ausgeführt.
Wenn Sie andere Dienste als nodejs ausführen möchten, führen Sie einfach einen anderen Dienst wie Django, flask, php an verschiedenen Ports aus und konfigurieren Sie ihn in nginx.
quelle
Sie können nodejs mit pm2 ausführen, wenn Sie jedes Microservice-Mittel verwalten und ausführen möchten. Der Knoten wird in einem Port ausgeführt. Konfigurieren Sie diesen Port einfach in nginx (/etc/nginx/sites-enabled/domain.com).
Überprüfen Sie mithilfe von Ping, ob localhost ausgeführt wird.
Und
Das ist am besten und wie gesagt auch einfacher
quelle
Die beste und einfachere Einrichtung mit Nginx und Nodejs ist die Verwendung von Nginx als HTTP- und TCP-Load-Balancer mit aktiviertem Proxy-Protokoll. In diesem Zusammenhang kann Nginx eingehende Anforderungen an NodeJS weiterleiten und auch SSL-Verbindungen zu den Back-End-Nginx-Servern und nicht zum Proxy-Server selbst beenden. (SSL-PassThrough)
Meiner Meinung nach macht es keinen Sinn, Nicht-SSL-Beispiele zu nennen, da alle Web-Apps sichere Umgebungen verwenden (oder verwenden sollten).
Beispielkonfiguration für den Proxyserver in /etc/nginx/nginx.conf
Lassen Sie uns nun den Backend-Webserver behandeln. /etc/nginx/nginx.conf :
Jetzt konfigurieren wir den virtuellen Host mit dieser SSL- und Proxy-Protokoll-fähigen Konfiguration unter /etc/nginx/sites-available/example.com-https.conf :
Und zum Schluss eine Probe von Schluss noch 2 NodeJS-Webservern : Erster Server:
Zweiter Server:
Jetzt sollte alles perfekt funktionieren und ausgeglichen sein.
Vor einiger Zeit schrieb ich über das Einrichten von Nginx als TCP-Load-Balancer in Docker . Probieren Sie es aus, wenn Sie Docker verwenden.
quelle