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.
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:
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.
Auf einem Ubuntu-System können Sie NGINX mit dem folgenden Befehl installieren:
sudo apt update sudo apt install nginx
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:
node app.js --port 3000 & node app.js --port 3001 & node app.js --port 3002 &
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.
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.
Ä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:
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.
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.
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
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:
Besuchen Sie Ihre Domain (z. B. https://yourdomain.com) und Ihre Node.js-App sollte jetzt über HTTPS bereitgestellt werden.
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; }
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:
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!