Zephyrnet-Logo

Kurztipp: Konfigurieren von NGINX und SSL mit Node.js.

Datum:

NGINX ist ein Hochleistungs-HTTP-Server sowie ein Reverse-Proxy. Im Gegensatz zu herkömmlichen Servern folgt NGINX einer ereignisgesteuerten, asynchronen Architektur. Infolgedessen ist der Speicherbedarf gering und die Leistung hoch. Wenn Sie eine Node.js-basierte Web-App ausführen, sollten Sie ernsthaft in Betracht ziehen, NGINX als Reverse-Proxy zu verwenden.

NGINX kann statische Assets sehr effizient bedienen. Bei allen anderen Anfragen wird mit dem Backend Ihres Node.js gesprochen und die Antwort an den Client gesendet. In diesem Tutorial wird erläutert, wie Sie NGINX für die Arbeit mit Node.js konfigurieren. Wir werden auch sehen, wie SSL auf dem NGINX-Server eingerichtet wird.

Hinweis: Der Knoten verfügt auch über ein integriertes HTTPS-Modul und kann so konfiguriert werden, dass die erforderlichen Zertifikatdateien gelesen werden, ohne dass ein Reverse-Proxy erforderlich ist. Mehr dazu erfahren Sie in unserem Artikel Verwendung von SSL / TLS mit Node.js..

NGINX installieren

Angenommen, Sie haben Node.js bereits auf Ihrem Computer installiert (falls nicht, überprüfen Sie dies hier), mal sehen, wie man NGINX installiert.

Installation unter Linux

Wenn Sie Ubuntu ausführen, können Sie NGINX mit dem folgenden Befehl installieren:

sudo apt-get update
sudo apt-get install nginx

Wenn Sie eine andere Linux-Distribution als Ubuntu verwenden, schauen Sie sich das an die NGINX-Installationsdokumente um mehr zu erfahren.

NGINX wird automatisch gestartet, sobald es installiert ist.

Installation unter macOS

Wenn Sie unter macOS arbeiten, können Sie verwenden Homebrew NGINX einfach zu installieren. Die Schritte sind wie folgt:

  • Homebrew benötigt das Verzeichnis /usr/local sein chownIch würde zu Ihrem Benutzernamen. Führen Sie daher zuerst den folgenden Befehl im Terminal aus:

    sudo chown -R 'username here' /usr/local
    
    
  • Jetzt installieren die folgenden zwei Befehle NGINX auf Ihrem System:

    brew link pcre
    brew install nginx
    
    
  • Nach Abschluss der Installation können Sie den folgenden Befehl eingeben, um NGINX zu starten:

    sudo nginx
    
    
  • Die NGINX-Konfigurationsdatei finden Sie hier: /usr/local/etc/nginx/nginx.conf.

Installation unter Windows

Gehen Sie für Windows zu NGINX Downloads Seite und holen Sie sich den Reißverschluss. Der nächste Schritt ist das Entpacken des Archivs und das Verschieben in das Verzeichnis an der Eingabeaufforderung wie folgt:

unzip nginx-1.3.13.zip
cd nginx-1.3.13
start nginx

Wie Sie sehen können, der Befehl start nginx startet NGINX.

Nachdem die Installation abgeschlossen ist, sehen wir uns an, wie Sie einen einfachen Server konfigurieren können.

Einrichten eines Node.js-Servers

Lassen Sie uns zunächst einen einfachen Node.js-Server erstellen. Wir beginnen mit der Initiierung eines Projekts und der Installation des Express-Paket:

mkdir node-demo && cd node-demo
npm init -y
npm i express

Erstellen Sie eine Datei mit dem Namen server.jsmit folgenden Inhalten:

const express = require('express')
const app = express()
const port = 3000 app.get('/', (req, res) => res.send('Hello World!')) app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Sie können den Server durch Ausführen starten node server.js.

NGINX konfigurieren

Öffnen wir nun die NGINX-Standard-Site-Konfigurationsdatei:

sudo nano /etc/nginx/sites-available/default

Wenn Sie möchten, können Sie direkt in das Verzeichnis gehen und die Konfigurationsdatei mit Ihrem bevorzugten Texteditor öffnen.

Wenn Sie nach unten scrollen, finden Sie eine server Block. Es sieht ungefähr so ​​aus:

server { listen 80; server_name localhost; .... more config goes here
}

