Phoscon mit nginx Reverse Proxy für Port 443: Unterschied zwischen den Versionen
Aus IT-Wiki
Franky (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Franky (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 6: | Zeile 6: | ||
== Installationsschritte == | == Installationsschritte == | ||
=== 1. nginx installieren und sofort stoppen === | === 1. Port 443 für WebSocket bei deconz Dienst ändern === | ||
<syntaxhighlight lang="bash"> | |||
# Stop deconz | |||
sudo sytemctl stop deconz | |||
# Edit deconz configuration | |||
sudo nano /lib/systemd/system/deconz.service | |||
</syntaxhighlight> | |||
Bei dieser Zeile den ws-port auf 8443 ändern: | |||
<syntaxhighlight> | |||
ExecStart=/usr/bin/deCONZ -platform minimal --http-port=80 --ws-port=8443 | |||
</syntaxhighlight> | |||
Konfiguration speichern und Deconz starten. | |||
<syntaxhighlight> | |||
# Start deconz | |||
sudo systemctl start deconz | |||
</syntaxhighlight> | |||
=== 2. nginx installieren und sofort stoppen === | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# System aktualisieren und nginx installieren | # System aktualisieren und nginx installieren | ||
| Zeile 17: | Zeile 39: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === 3. Standard-Konfiguration entfernen === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# Default-Site deaktivieren (verwendet Port 80) | # Default-Site deaktivieren (verwendet Port 80) | ||
| Zeile 23: | Zeile 45: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === 4. SSL-Zertifikat erstellen === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# Privaten Schlüssel generieren | # Privaten Schlüssel generieren | ||
| Zeile 36: | Zeile 58: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === 5. nginx Reverse Proxy Konfiguration erstellen === | ||
'''Datei:''' <code>/etc/nginx/sites-available/reverse-proxy</code> | '''Datei:''' <code>/etc/nginx/sites-available/reverse-proxy</code> | ||
| Zeile 69: | Zeile 91: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === 6. Konfiguration aktivieren === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# Konfiguration aktivieren | # Konfiguration aktivieren | ||
| Zeile 83: | Zeile 105: | ||
</pre> | </pre> | ||
=== | === 7. Firewall konfigurieren (wenn vorhanden) === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# Nur HTTPS (Port 443) freigeben | # Nur HTTPS (Port 443) freigeben | ||
| Zeile 92: | Zeile 114: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === 8. nginx starten === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# nginx starten | # nginx starten | ||
Aktuelle Version vom 28. September 2025, 22:31 Uhr
Ü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. Port 443 für WebSocket bei deconz Dienst ändern
# Stop deconz
sudo sytemctl stop deconz
# Edit deconz configuration
sudo nano /lib/systemd/system/deconz.serviceBei dieser Zeile den ws-port auf 8443 ändern:
ExecStart=/usr/bin/deCONZ -platform minimal --http-port=80 --ws-port=8443Konfiguration speichern und Deconz starten.
# Start deconz
sudo systemctl start deconz2. 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 nginx3. Standard-Konfiguration entfernen
# Default-Site deaktivieren (verwendet Port 80)
sudo rm /etc/nginx/sites-enabled/default4. 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"5. 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;
}
}6. 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
7. 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 lassen8. 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