Phoscon mit nginx Reverse Proxy für Port 443
Aus IT-Wiki
Übersicht
Installation und Konfiguration von nginx als Reverse Proxy, der nur Port 443 verwendet, ohne den bestehenden Port 80 Dienst zu stören.
Hier wird als Beispiel die IP Adresse 192.168.1.100 und der Hostname raspberrypi verwendet. Diese Angaben müssen selbstverständlich an die tatsächliche IP Adresse und den Hostnamen angepasst werden.
Installationsschritte
1. nginx installieren und sofort stoppen
# System aktualisieren und nginx installieren
sudo apt update
sudo apt install nginx -y
# nginx sofort stoppen und Auto-Start deaktivieren
sudo systemctl stop nginx
sudo systemctl disable nginx2. Standard-Konfiguration entfernen
# Default-Site deaktivieren (verwendet Port 80)
sudo rm /etc/nginx/sites-enabled/default3. SSL-Zertifikat erstellen
# Privaten Schlüssel generieren
sudo openssl genrsa -out /etc/ssl/private/nginx-selfsigned.key 2048
# Zertifikat erstellen (10 Jahre gültig)
sudo openssl req -new -x509 -days 3650 \
-key /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt \
-subj "/C=DE/ST=Home/L=Internal/O=HomeLab/CN=raspberrypi.local" \
-addext "subjectAltName=IP:192.168.1.100,DNS:raspberrypi.local,DNS:localhost"4. nginx Reverse Proxy Konfiguration erstellen
Datei: /etc/nginx/sites-available/reverse-proxy
server {
listen 443 ssl;
server_name raspberrypi.local 192.168.1.100 localhost;
# SSL-Zertifikate
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
# Moderne SSL-Einstellungen
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# Reverse Proxy zur Anwendung auf Port 80
location / {
proxy_pass http://localhost:80;
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;
# Timeout-Einstellungen
proxy_connect_timeout 30s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
}5. Konfiguration aktivieren
# Konfiguration aktivieren
sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/
# Syntaxprüfung durchführen
sudo nginx -tErwartete Ausgabe:
nginx: configuration file /etc/nginx/nginx.conf test is successful
6. Firewall konfigurieren (wenn vorhanden)
# Nur HTTPS (Port 443) freigeben
sudo ufw allow 443
# Port 80 NICHT freigeben (bleibt für bestehenden Dienst)
# sudo ufw allow 80 # AUSKOMMENTIERT lassen7. nginx starten
# nginx starten
sudo systemctl start nginx
# Automatischen Start aktivieren
sudo systemctl enable nginx
# Status prüfen
sudo systemctl status nginxVerifikation
Dienst-Status prüfen
# nginx Status
sudo systemctl status nginx
# Ports prüfen
sudo netstat -tulpn | grep nginxErwartetes Ergebnis:
- nginx läuft (
active (running)) - Hört nur auf Port 443 (
0.0.0.0:443) - Port 80 bleibt frei für bestehenden Dienst
HTTPS-Verbindung testen
# Lokal testen (selbstsigniertes Zertifikat ignorieren)
curl -k https://localhost
# Mit IP testen
curl -k https://192.168.1.100Browser-Test
https://raspberrypi.local https://192.168.1.100
Hinweis: Browser-Warnung wegen selbstsigniertem Zertifikat ist normal → "Erweitert" → "Trotzdem weiter"
Troubleshooting
Konfigurationsprobleme
# Detaillierte Fehler anzeigen
sudo nginx -t
# Logs prüfen
sudo tail -f /var/log/nginx/error.logPort-Konflikte
# Prüfen was auf Port 443 läuft
sudo lsof -i :443
# Alle nginx Prozesse anzeigen
ps aux | grep nginxZertifikat prüfen
# Zertifikat-Informationen anzeigen
sudo openssl x509 -in /etc/ssl/certs/nginx-selfsigned.crt -text -nooutService-Management Befehle
| Befehl | Beschreibung |
|---|---|
sudo systemctl start nginx |
nginx starten |
sudo systemctl stop nginx |
nginx stoppen |
sudo systemctl restart nginx |
nginx neustarten |
sudo systemctl reload nginx |
Konfiguration neu laden |
sudo systemctl status nginx |
Status anzeigen |
sudo nginx -t |
Konfiguration testen |
Wichtige Dateien
| Pfad | Beschreibung |
|---|---|
/etc/nginx/sites-available/reverse-proxy |
Reverse Proxy Konfiguration |
/etc/nginx/sites-enabled/reverse-proxy |
Aktivierte Konfiguration |
/etc/ssl/certs/nginx-selfsigned.crt |
SSL Zertifikat |
/etc/ssl/private/nginx-selfsigned.key |
SSL Privater Schlüssel |
/var/log/nginx/error.log |
Fehlerlogs |
/var/log/nginx/access.log |
Zugriffslogs |
Erfolgskriterien
- nginx läuft ohne Fehler (
systemctl status nginx) - Port 443 ist belegt (
netstat -tulpn | grep :443) - Port 80 bleibt für bestehenden Dienst verfügbar
- HTTPS-Verbindung funktioniert (
curl -k https://localhost) - Reverse Proxy leitet korrekt weiter
- Keine Konflikte mit bestehenden Diensten