Heim  >  Artikel  >  Web-Frontend  >  NGINX mit Node.js: Lastausgleich, Bereitstellung statischer Inhalte und SSL

NGINX mit Node.js: Lastausgleich, Bereitstellung statischer Inhalte und SSL

Barbara Streisand
Barbara StreisandOriginal
2024-09-26 07:23:22500Durchsuche

NGINX with Node.js: Load Balancing, Serving Static Content, and SSL

NGINX ist ein leistungsstarker und vielseitiger Webserver, der eine entscheidende Rolle bei der Skalierung von Node.js-Anwendungen spielt. Es wird häufig als Reverse-Proxy verwendet, um den Lastausgleich zu übernehmen, statische Inhalte bereitzustellen und die SSL-Terminierung zu verwalten. In diesem Artikel untersuchen wir die Verwendung von NGINX in Verbindung mit Node.js und erklären anhand praktischer Beispiele, wie jede dieser Funktionen funktioniert.

Warum NGINX mit Node.js verwenden?

Node.js zeichnet sich zwar durch die Erstellung skalierbarer, ereignisgesteuerter Anwendungen aus, ist jedoch möglicherweise nicht die effizienteste Methode zur Bewältigung von Aufgaben wie Lastausgleich, Bereitstellung statischer Inhalte oder SSL-Terminierung. Hier kommt NGINX ins Spiel. NGINX ist für die effiziente Handhabung einer großen Anzahl gleichzeitiger Verbindungen optimiert und somit der perfekte Begleiter für Node.js-Anwendungen, die skaliert werden müssen.

Hauptvorteile der Verwendung von NGINX mit Node.js:

  1. Lastausgleich: NGINX kann den Datenverkehr auf mehrere Node.js-Instanzen verteilen und so sicherstellen, dass kein einzelner Server überlastet wird.
  2. Bereitstellung statischer Inhalte: Es stellt statische Dateien (z. B. CSS, JS, Bilder) effizient bereit und gibt Node.js die Möglichkeit, sich auf dynamische Inhalte zu konzentrieren.
  3. SSL-Terminierung: NGINX übernimmt die SSL/TLS-Verschlüsselung und -Entschlüsselung und reduziert so die Belastung von Node.js.

1. Lastausgleich mit NGINX

Bei der horizontalen Skalierung müssen Sie mehrere Instanzen Ihrer Node.js-Anwendung ausführen. NGINX kann eingehenden Datenverkehr auf diese Instanzen verteilen und so eine gleichmäßige Auslastung gewährleisten.

Schritt 1: Installieren Sie NGINX

Auf einem Ubuntu-System können Sie NGINX mit dem folgenden Befehl installieren:

sudo apt update
sudo apt install nginx

Schritt 2: NGINX-Konfiguration für den Lastausgleich

In der Datei nginx.conf definieren Sie, wie NGINX eingehende Anfragen verarbeitet. So können Sie NGINX für den Lastausgleich auf drei Node.js-Instanzen einrichten.

