Zugriff über einen Reverse-Proxy
Um auf deinen Energiefluss-erweitert von extern zuzugreifen, benötigst Du einen Reverse-Proxy, der entsprechend konfiguriert ist und eine 2. Web-Adapter Instanz, die über die „Authentifikation“ abgesichert ist. Hier lassen sich auch die Benutzer und jeweiligen Berechtigungen konfigurieren.
Zusätzlich muss diese Socket.io Instanz auf integriert stehen, da sonst keine Authentifizierung stattfinden kann.
Risiko: Natürlich kannst Du den Energiefluss-erweitert auch ohne Authentifikation dem Internet zur Verfügung stellen – bedenke hier aber, das dies ausdrücklich nicht empfohlen ist und ein hohes Sicherheitsrisiko für deine ioBroker-Instanz bedeutet.
Konfiguration für Apache
In meiner Apache Konfiguration verwende ich SSL (HTTPS), da ich auch für den Web-Adapter SSL (HTTPS) benutze. Dies ist wichtig, damit der Login via ioBroker problemlos klappt.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName ef.domain.de
ServerAlias ef.domain.de
ErrorLog /var/log/apache2/ef_error.log
CustomLog /var/log/apache2/ef_access.log combined
ProxyPreserveHost On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
# 1. SPEZIFISCHE PFADE ZUERST
ProxyPass /vis/ https://<IP>:<Port>/vis/
ProxyPassReverse /vis/ https://<IP>:<Port>/vis/
ProxyPass /socket.io/ https://<IP>:<Port>/socket.io/
ProxyPassReverse /socket.io/ https://<IP>:<Port>/socket.io/
ProxyPass /login/ https://<IP>:<Port>/login/
ProxyPassReverse /login/ https://<IP>:<Port>/login/
ProxyPass /energiefluss-erweitert/ https://<IP>:<Port>/energiefluss-erweitert/
ProxyPassReverse /energiefluss-erweitert/ https://<IP>:<Port>/energiefluss-erweitert/
# 2. SICHERHEIT: Sensible Bereiche sperren
<LocationMatch "^/(admin|config|configuration|ping|lib)">
Require all denied
</LocationMatch>
# A) WICHTIG: Leitet den leeren Root-Aufruf direkt sauber auf den Adapter um
RewriteRule ^/?$ /energiefluss-erweitert/ [R=307,L]
# B) Fängt URLs mit Instanz-Suffix ab (z.B. /energiefluss-erweitert.0/?serve=healthCheck)
RewriteCond %{REQUEST_URI} ^/energiefluss-erweitert\.(\d+)(.*)$
RewriteRule ^.*$ https://<IP>:<Port>/energiefluss-erweitert.%1%2 [P,L,QSA]
# C) WEBSOCKET-SUPPORT für Socket.IO
RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/socket.io/(.*)$ "wss://<IP>:<Port>/socket.io/$1" [P,L]
# 3. HAUPTEINSTIEG (Ganz unten): Für ggf. den Login
ProxyPass / https://<IP>:<Port>/
ProxyPassReverse / https://<IP>:<Port>/
# Stelle sicher, dass Cookie-Header beim Proxying erhalten bleiben
ProxyPassReverseCookiePath / /
# Echte Client-IP für das Backend explizit durchreichen
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"
RequestHeader set X-Real-IP "%{REMOTE_ADDR}e"
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
# SSL-Zertifikate
SSLCertificateFile /etc/letsencrypt/live/ef.domain.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ef.domain.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Mit dieser Konfiguration kannst Du nun problemlos https://ef.domain.de aufrufen und es erscheint zuerst die Login-Maske von ioBroker, um den Benutzer zu authentifizieren. Nach erfolgreichem Login steht dir der Energiefluss-erweitert zu deiner Benutzung zur Verfügung!
