Hostwinds Tutorials
Suchergebnisse für:
Inhaltsverzeichnis
Stichworte: Cloud Servers, SSL, VPS
Wenn Sie eine Webanwendung in einem privaten Port ausführen (wie LOCALHOST: 3000) Es ist über das Internet nicht direkt zugänglich.Eine der effektivsten Möglichkeiten, diese App sicher aufzudecken, besteht darin, einen umgekehrten Proxy vor sich zu setzen.
Nginx ist ein leichtes bekanntes Tool, das genau das kann-eingehender Verkehr und es an Ihre App weiterleiten-und gleichzeitig HTTPS mit einem kostenlosen SSL-Zertifikat von Let's Encrypt abwickelt.
In diesem Leitfaden lernen Sie:
Neu bei Webservern?Schauen Sie sich unsere Erklärung an Wie Webserver funktionieren.
EIN Reverse Proxy ist ein Server, der zwischen Ihren Benutzern und Ihren Backend -Diensten liegt.Anstatt dass Ihre App öffentlich auf einem Port (wie 3000) zuhört, erhält Nginx den Datenverkehr zuerst und übergibt ihn dann an die im Hintergrund ausgeführte App.
Hier ist der Grund, warum dieser Ansatz so nützlich ist:
Auch wenn Ihre App bereits den Webverkehr verarbeiten kann, vereinfacht die Verwendung von Nginx als Reverse -Proxy häufig das Setup, verbessert die Flexibilität und erhöht die Kontrolle.
Bevor wir anfangen, stellen wir sicher, dass Sie alles haben, was Sie brauchen:
A yourdomain.com → 123.123.123.123
A www.yourdomain.com → 123.123.123.123
Die Ausbreitung kann einige Minuten bis einige Stunden dauern.
Sie wissen nicht, wie Sie Ihre DNS konfigurieren?Hier ist So fügen Sie einen A -Rekord hinzu mit den meisten Domain -Hosts.
Hinweis: Wenn Ihre App noch nicht ausgeführt wird, ist das in Ordnung - Sie können immer noch das Setup durchgehen und später testen.
sudo apt update
sudo apt install nginx
Überprüfen Sie dann, dass es ausgeführt wird:
sudo systemctl status nginx
Sie sollten "aktiv (laufen) sehen."
sudo apt install certbot python3-certbot-nginx
Mit diesem Plugin können Sie Ihre NGINX -Konfiguration automatisch ändern, wenn Sie ein Zertifikat anfordern - keine manuelle Bearbeitung für grundlegende Einrichtungen erforderlich.
Haben Sie ein anderes Betriebssystem?Folgen Sie dieser Anleitung zu So installieren wir uns verschlüsseln auf Fedora und Debian
Nachdem Ihr System fertig ist, besteht der erste wirkliche Schritt darin, NGINX so zu konfigurieren, dass Sie auf den Datenverkehr auf Ihrer Domäne anhören und an Ihre interne Anwendung weitergeleitet werden. Dies ist der Fall, was Nginx als umgekehrter Proxy fungiert.
Ohne dieses Setup würden Benutzer, die versuchen, Ihre Website zu besuchen, auf eine leere Seite oder den Standard -NGINX -Begrüßungsbildschirm zu klicken.Sie müssen Nginx explizit mitteilen:
Sie erstellen eine Konfigurationsdatei für Ihre Domain im Sites-verfügbaren Verzeichnis von Nginx.Dadurch werden Konfigurationen organisiert und erleichtert das Aktivieren oder Deaktivieren einzelner Standorte.
sudo nano /etc/nginx/sites-available/yourdomain.com
Fügen Sie den folgenden Block ein, passen Sie den Domain und den App -Port nach Bedarf an:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
# Pass important headers to the backend
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;
}
}
Nginx verwendet symbolische Links in der Websites fähig Verzeichnis zum Aktivieren von Websites.Jetzt erstellen Sie also einen Link und laden Nginx neu:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
Überprüfen Sie die Syntaxfehler.Wenn alles gut aussieht:
sudo systemctl reload nginx
Ihr Reverse -Proxy ist jetzt live - Anfragen an http://yourdomain.com wird an Ihre App auf Port 3000 übergeben.
Wenn der Reverse -Proxy über HTTP arbeitet, besteht der nächste Schritt darin, ihn mit HTTPS zu sichern.Dies fügt der gesamten Kommunikation zwischen Ihren Benutzern und Ihrem Server eine Verschlüsselung hinzu - schützt Anmeldeinformationen, API -Anfragen, personenbezogene Daten und mehr.
Sie verwenden Let's Encrypt, eine kostenlose Zertifikatbehörde und Certbot, die den Prozess automatisiert.
Führen Sie diesen Befehl aus und ersetzen Sie die Domänen durch Ihre tatsächlichen Werte:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Was das tut:
Certbot wird:
Tipp: Wenn Ihr DNS nicht vollständig ausgebildet ist oder Ihr Server -Firewall -Blockport 80 fehlschlägt.Sie können dies mit:
curl -I http://yourdomain.com
Um Ports besser zu verstehen, lesen Sie unseren Leitfaden zu Wie Webserver -Ports funktionieren.
Nach Abschluss von Certbot sollte Ihre Nginx -Konfiguration so etwas enthalten:
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
Sie sollten jetzt in der Lage sein, https://yourdomain.com zu besuchen und Ihre Website mit einem gültigen SSL -Zertifikat zu sehen.
Wenn Sie während des Certbot -Setups nicht die Option zur Weiterleitung gewählt haben, können Sie diese manuell hinzufügen:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
Dadurch wird der gesamte HTTP -Datenverkehr in HTTPS umgeleitet, wodurch die Benutzer die unsichere Version Ihrer Website nicht versehentlich verwenden.
Sobald Ihr SSL-Zertifikat vorhanden ist, können Sie Nginx fein abstellen, um die Sicherheit und Kompatibilität zu verbessern.Diese Einstellungen gehen in den HTTPS -Serverblock.
Hier ist ein verbessertes Beispiel:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
Diese Änderungen verbessern Ihren SSL -Sicherheitswert und schützen Besucher vor Downgrade -Angriffen oder unsicheren Verschlüsselungsentscheidungen.
Optional: Sie können Ihre Website mit SSL Labs testen, um zu sehen, wie Ihre Konfiguration ausgeführt wird, und spezifische Verbesserungsvorschläge abrufen.
Für eine noch stärkere Verschlüsselung können Sie einen benutzerdefinierten Diffie-Hellman-Schlüssel (DH) erzeugen.Dieser Schritt ist optional, wird jedoch häufig für Produktionsumgebungen empfohlen.
Führen Sie diesen Befehl aus, um eine 2048-Bit-DH-Gruppe zu generieren:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Fügen Sie dann die folgende Zeile zu Ihrem SSL Server -Block hinzu:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
Diffie-Hellman-Parameter stärken VorwärtshöreDas heißt, selbst wenn Ihr privater Schlüssel in Zukunft irgendwie beeinträchtigt wird, werden vergangene verschlüsselte Sitzungen immer noch sicher sein.
Es dauert ein paar Minuten, um die DH-Gruppe zu generieren, aber es ist ein einmaliger Schritt und lohnt sich für eine bessere Sicherheitsposition.
Verschlüsseln wir Zertifikate verfallen alle 90 Tage.Glücklicherweise installiert Certbot einen System -Timer, der zweimal täglich nach Ablauf von Zertifikaten überprüft und automatisch erneuert.
Sie können bestätigen, dass der Timer aktiv ist mit:
sudo systemctl list-timers | grep certbot
Sie sollten so etwas sehen:
NEXT LEFT LAST PASSED UNIT ACTIVATES
2025-06-19 04:00:00 UTC 12h 2025-06-18 04:00:00 UTC 11h ago certbot.timer certbot.service
Um den Erneuerungsprozess manuell zu testen (ohne Änderungen vorzunehmen), laufen Sie:
sudo certbot renew --dry-run
Dies simuliert den vollständigen Erneuerungsprozess und bestätigt, dass Ihr System bereit ist, es automatisch zu verarbeiten.
Wenn es keine Fehler gibt, verlängern Ihre Zertifikate in Zukunft im Hintergrund leise.
Nachdem Ihr Reverse -Proxy mit SSL eingerichtet und gesichert ist, ist es eine gute Idee, mit ein paar praktischen Schecks und Best Practices abzuschließen.
Diese einfachen Gewohnheiten können dazu beitragen, Probleme auf der ganzen Linie zu verhindern, Ihre Konfiguration zu erhalten, und stellen Sie sicher, dass alles so wie Sie erwartet werden.
Auch wenn alles zu funktionieren scheint, können Sie später Zeit und Ärger mehr sparen.
Starten Sie Ihre App neu, wenn Änderungen nicht automatisch erkannt werden
Einige Apps müssen neu gestartet werden, um korrekt hinter einem Proxy zu arbeiten.
Überprüfen Sie die Protokolle
Sie können NGINX -Protokolle auf Fehler oder ungewöhnlichen Verkehrsdaten überwachen:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Halten Sie Nginx und Certbot aktualisiert
Verwenden Sie sudo APT Update && sudo APT -Upgrade regelmäßig.Aktualisierte Pakete beheben Fehler, verbessern die Kompatibilität und die Patch -Sicherheitsprobleme.
Sobald Sie die Grundlagen für die Einrichtung eines sicheren Reverse -Proxy beherrscht haben, können Sie Ihre Konfiguration erweitern, um komplexere Anforderungen zu unterstützen.Hier sind einige gemeinsame Szenarien, mit denen Sie mehr aus Ihrem Server herausholen können.
Wenn Sie mehrere Web -Apps auf verschiedenen Ports ausführen, kann NGINX Anforderungen an jeder App basierend auf Domain oder URL -Pfad weiterleiten.
Beispiel: Verschiedene Domänen
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://localhost:3001;
# proxy headers here
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://localhost:3002;
# proxy headers here
}
}
Mit diesem Setup können Sie mehrere Apps mit separaten Subdomains über Nginx auf Standardports bedienen.
Verwenden Sie Docker?Lernen So stellten Sie mehrere Docker -Apps mit Nginx aus.
Alternativ können Sie sich auf URL -Pfaden anhand von URL -Pfaden auswirken, was nützlich ist, wenn Sie alle Apps unter einer einzelnen Domäne wünschen:
server {
listen 80;
server_name example.com;
location /app1/ {
proxy_pass http://localhost:3001/;
# proxy headers here
}
location /app2/ {
proxy_pass http://localhost:3002/;
# proxy headers here
}
}
Hinweis: Wenn Sie pathbasierte Stellvertreter verwenden, können nachfolgende Schrägstriche und URL-Umschreibungen schwierig werden. Stellen Sie sicher, dass Ihre Backend-App unter einem Untergrund serviert wird.
Sie können einschränken, wie viele Anfragen ein Kunde in einem bestimmten Zeitrahmen stellen kann, um Ihr Backend vor Missbrauch oder versehentlicher Überlastung zu schützen.
Fügen Sie dies im HTTP -Block in /etc/nginx/nginx.conf hinzu:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
Dann in Ihrem Server oder Standortblock:
limit_req zone=mylimit burst=20 nodelay;
Diese Konfiguration ermöglicht 10 Anfragen pro Sekunde mit Bursts von bis zu 20 Anfragen, um überschüssige Anfragen zu fallen, um die Überwältigung Ihrer App zu vermeiden.
Wenn Sie über mehrere Instanzen Ihrer App ausgeführt werden (z. B. mehrere Container oder VPSS), kann Nginx den Datenverkehr unter ihnen verteilen:
upstream backend {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
# proxy headers here
}
}
Nginx Balances fordert standardmäßig Round-Robin an, aber Sie können es für andere Methoden wie kleinste Verbindungen oder IP-Hash konfigurieren.
Um mehr zu erfahren, lesen Sie unseren Leitfaden zu DNS -Lastausgleich.
Sie können die Protokollierung an wichtige Proxy -Informationen zur Fehlerbehebung oder Analyse anpassen:
log_format proxy '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'upstream_response_time $upstream_response_time '
'request_time $request_time';
access_log /var/log/nginx/proxy_access.log proxy;
Dieses Protokoll -Reaktionszeiten und die Gesamtanforderungszeiten leichter und hilft, langsame Backend -Antworten zu identifizieren.
Möglicherweise möchten Sie HTTP -Header für Sicherheit oder Funktionalität hinzufügen oder ändern:
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy no-referrer-when-downgrade;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Diese Header schützen vor Clickjacking, Mime -Schnüffeln und erzwingen die HTTPS -Nutzung.
Geschrieben von Hostwinds Team / Juni 14, 2019