Als nächstes konfigurieren wir die server Block nach unseren Bedürfnissen. Wir möchten NGINX so konfigurieren, dass alle Anforderungen an unseren Node.js-Server weitergeleitet werden. Ersetzen Sie die oben genannten server Block mit einem neuen Block wie unten gezeigt:

server { listen 80; server_name localhost; location / { proxy_pass http://localhost:3000; 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; }
}

Wie Sie sehen können, hört der Webserver zu http://localhost port 80dem „Vermischten Geschmack“. Seine location / Block teilt NGINX mit, was mit eingehenden Anforderungen zu tun ist. Wir gebrauchen proxy_pass um auf unsere Node.js-Anwendung zu verweisen, die unter ausgeführt wird http://localhost:3000 in unserem Fall.

Zu diesem Zeitpunkt sollten Sie die Datei speichern und Folgendes eingeben, um NGINX abhängig von Ihrem Betriebssystem neu zu starten.

Ubuntu:

sudo service nginx restart

Oder:

sudo /etc/init.d/nginx restart

macOS:

sudo nginx -s stop && sudo nginx

Windows:

nginx -s reload

Sobald dies erledigt ist, können Sie zu gehen http://localhost um unseren Proxy in Aktion zu sehen. Obwohl Sie auf den NGINX-Webserver zugreifen, erhalten Sie die tatsächliche Antwort vom Node.js-Server.

Hinweis: Sie müssen sicherstellen, dass auf Port 80 nichts anderes (z. B. Apache) ausgeführt wird.

SSL einrichten

Um eine sichere Verbindung mit dem Browser eines Benutzers herzustellen, benötigen wir ein digitales Zertifikat. Normalerweise erhalten Sie eine davon von einer Zertifizierungsstelle wie z Lass uns verschlüsseln. Wenn Sie die Route "Let's Encrypt" wählen, müssen Sie das Zertifikat mit installieren Certbot, die sich um die Neukonfiguration von NGINX für Sie kümmert.

Für die lokale Entwicklung (und für das Folgen dieses Tutorials) können Sie auch Erstellen Sie ein selbstsigniertes Zertifikat. Das einzige Problem ist, dass Browser eine Warnung anzeigen, dass das Zertifikat nicht vertrauenswürdig ist, wenn jemand Ihre Website besucht. Aber zum Testen auf Ihrem lokalen Computer ist das vollkommen in Ordnung.

Sobald Sie ein Zertifikat und einen privaten Schlüssel haben, können Sie SSL in NGINX einrichten. Sie müssen unseren vorherigen Serverblock wie folgt ändern:

server { listen 80; listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; location / { proxy_pass http://localhost:3000; 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; }
}

Fertig! :)

Nun, wenn Sie zugreifen https://localhostwird Ihre Verbindung sicher sein. Bei der obigen Konfiguration wird davon ausgegangen, dass sich das Zertifikat und der private Schlüssel unter befinden /etc/nginx/ssl/server.crt und /etc/nginx/ssl/server.key Sie können diese Speicherorte jedoch ändern, wenn Sie dies wünschen.

Bonus: Statische Vermögenswerte bedienen

Ein zusätzlicher Vorteil der Einrichtung von NGINX vor unserem Node.js-Server besteht darin, dass wir es einfach so konfigurieren können, dass es alle statischen Assets bereitstellt, die unsere App benötigt. Dies erspart den Aufwand für das Weiterleiten dieser Anforderungen an Node.

Dazu müssen wir eine neue hinzufügen location Block zur Serverkonfiguration:

server { listen 80; server_name localhost; location / { ... } location /public { root /usr/local/var/www; }
}

Darin drin location Block setzen wir die Wurzel auf /usr/local/var/wwwSie können aber auch ein anderes Verzeichnis auswählen, wenn Sie möchten. Als Ergebnis, wenn es eine Anfrage zu so etwas gibt http://localhost/public/somepath/file.html, NGINX wird die Datei von bereitstellen /usr/local/var/www/public/somepath/file.html direkt.

Zusammenfassung

In diesem kurzen Tutorial haben wir gesehen, wie Sie NGINX als Reverse-Proxy für unsere Node.js-App verwenden und SSL konfigurieren. Durch die Verwendung von NGINX zur Verarbeitung der statischen Ressourcen können Sie auch Ihre Knotenanwendung entlasten.

Quelle: https://www.sitepoint.com/configuring-nginx-ssl-node-js/?utm_source=rss

spot_img

Neueste Intelligenz

spot_img