Phoscon mit nginx Reverse Proxy für Port 443: Unterschied zwischen den Versionen

Aus IT-Wiki
Keine Bearbeitungszusammenfassung
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>


=== 2. Standard-Konfiguration entfernen ===
=== 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>


=== 3. SSL-Zertifikat erstellen ===
=== 4. SSL-Zertifikat erstellen ===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Privaten Schlüssel generieren
# Privaten Schlüssel generieren
Zeile 36: Zeile 58:
</syntaxhighlight>
</syntaxhighlight>


=== 4. nginx Reverse Proxy Konfiguration erstellen ===
=== 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>


=== 5. Konfiguration aktivieren ===
=== 6. Konfiguration aktivieren ===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Konfiguration aktivieren
# Konfiguration aktivieren
Zeile 83: Zeile 105:
</pre>
</pre>


=== 6. Firewall konfigurieren (wenn vorhanden) ===
=== 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>


=== 7. nginx starten ===
=== 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.service

Bei dieser Zeile den ws-port auf 8443 ändern:

ExecStart=/usr/bin/deCONZ -platform minimal --http-port=80 --ws-port=8443

Konfiguration speichern und Deconz starten.

# Start deconz
sudo systemctl start deconz

2. 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 nginx

3. Standard-Konfiguration entfernen

# Default-Site deaktivieren (verwendet Port 80)
sudo rm /etc/nginx/sites-enabled/default

4. 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 -t

Erwartete 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 lassen

8. nginx starten

# nginx starten
sudo systemctl start nginx

# Automatischen Start aktivieren
sudo systemctl enable nginx

# Status prüfen
sudo systemctl status nginx

Verifikation

Dienst-Status prüfen

# nginx Status
sudo systemctl status nginx

# Ports prüfen
sudo netstat -tulpn | grep nginx

Erwartetes 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.100

Browser-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.log

Port-Konflikte

# Prüfen was auf Port 443 läuft
sudo lsof -i :443

# Alle nginx Prozesse anzeigen
ps aux | grep nginx

Zertifikat prüfen

# Zertifikat-Informationen anzeigen
sudo openssl x509 -in /etc/ssl/certs/nginx-selfsigned.crt -text -noout

Service-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