http {
    upstream node_app {
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
        server 127.0.0.1:3002;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://node_app;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Erklärung:

  • Der Upstream-Block definiert den Pool von Node.js-Instanzen, zwischen denen NGINX den Datenverkehr ausgleicht.
  • Die Proxy_pass-Direktive leitet Anfragen an eine der Node.js-Instanzen weiter.

Schritt 3: Starten Sie mehrere Node.js-Instanzen

node app.js --port 3000 &
node app.js --port 3001 &
node app.js --port 3002 &

Schritt 4: Starten Sie NGINX

Sobald NGINX konfiguriert ist, starten Sie es mit:

sudo systemctl start nginx

Testen Sie das Setup:
Wenn Sie nun die IP-Adresse oder Domäne Ihres Servers besuchen, sollten die Anforderungen auf die drei Node.js-Instanzen verteilt werden.

2. Bereitstellung statischer Inhalte mit NGINX

Node.js-Anwendungen müssen häufig statische Dateien (wie Bilder, CSS und JavaScript) bereitstellen. NGINX ist bei dieser Aufgabe viel effizienter, da es für die Verarbeitung einer großen Anzahl statischer Dateianforderungen ausgelegt ist.

Schritt 1: NGINX-Konfiguration für statische Dateien

Ändern Sie die Datei nginx.conf, um einen Speicherort für statische Inhalte zu definieren.

server {
    listen 80;

    # Serve static content directly
    location /static/ {
        root /var/www/html;
    }

    # Proxy dynamic requests to Node.js
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Erklärung:

  • Der Speicherortblock /static/ weist NGINX an, Dateien von /var/www/html/static/ bereitzustellen, wenn Anfragen an /static/ gestellt werden.
  • Andere Anfragen werden an die Node.js-Anwendung weitergeleitet.

Schritt 2: Statische Dateien verschieben

Verschieben Sie Ihre statischen Dateien (z. B. Bilder, CSS, JavaScript) in das Verzeichnis /var/www/html/static/.

sudo mkdir -p /var/www/html/static
sudo cp -r path/to/static/files/* /var/www/html/static/

Jetzt werden Anfragen nach /statischen Ressourcen direkt von NGINX verarbeitet, wodurch die Leistung Ihres Node.js-Servers verbessert wird.

3. SSL-Terminierung mit NGINX

SSL (Secure Sockets Layer) ist entscheidend für die sichere Kommunikation zwischen Ihren Benutzern und Ihrer Anwendung. NGINX kann SSL-Beendigung sowie Verschlüsselungs- und Entschlüsselungsanforderungen auslagern, sodass Ihre Node.js-Anwendung SSL nicht selbst verarbeiten muss.

Schritt 1: Besorgen Sie sich ein SSL-Zertifikat

Mit Let’s Encrypt können Sie kostenlos ein SSL-Zertifikat erhalten:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com

Schritt 2: NGINX SSL-Konfiguration

Sobald das SSL-Zertifikat ausgestellt wurde, können Sie NGINX für die Verarbeitung von SSL-Verkehr konfigurieren.

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Erklärung:

  • Der erste Serverblock leitet den gesamten HTTP-Verkehr zu HTTPS um.
  • Der zweite Block überwacht Port 443 (HTTPS) und übernimmt die SSL-Verschlüsselung mit dem von Let’s Encrypt ausgestellten Zertifikat.

Schritt 3: SSL-Setup testen

Besuchen Sie Ihre Domain (z. B. https://yourdomain.com) und Ihre Node.js-App sollte jetzt über HTTPS bereitgestellt werden.

Zusätzliche NGINX-Konfigurationen zur Optimierung von Node.js

1. Umgang mit Zeitüberschreitungen

Um zu verhindern, dass lang laufende Anfragen vorzeitig geschlossen werden, konfigurieren Sie die Timeout-Einstellungen von NGINX.

server {
    proxy_read_timeout 90s;
    proxy_send_timeout 90s;
    send_timeout 90s;
}

2. Rate Limiting

Rate limiting can help prevent abuse and manage high traffic by limiting the number of requests a user can make in a given time.

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

    server {
        location / {
            limit_req zone=mylimit burst=5;
            proxy_pass http://localhost:3000;
        }
    }
}

Explanation:

  • The limit_req_zone directive defines a rate limit of 1 request per second.
  • The burst parameter allows a small number of requests to exceed the limit before throttling kicks in.

Conclusion

NGINX is a powerful tool that can significantly enhance the performance, security, and scalability of your Node.js applications. By offloading tasks such as load balancing, serving static content, and handling SSL termination to NGINX, your Node.js server can focus on what it does best: processing dynamic content and handling real-time events.

Das obige ist der detaillierte Inhalt vonNGINX mit Node.js: Lastausgleich, Bereitstellung statischer Inhalte und SSL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn