Wenn es um die Skalierung und Optimierung von Node.js-Anwendungen geht, spielt NGINX eine entscheidende Rolle bei der Bewältigung von hohem Datenverkehr, der effizienten Bereitstellung statischer Dateien und der Funktion als Lastausgleicher. NGINX, ein Hochleistungs-Webserver, kann auch als Reverse-Proxy fungieren und so Anfragen auf mehrere Server verteilen. In diesem Artikel erfahren Sie, was NGINX ist, warum Sie es mit Node.js verwenden sollten und wie Sie NGINX für verschiedene Aufgaben konfigurieren, einschließlich Reverse-Proxying, Lastausgleich und Bereitstellung statischer Inhalte.
NGINX (ausgesprochen „Engine X“) ist ein leistungsstarker Webserver und Reverse-Proxy, der für die Verarbeitung einer großen Anzahl gleichzeitiger Verbindungen mit hoher Leistung entwickelt wurde. Ursprünglich als Webserver entwickelt, wurde NGINX aufgrund seiner Vielseitigkeit auf Lastausgleich, Reverse-Proxy und die Bereitstellung statischer Dateien erweitert.
Warum NGINX mit Node.js verwenden?
Um NGINX für Node.js zu konfigurieren, befolgen Sie diese Schritte:
Zuerst müssen Sie NGINX auf Ihrem Server installieren. Verwenden Sie je nach Betriebssystem die folgenden Befehle:
Für Ubuntu/Debian:
sudo apt update sudo apt install nginx
Für CentOS/RHEL:
sudo yum install nginx
Nach der Installation können Sie NGINX mit dem folgenden Befehl starten:
sudo systemctl start nginx
Sie können überprüfen, ob NGINX ausgeführt wird, indem Sie die IP-Adresse Ihres Servers in einem Browser aufrufen. Wenn NGINX funktioniert, wird eine standardmäßige NGINX-Willkommensseite angezeigt.
Um NGINX als Reverse-Proxy zu aktivieren und Client-Anfragen an eine Node.js-Anwendung weiterzuleiten, müssen wir NGINX entsprechend konfigurieren.
Hier ist ein Beispiel einer NGINX-Konfiguration für eine Node.js-Anwendung, die auf localhost:3000 ausgeführt wird.
cd /etc/nginx/sites-available/
sudo nano nodeapp.conf
server { listen 80; server_name your_domain_or_IP; 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; } }
sudo ln -s /etc/nginx/sites-available/nodeapp.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Dieses Setup leitet den gesamten eingehenden Datenverkehr auf Port 80 an Ihre Node.js-Anwendung weiter, die auf Port 3000 ausgeführt wird.
Wenn Ihre Node.js-Anwendung wächst, reicht eine einzelne Instanz möglicherweise nicht aus, um den Datenverkehr zu bewältigen. NGINX kann als Load Balancer konfiguriert werden, der den Datenverkehr auf mehrere Node.js-Instanzen verteilt.
So können Sie NGINX für den Lastausgleich konfigurieren:
sudo nano /etc/nginx/sites-available/nodeapp.conf
upstream node_backend { server localhost:3000; server localhost:3001; server localhost:3002; } server { listen 80; server_name your_domain_or_IP; location / { proxy_pass http://node_backend; 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; } }
sudo nginx -t sudo systemctl restart nginx
Erläuterung:
Dieses Setup verteilt die Last gleichmäßig auf mehrere Node.js-Instanzen und verbessert so die Skalierbarkeit und Fehlertoleranz.
Die Bereitstellung statischer Dateien wie Bilder, CSS und JavaScript kann Ihre Node.js-Anwendung belasten. NGINX kann diese Verantwortung auslagern und die Leistung durch die direkte Bereitstellung statischer Assets verbessern.
sudo mkdir -p /var/www/html/static
Verschieben Sie Ihre statischen Dateien (CSS, Bilder, JS) in dieses Verzeichnis.
Aktualisieren Sie Ihre NGINX-Konfiguration (nodeapp.conf), um statische Dateien bereitzustellen:
server { listen 80; server_name your_domain_or_IP; location /static/ { root /var/www/html; } 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; } }
sudo nginx -t sudo systemctl restart nginx
Erläuterung:
Eine sichere Kommunikation zwischen Clients und Servern ist von entscheidender Bedeutung, und SSL (Secure Sockets Layer) sorgt für diese Verschlüsselung. NGINX kann die SSL-Terminierung verarbeiten, d. h. es übernimmt die Ver- und Entschlüsselung von HTTPS-Anfragen, bevor es diese an die Node.js-Anwendung weiterleitet.
So können Sie SSL mit NGINX konfigurieren:
Besorgen Sie sich ein SSL-Zertifikat. Sie können ein kostenloses SSL-Zertifikat von Let’s Encrypt erhalten oder eine andere Zertifizierungsstelle verwenden.
Ändern Sie Ihre NGINX-Konfiguration, um SSL zu aktivieren:
server { listen 443 ssl; server_name your_domain_or_IP; ssl_certificate /etc/ssl/certs/your_domain.crt; ssl_certificate_key /etc/ssl/private/your_domain.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; } } server { listen 80; server_name your_domain_or_IP; # Redirect all HTTP requests to HTTPS return 301 https://$host$request_uri; }
sudo nginx -t sudo systemctl restart nginx
Erläuterung:
NGINX ist ein leistungsstarkes Tool zur Verbesserung der Leistung, Skalierbarkeit und Sicherheit Ihrer Node.js-Anwendungen. Vom Lastausgleich über die Bereitstellung statischer Dateien bis hin zur Abwicklung der SSL-Terminierung entlastet NGINX viele Aufgaben von Node.js, sodass sich Ihre Anwendung auf das konzentrieren kann, was sie am besten kann: die Handhabung der Geschäftslogik. Mit den in diesem Artikel bereitgestellten Konfigurationen können Sie NGINX einrichten, um die Effizienz und Zuverlässigkeit Ihrer Node.js-Anwendung zu verbessern.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3