Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. IoBroker (und vis) über ReverseProxy

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    IoBroker (und vis) über ReverseProxy

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      patrick131184 last edited by

      Ich denke nicht das hier ein 60 Sekunden Timeout greift.

      [Fri Nov 10 14:56:02.173607 2017] [proxy_http:error] [pid 29946] (70007)The timeout specified has expired: [client 80.139:54263] AH01102: error reading status line from remote server 192.168.0.12:8082, referer: https://xxx.home-webserver.de/vis/vis/index.html?ipad
      [Fri Nov 10 14:56:02.173878 2017] [proxy:error] [pid 29946] [client 80.139.7.103:54263] AH00898: Error reading from remote server returned by /socket.io/, referer: https://xxx.home-webserver.de/vis/vis/index.html?ipad
      [Fri Nov 10 14:56:59.947066 2017] [proxy_http:error] [pid 29978] (70007)The timeout specified has expired: [client 80.139.:54275] AH01102: error reading status line from remote server 192.168.0.12:8082, referer: https://xxx.home-webserver.de/vis/vis/index.html?ipad
      [Fri Nov 10 14:56:59.947371 2017] [proxy:error] [pid 29978] [client 80.139.:54275] AH00898: Error reading from remote server returned by /socket.io/, referer: https://xxxt.home-webserver.de/vis/vis/index.html?ipad
      [Fri Nov 10 14:57:24.573144 2017] [proxy_http:error] [pid 30075] (70007)The timeout specified has expired: [client 80.139.:54281] AH01102: error reading status line from remote server 192.168.0.12:8082, referer: https://xxx.home-webserver.de/vis/vis/index.html?ipad
      [Fri Nov 10 14:57:24.573393 2017] [proxy:error] [pid 30075] [client 80.139.:54281] AH00898: Error reading from remote server returned by /socket.io/, referer: https://xxx.home-webserver.de/vis/vis/index.html?ipad
      
      

      Apache Version:

      Server version: Apache/2.4.10 (Raspbian)
      Server built:   Sep 20 2017 10:24:25
      Server's Module Magic Number: 20120211:37
      Server loaded:  APR 1.5.1, APR-UTIL 1.5.4
      Compiled using: APR 1.5.1, APR-UTIL 1.5.4
      Architecture:   32-bit
      Server MPM:     prefork
      
      

      Installed Modules:
      ` > Loaded Modules:

      core_module (static)

      so_module (static)

      watchdog_module (static)

      http_module (static)

      log_config_module (static)

      logio_module (static)

      version_module (static)

      unixd_module (static)

      access_compat_module (shared)

      alias_module (shared)

      auth_basic_module (shared)

      authn_core_module (shared)

      authn_file_module (shared)

      authz_core_module (shared)

      authz_host_module (shared)

      authz_user_module (shared)

      autoindex_module (shared)

      deflate_module (shared)

      dir_module (shared)

      env_module (shared)

      filter_module (shared)

      mime_module (shared)

      mpm_prefork_module (shared)

      negotiation_module (shared)

      php5_module (shared)

      proxy_module (shared)

      proxy_ajp_module (shared)

      proxy_balancer_module (shared)

      proxy_http_module (shared)

      proxy_wstunnel_module (shared)

      reqtimeout_module (shared)

      rewrite_module (shared)

      setenvif_module (shared)

      slotmem_shm_module (shared)

      socache_shmcb_module (shared)

      ssl_module (shared)

      status_module (shared) `

      1 Reply Last reply Reply Quote 0
      • R
        robsdobs last edited by

        Hallo,

        das laden dauert von extern recht lange und auch wird die Seite sehr oft immer wieder neu geladen.

        in der Console habe ich einige websockets Fehler. (Das mit dem [externe IP] habe ich jetzt ersetzt, dort steht meine IP.)

        ! Creating Application Cache with manifest https://[externe IP]/vis/vis/cache.manifest
        ! index.html#pageStart:1 Application Cache Checking event
        ! index.html#pageStart:1 Application Cache Error event: Manifest fetch failed (9) https://[externe IP]/vis/vis/cache.manifest
        ! chromecast.js:148 Version chromecast: 1.3.5
        ! index.html:4193 Version vis-jqui-mfd: 1.0.5
        ! index.html:8196 Version vis-map: 1.0.0
        ! material.js:29 Version material: 0.1.3
        ! paw.js:36 Version paw: 0.5.0
        ! index.html:10617 Version vis-weather: 1.1.1
        ! VM2457:1 GET https://[externe IP]/vis.0/main/vis-user.css?_=1522184570331 404 (Not Found)
        ! (anonymous) @ VM2457:1
        ! send @ jquery-1.11.2.min.js:4
        ! ajax @ jquery-1.11.2.min.js:4
        ! main @ vis.js:2922
        ! (anonymous) @ vis.js:3319
        ! j @ jquery-1.11.2.min.js:2
        ! fireWith @ jquery-1.11.2.min.js:2
        ! ready @ jquery-1.11.2.min.js:2
        ! J @ jquery-1.11.2.min.js:2
        ! conn.js:1129 Error: Cannot load /vis.0/main/vis-user.css - Not Found
        ! conn.js:267 2018-03-27T21:02:53.010Z Connected => authenticate
        ! conn.js:287 2018-03-27T21:02:53.290Z Authenticated: true
        ! socket.io.js:1971 WebSocket connection to 'wss://[externe IP]/socket.io/?key=nokey&EIO=3&transport=websocket&sid=IQOL2ZygwbKrjIhAAAA2' failed: Error during WebSocket handshake: Unexpected response code: 500

        Meine Konfiguration ist folgende:

        ! ````

        Dieses Template enthält Rewrite-Regeln für die Verwendung von Apache 2.4.x als Reverse Proxy mit SSL-Unterstützung für die folgenden Komponenten:

        - ioBroker VIS/Flot/Rickshaw

        - ioBroker Admin

        - ioBroker node-red

        - ioBroker socket-io im Web-Adapter

        - Zugriff auf CCU1/2

        - ioBroker Javascript-Adapter

        folgende Module müssen in Apache mindestens installiert und aktiviert sein:

        - ssl

        - proxy

        - rewrite

        - proxy_wstunnel

        - mpm_prefork

        - mod_auth_basic

        - mod_authn_file -- oder andere Authentifizierungsquelle

        Alle Einträge in eckigen Klammern [] sind durch die eigenen Daten zu ersetzen.

        Die Berechtigungsprüfung erfolgt durch Apache mittels HTTP-Basic Authentication oder Parameter an der URL. Dies hat den Vorteil, das unberechtigte Anfragen erst garnicht zu den Systemen gelangen.

        Da die Verbindung mit SSL/TLS gesichert ist, ist basic-Authentication vollständig ausreichend und am schnellsten.

        In den lokalen Systemen ist die Authentifizierung auszuschalten, da die Authentifizierungsdaten nicht durchgereicht werden.

        Die Skripte gehen davon aus, dass die lokalen Systeme mittels http angesprochen werden. Falls nicht, müssen die Zeilen entsprechend angepasst werden.

        ! # Folgender Teil ist nur erforderlich, wenn man einen lokalen Bereich auf dem Webserver haben möchte, der unter der gleichen URL erreichbar ist (z.B. um statische Daten abzulegen) und bei dem ein Caching durch den Webserver erfolgen soll.
        <ifmodule mod_cache.c="">LoadModule cache_disk_module modules/mod_cache_disk.so
        <ifmodule mod_cache_disk.c="">CacheRoot "/config/www"
        CacheEnable disk "/"
        CacheDirLevels 5
        CacheDirLength 3</ifmodule>
        ! # When acting as a proxy, don't cache the list
        CacheDisable "/ccu/"
        CacheDisable "/vis/"
        CacheDisable "/iobroker/"
        CacheDisable "/node-red/"
        CacheDisable "/flot/"</ifmodule>
        ! # Oberste Modul-Deklaration für den kompletten durch ssl gesicherten Service
        <ifmodule mod_ssl.c=""># Festlegung des Ports, über den der Server erreichbar sein soll.
        <virtualhost default:443="">ServerAdmin webmaster@gesternet.de
        ServerName [externe IP]
        ! # Stammverzeichnis des Webservers für lokale Inhalte
        DocumentRoot /config/www
        ! #zusätzlicher Schutz:
        <location>Deny from all
        AuthType basic
        AuthName "home"
        AuthUserFile /config/keys/httpsusers
        Satisfy Any
        Require valid-user</location>
        ! # Festlegung der Eigenschaften für das Root-Directory auf dem Webserver und alle Unterverzeichnisse
        <directory>Options FollowSymLinks
        AllowOverride None
        ! # Festlegung der Authentifizierungseigenschaften
        # Hier wird basic-Authentification mit Liste der berechtigten User konfiguriert.
        # Anleitung zur Konfiguration von Benutzern siehe https://httpd.apache.org/docs/current/howto/auth.html
        AuthType basic
        AuthName "home"
        AuthBasicProvider file
        AuthUserFile /config/keys/httpsusers
        ! # Festlegung, dass die Authentifizierung erfordlich ist. Speziell für die App kann kein Basic-Authentication verwendet werden, da diese Teile im Protokoll nicht enthalten sind.
        # Für die App kann alternativ auf die dort angegeben Daten für User und Password geprüft werden. Diese Werte werden in der URL als Parameter übertragen.
        # Die Werte werden nicht aus der Passwort-Datei ausgelesen sondern müssen hier statisch konfiguriert werden.
        # Wichtig: Nur der erste Request muss beim Öffnen der Verbindung authentifizieren.
        # Alle nachfolgenden Request über die gleiche http-Verbindung verwenden automatisch die gleichen Credentials. Deswegen ist beim Zugriff auf VIS die http-Authentifizierung für index.html ausreichend.
        <requireany># Zugriff über URL-Authentifizierung
        <requireall># Erlaubt auch noch die Einschänkung auf andere Eigenschaften
        Require expr %{QUERY_STRING} =~ /user=[user]&pass=[password]/</requireall>
        # Für alle anderen Zugriffe ist http-Authentifizierung erforderlich
        Require valid-user</requireany></directory>
        ! # Eintrag falls noch lokale Scripte wie z.B. PHP unterstützt werden sollen (muss natürlich getrennt installiert und eingerichtet werden)
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <directory "/usr/lib/cgi-bin"="">AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all</directory>
        ! # Einrichtung der Zertifikate für die Verschlüsselung
        # Weitere Informationen siehe z.B. https://thomas-leister.de/apache2-webserver-ssl-verschluesselte-verbindungen-ermoeglichen/
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

          # Rewrite-Regeln
          # Wichtig: Bei den nachfolgenden Mod-Proxy-Einträgen ist die Reihenfolge relevant. Die Auswertung erfolgt von oben nach unten. Das erste passende ProxyPass-Statement gilt.
        
            # Weiterleitung für Node-Red
          # Wichtig: Damit die Websocket-Verbindung korrekt weitergeleitet werden kann, muss in den Adapter-Einstellungen von Node-Red in "http root directory" "node-red" eingetragen werden.
          # Ohne Websocket-Verbindung kann man trotzdem auf die IDE zugreifen, bekommt jedoch keine Debug-Information angezeigt.
          # Der Zugriff auf Node-erfolgt dann intern http://[ interne IP ]:1880/node-red und extern über https://[ externe URL ]/node-red
          # intern http://192.168.178.221:1880/node-red und extern https://[externe IP]/node-red
          <ifmodule mod_proxy.c="">RewriteEngine On
             redirectmatch ^/node-red$ /node-red/
        
             # Spezieller Eintrag für websocket-Verbindung
             RewriteCond %{REQUEST_URI} ^/node-red/comms [NC]
             RewriteRule /(.*) ws://192.168.178.220:1880/$1 [P,L]
        
             ProxyPass /node-red/ http://192.168.178.220:1880/node-red/
             ProxyPassReverse /node-red/ http://192.168.178.220:1880/node-red/</ifmodule> 
        
          # Rewrite-Regeln für Homematic CCU
          # Stammt ursprünglich aus Homematic Forum
          # Der Zugriff auf die CCU efolgt intern weiterhin über http://[ interne IP ] und extern über https://[ externe URL ]/ccu
        

        ! # Homematioc CCU unter /ccu
        <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        ! redirectmatch ^/ccu$ /ccu/
        ! rewritecond %{REQUEST_URI} ^/ccu/
        rewriterule (.) $1 [PT]
        ! # Referer Auswertung, falls eine lokale absolute Referenz auf den Seiten ist. In diesem Fall wird /ccu ergänzt, damit ProxyPass matched.
        rewritecond %{HTTP_REFERER} https://
        /ccu/ [OR]
        rewritecond %{HTTP_REFERER} https:///webui/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /pda/ [OR]
        rewritecond %{HTTP_REFERER} https:///api/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/cuxd/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/cuxchart/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/cuxchart/css/overcast/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/cuxchart/js/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/hm_pdetect/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/hm-watchdog/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/hm-watchdog/settings/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/email/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/email/log/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/mh/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/mh/js/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/mh/css/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/mh/font/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/mh/font/MDL/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/mh/font/OpenSans/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/easyled/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/hq/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/hq/ui/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/xmlapi/ [OR]
        rewritecond %{HTTP_REFERER} https:///addons/script/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /addons/webmatic/ [OR]
        rewritecond %{HTTP_REFERER} https:///pages/ [OR]
        rewritecond %{HTTP_REFERER} https://
        /ise/ [OR]
        rewritecond %{HTTP_REFERER} https:///ise/img/ [OR]
        ! rewritecond %{HTTP_REFERER} ?sid=@.+@ [OR]
        rewritecond %{THE_REQUEST} ?sid=@.+@
        ! rewriterule ^/(.
        ) /ccu/$1 [PT]
        rewriterule ^/pda/(.) /ccu/pda/$1
        rewriterule ^/webui/(.
        ) /ccu/webui/$1
        rewriterule ^/api/(.) /ccu/api/$1
        rewriterule ^/addons/db/(.
        ) /ccu/addons/db/$1
        rewriterule ^/addons/cuxd/(.) /ccu/addons/cuxd/$1
        rewriterule ^/addons/cuxd/index.ccc?m=(.
        ) /ccu/addons/cuxd/index.ccc?m=$1
        rewriterule ^/addons/cuxchart/(.) /ccu/addons/cuxchart/$1
        rewriterule ^/addons/cuxchart/css/overcast/(.
        ) /ccu/addons/cuxchart/css/overcast/$1
        rewriterule ^/addons/cuxchart/js/(.) /ccu/addons/cuxchart/js/$1
        rewriterule ^/addons/hm_pdetect/(.
        ) /ccu/addons/hm_pdetect/$1
        rewriterule ^/addons/hm-watchdog/(.) /ccu/addons/hm-watchdog/$1
        rewriterule ^/addons/hm-watchdog/settings/(.
        ) /ccu/addons/hm-watchdog/settings/$1
        rewriterule ^/addons/email/(.) /ccu/addons/email/$1
        rewriterule ^/addons/email/log/(.
        ) /ccu/addons/email/log/$1
        rewriterule ^/addons/mh/(.) /ccu/addons/mh/$1
        rewriterule ^/addons/mh/js/(.
        ) /ccu/addons/mh/js/$1
        rewriterule ^/addons/mh/css/(.) /ccu/addons/mh/css/$1
        rewriterule ^/addons/mh/font/(.
        ) /ccu/addons/mh/font/$1
        rewriterule ^/addons/mh/font/MDL/(.) /ccu/addons/mh/font/MDL/$1
        rewriterule ^/addons/mh/font/OpenSans/(.
        ) /ccu/addons/mh/font/OpenSans/$1
        rewriterule ^/addons/easyled/(.) /ccu/addons/easyled/$1
        rewriterule ^/addons/hq/(.
        ) /ccu/addons/hq/$1
        rewriterule ^/addons/hq/ui/(.) /ccu/addons/hq/ui/$1
        rewriterule ^/addons/xmlapi/(.
        ) /ccu/addons/xmlapi/$1
        rewriterule ^/addons/script/(.) /ccu/addons/script/$1
        rewriterule ^/addons/webmatic/(.
        ) /ccu/addons/webmatic/$1
        rewriterule ^/addons/pages/(.) /ccu/addons/pages/$1
        rewriterule ^/pages/(.
        ) /ccu/pages/$1
        rewriterule ^/ise/img/(.) /ccu/ise/img/$1
        rewriterule ^/ise/(.
        ) /ccu/ise/$1
        ! ProxyPass /ccu/ http://192.168.178.205/ timeout=1200
        ProxyPassReverse /ccu/ http://192.168.178.205/ timeout=1200</ifmodule>
        ! # Rewrite-Regeln für ioBroker Admin
        # Der Zugriff auf die Admin-Seite efolgt intern weiterhin über http://[ interne IP ]:8081 und extern über https://[ externe URL ]/iobroker
        # intern über http://192.168.178.220:8081 und extern über ^/iobroker
        ! # Websocket Admin
        <ifmodule mod_proxy.c="">RewriteEngine On
        Redirectmatch ^/iobroker/socket.io$ /iobroker/socket.io/
        RewriteCond %{REQUEST_URI} ^/iobroker/socket.io/
        RewriteCond %{QUERY_STRING} transport=websocket
        RewriteRule ^/(.) /iobrokerwss/$1 [PT]
        # ProxyPass /iobrokerwss/iobroker/socket.io/ ws://localhost:8081/socket.io/ timeout=1200 Keepalive=On
        ProxyPass /iobrokerwss/iobroker/socket.io/ ws://192.168.178.220:8081/socket.io/ timeout=1200 Keepalive=On</ifmodule>
        ! <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        redirectmatch ^/iobroker$ /iobroker/
        rewritecond %{REQUEST_URI} ^/iobroker/
        rewriterule (.
        ) $1 [PT]
        rewritecond %{HTTP_REFERER} https:///iobroker/ [OR]
        rewritecond %{REQUEST_URI} ^/css/adapter.css [OR]
        rewritecond %{REQUEST_URI} ^/js/translate.js [OR]
        rewritecond %{REQUEST_URI} ^/js/adapter/ [OR]
        rewritecond %{REQUEST_URI} ^/adapter/ [OR]
        rewritecond %{REQUEST_URI} ^/js/adapter-settings.js [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/jqGrid/ [OR]
        rewritecond %{REQUEST_URI} ^/lib/css/jquery.multiselect-1.13.css [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/jquery-ui.min.js [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/loStorage.js [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/ace.js [OR]
        rewritecond %{REQUEST_URI} ^/js/selectID.js [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/loStorage.js [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/ace.js [OR]
        rewritecond %{REQUEST_URI} ^/js/selectID.js [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/mode-javascript.js [OR]
        rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/worker-javascript.js
        rewriterule ^/(.
        ) /iobroker/$1 [PT]
        ! ProxyPass /iobroker/ http://192.168.178.220:8081/ timeout=1200
        ProxyPassReverse /iobroker/ http://192.168.178.220:8081/ timeout=1200</ifmodule>
        ! # Rewrite-Regeln für ioBroker VIS
        # Die socket.io-Kommunikation und der Zugriff auf /lib wird nachfolgend getrennt geregelt (geht bestimmt auch einfacher hier lokal)
        # Wichtig: Im web-Adapter mit "Socket.IO Instance" auf integriert stehen.
        # Der Zugriff auf die Admin-Seite efolgt intern weiterhin über http://[ interne IP ]:8082/vis/index.html und extern über https://[ externe URL ]/vis/vis/index.html.
        <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        redirectmatch ^/vis$ /vis/
        rewritecond %{REQUEST_URI} ^/vis/
        rewriterule (.) $1 [PT]
        ! # Referer Auswertung, falls eine lokale absolute Referenz auf den Seiten ist. In diesem Fall wird /vis ergänzt, damit ProxyPass matched.
        # Referenzen auf node-red, static und socket.io werden explizit ausgeschlossen.
        rewritecond %{HTTP_REFERER} https://
        /vis/
        rewritecond %{REQUEST_URI} !^/node-red/
        rewritecond %{REQUEST_URI} !^/static/
        rewritecond %{REQUEST_URI} !^/socket.io/
        rewriterule ^/(.*) /vis/$1 [PT]

             ProxyPass /vis/ http://192.168.178.220:8082/ timeout=10
             ProxyPassReverse /vis/ http://192.168.178.220:8082/ timeout=10</ifmodule> 
        

        ! # Rewrite-Regeln für einen direkten Zugriff auf das Verzeichnis /lib des Web-Servers von ioBroker VIS ohne Referer
        # Dürfte normalerweise nicht benötigt werden.
        <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        redirectmatch ^/lib$ /lib/
        rewritecond %{REQUEST_URI} ^/lib/
        rewriterule (.) $1 [PT]
        ProxyPass /lib/ http://192.168.178.220:8082/lib/ timeout=10
        ProxyPassReverse /lib/ http://192.168.178.220:8082/lib/ timeout=10</ifmodule>
        ! # Rewrite-Regeln für einen direkten Zugriff auf auf flot ohne VIS
        <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        redirectmatch ^/flot$ /flot/
        rewritecond %{REQUEST_URI} ^/flot/
        rewriterule (.
        ) $1 [PT]
        ProxyPass /flot/ http://192.168.178.220:8082/flot/ timeout=1200
        ProxyPassReverse /flot/ http://192.168.178.220:8082/flot/ timeout=1200</ifmodule>
        ! # Rewrite-Regeln für einen direkten Zugriff auf auf rickshaw ohne VIS
        <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        redirectmatch ^/rickshaw$ /rickshaw/
        rewritecond %{REQUEST_URI} ^/rickshaw/
        rewriterule (.) $1 [PT]
        ProxyPass /rickshaw/ http://192.168.178.220:8082/rickshaw/ timeout=10
        ProxyPassReverse /rickshaw/ http://192.168.178.220:8082/rickshaw/ timeout=10</ifmodule>
        ! # Rewrite-Regeln für die socket.io Websocket-Verbindung von VIS und APP sowie Javascript-Adapter
        # Wichtig: Da socket.io im Webadapter auf intern steht, sollte hier auch auf den Web-Adapter und nicht auf einen separaten socket.io-Adapter referenziert werden.
        # Setzt externes WSS (Verschlüsselte Websocket-Verbindung) auf internen WS (ohne SSL/TLS) um.
        ! # Websocket Javascript
        <ifmodule mod_proxy.c="">RewriteEngine On
        Redirectmatch ^/socket.io$ /socket.io/
        RewriteCond %{REQUEST_URI} ^/socket.io/
        RewriteCond %{QUERY_STRING} transport=websocket
        RewriteCond %{QUERY_STRING} !key=
        RewriteRule ^/(.
        ) /wss2/$1 [PT]
        ProxyPass /wss2/socket.io/ ws://192.168.178.220:8081/socket.io/ timeout=1200 Keepalive=On</ifmodule>
        ! # Websocket VIS
        <ifmodule mod_proxy.c="">RewriteEngine On
        Redirectmatch ^/socket.io$ /socket.io/
        RewriteCond %{REQUEST_URI} ^/socket.io/
        RewriteCond %{QUERY_STRING} transport=websocket
        RewriteCond %{QUERY_STRING} key=
        RewriteRule ^/(.) /wss/$1 [PT]
        ProxyPass /wss/socket.io/ ws://192.168.178.220:8082/socket.io/ timeout=1200 Keepalive=On</ifmodule>
        ! # Rewrite-Regeln für die Datei _socket im Hauptverzeichnis vom Web-Server
        <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        Redirectmatch ^/_socket$ /_socket/
        RewriteCond %{REQUEST_URI} ^/_socket/
        ! RewriteRule (.
        ) $1 [PT]
        ProxyPass /_socket/ http://192.168.178.220:8082/_socket/
        ProxyPassReverse /_socket http://192.168.178.220:8082/_socket/</ifmodule>
        ! # Rewrite-Regeln für die socket.io Verbindung im Polling-Modus über HTTPS von VIS und APP sowie Javascript-Adapter
        # Wichtig: Da socket.io im Webadapter auf intern steht, sollte hier auch auf den Web-Adapter und nicht auf einen separaten socket.io-Adapter referenziert werden.

          # socket.io Javascript
          <ifmodule mod_proxy.c="">ProxyRequests off
             RewriteEngine On
             Redirectmatch ^/socket.io$ /socket.io/
             RewriteCond %{REQUEST_URI} ^/socket.io/
             RewriteCond %{QUERY_STRING} transport=polling
             RewriteCond %{QUERY_STRING} !key=
             RewriteRule (.*) /adminsocket/$1 [PT]
             ProxyPass /adminsocket/socket.io/ http://192.168.178.220:8081/socket.io/
             ProxyPassReverse /adminsocket/socket.io/ http://192.168.178.220:8081/socket.io/</ifmodule> 
        

        ! # socket.io VIS
        <ifmodule mod_proxy.c="">ProxyRequests off
        RewriteEngine On
        Redirectmatch ^/socket.io$ /socket.io/
        RewriteCond %{REQUEST_URI} ^/socket.io/
        RewriteCond %{QUERY_STRING} transport=polling
        RewriteCond %{QUERY_STRING} key=
        RewriteRule (.*) $1 [PT]
        ProxyPass /socket.io/ http://192.168.178.220:8082/socket.io/
        ProxyPassReverse /socket.io/ http://192.168.178.220:8082/socket.io/</ifmodule>
        ! # Parameter für die Steuerung der Log-Ausgabe beim Rewrite
        # Die Logausgabe kann durch Entfernen der # aktiviert werden
        #LogLevel warn
        #LogLevel alert rewrite:trace8
        #CustomLog ${APACHE_LOG_DIR}/ssl_access2.log combined
        ! # Generelles Anschalten von SSL
        SSLEngine on
        ! # Sonderregeln für Scripte
        <filesmatch ".(shtml|phtml|php)$"="">SSLOptions +StdEnvVars</filesmatch>
        <directory usr/lib/cgi-bin="">SSLOptions +StdEnvVars</directory></virtualhost></ifmodule>
        ! ````

        Wen ich im Webadapter die Option "Nur Web-Sockets" aktiviere lädt die Seite überhaupt nicht mehr, daher gehe ich mal davon aus, das der Zugriff über websocets bei mir nicht geht und daher das lange laden/neuladen kommt.

        1 Reply Last reply Reply Quote 0
        • N
          nobody last edited by

          Hallo robsdobs,

          aus den Log-Daten kann ich leider nicht erkennen, was genau die Fehlerursache ist.

          Ist das Modul proxy_wstunnel installiert und aktiviert?

          apachectl -M
          ````gibt die geladenen Module aus.
          
          Eine mögliche Ursache wäre, dass die Weiterleitung wegen einer der anderen Regeln zum falschen Ziel geleitet wird.
          
          Nimm mal zum Test alle anderen Websocket-Regeln außer der für VIS raus.
          
          Funktioniert es dann?
          
          Steht irgendwas im Rewrite-Log, wenn du dieses aktivierst?
          1 Reply Last reply Reply Quote 0
          • R
            robsdobs last edited by

            @nobody:

            Ist das Modul proxy_wstunnel installiert und aktiviert? `
            Vielen Dank!!

            Das war es. –> Modul aktiviert und jetzt geht es.

            1 Reply Last reply Reply Quote 0
            • lobomau
              lobomau last edited by

              @robsdobs:

              @nobody:

              Ist das Modul proxy_wstunnel installiert und aktiviert? `
              Vielen Dank!!

              Das war es. –> Modul aktiviert und jetzt geht es. `
              Muss man das haben? Bei mir taucht kein Modul proxy_wstunnel auf.

              Gibt ein paar Geräte die bei mir auch nicht ganz funktionieren. Vielleicht liegt es auch daran?

              Wie installiert man es?````
              sudo apt install proxy_wstunnel

              
              P.S: ach so… ich dachte es geht um den proxy Adapter :|
              
              Aber trotzdem... ich hatte es auch mal mit dem proxy Script versucht gehabt.
              1 Reply Last reply Reply Quote 0
              • W
                Wyse last edited by

                Danke für die Konfiguration. Ich benutze als Server einen ubuntu 18.04 und darauf läuft apache 2.4.29. Mit deiner Konfiguration lief alles nur die Abfrage nach dem Passwort leider nicht. Nach einer Recherche habe ich herausgefunden dass hier noch ein Abschnitt zum Proxy fehlt.

                    <proxy *="">Order deny,allow
                        Allow from all
                        Authtype Basic
                        Authname "Password Required"
                        AuthUserFile /etc/apache2/ssl/httpsusers
                        Require valid-user</proxy> 
                
                

                Nur als hinweis für alle die wie ich darüberstolpern dass die Abfrage nach dem Passwort nicht aufpoppt.

                Noch was die Weiterleitung zu meiner Raspmatic ccu funktioniert auch nicht zu 100%. Wenn ich auf https://domainname/ccu gehe werde ich nach https://domainname/index.htm?sid=@zwQZx7DKvk@ weitergeleitet. Korrekt wäre in dem Fall natürlich https://domainname/ccu/index.htm?sid=@zwQZx7DKvk@.

                Es fehlt vermutlich eine rewriterule. Leider sind Regular Expressions mal leider so gar nicht mein Fall.

                Hat mir jemand einen Tipp?

                Danke

                1 Reply Last reply Reply Quote 0
                • N
                  nobody last edited by

                  Hi,

                  ist korrekt. der fehlende Teil für die Sicherheitsabfrage fehlt noch im Beispiel.

                  Die interne Ziel-URL wird in den Zeilen mit ProxyPass und ProxyPassReverse definiert. Da könnte man das ändern wenn es da eine andere interne URL für Raspmatic geben sollte. Ich hab keine Raspmatic und kann das deswegen nicht ausprobieren.

                  			ProxyPass /ccu/ http://[ interne IP ]/ccu/ timeout=1200
                  			ProxyPassReverse /ccu/ http://[ interne IP ]/ccu/ timeout=1200
                  

                  Für die CCU2 waren bisher die Zeilen ohne ccu in der Ziel-URL richtig. Teilweise wurde aber auch mit absoluten Pfaden gearbeitet, wodurch die Rückauflösung auf /ccu nicht greift. Hier hat dann die Auflösung über den HTTP_REFERER gegriffen. Ich hab das jetzt mal mit der aktuellen 2.35.16 teilweise geprüft. Es scheint nun geändert zu sein und die Pfade sind relativ. Aber zumindest bei den Addons wie XML-API werden immer noch absolute Pfade verwendet.

                  1 Reply Last reply Reply Quote 0
                  • wtfka
                    wtfka last edited by

                    @Wyse:

                    Danke für die Konfiguration. Ich benutze als Server einen ubuntu 18.04 und darauf läuft apache 2.4.29. Mit deiner Konfiguration lief alles nur die Abfrage nach dem Passwort leider nicht. Nach einer Recherche habe ich herausgefunden dass hier noch ein Abschnitt zum Proxy fehlt.

                        <proxy *="">Order deny,allow
                            Allow from all
                            Authtype Basic
                            Authname "Password Required"
                            AuthUserFile /etc/apache2/ssl/httpsusers
                            Require valid-user</proxy> 
                    
                    

                    Nur als hinweis für alle die wie ich darüberstolpern dass die Abfrage nach dem Passwort nicht aufpoppt.

                    Noch was die Weiterleitung zu meiner Raspmatic ccu funktioniert auch nicht zu 100%. Wenn ich auf https://domainname/ccu gehe werde ich nach https://domainname/index.htm?sid=@zwQZx7DKvk@ weitergeleitet. Korrekt wäre in dem Fall natürlich https://domainname/ccu/index.htm?sid=@zwQZx7DKvk@.

                    Es fehlt vermutlich eine rewriterule. Leider sind Regular Expressions mal leider so gar nicht mein Fall.

                    Hat mir jemand einen Tipp?

                    Danke `

                    Vielen Dank für den Tipp mit dem Proxy, ich wäre fast wahnsinnig geworden.

                    Vielleicht kann doch mal jemand den Part mit in die Doku übernehmen??

                    1 Reply Last reply Reply Quote 0
                    • wtfka
                      wtfka last edited by

                      @nobody:

                      Hallo Sascha,

                      ich hab mit Bluefox gesprochen und wir haben doch eine Lösung für die Unterscheidung gefunden:

                      Die Socket-IO-Aufrufe für VIS haben den Parameter key, die für Javascript jedoch nicht. Deswegen habe ich das Skript entsprechend angepasst:

                      Hier der aktuelle Stand des Skripts:

                      # Dieses Template enthält Rewrite-Regeln für die Verwendung von Apache 2.4.x als Reverse Proxy mit SSL-Unterstützung für die folgenden Komponenten:
                      # - ioBroker VIS/Flot/Rickshaw
                      # - ioBroker Admin
                      # - ioBroker node-red
                      # - ioBroker socket-io im Web-Adapter
                      # - Zugriff auf CCU1/2
                      # - ioBroker Javascript-Adapter
                      #
                      # folgende Module müssen in Apache mindestens installiert und aktiviert sein:
                      # - ssl
                      # - proxy
                      # - rewrite
                      # - proxy_wstunnel
                      # - mpm_prefork
                      # - mod_auth_basic
                      # - mod_authn_file  -- oder andere Authentifizierungsquelle
                      # 
                      # Alle Einträge in eckigen Klammern [] sind durch die eigenen Daten zu ersetzen.
                      #
                      # Die Berechtigungsprüfung erfolgt durch Apache mittels HTTP-Basic Authentication oder Parameter an der URL.  Dies hat den Vorteil, das unberechtigte Anfragen erst garnicht zu den Systemen gelangen.
                      # Da die Verbindung mit SSL/TLS gesichert ist, ist basic-Authentication vollständig ausreichend und am schnellsten. 
                      # In den lokalen Systemen ist die Authentifizierung auszuschalten, da die Authentifizierungsdaten nicht durchgereicht werden.
                      # Die Skripte gehen davon aus, dass die lokalen Systeme mittels http angesprochen werden. Falls nicht, müssen die Zeilen entsprechend angepasst werden.
                      
                      # Folgender Teil ist nur erforderlich, wenn man einen lokalen Bereich auf dem Webserver haben möchte, der unter der gleichen URL erreichbar ist (z.B. um statische Daten abzulegen) und bei dem ein Caching durch den Webserver erfolgen soll.
                       <ifmodule mod_cache.c="">LoadModule cache_disk_module modules/mod_cache_disk.so
                          <ifmodule mod_cache_disk.c="">CacheRoot "/var/www"
                              CacheEnable disk  "/"
                              CacheDirLevels 5
                              CacheDirLength 3</ifmodule> 
                      
                          # When acting as a proxy, don't cache the list
                          CacheDisable "/ccu/"
                          CacheDisable "/vis/"
                          CacheDisable "/iobroker/"
                          CacheDisable "/node-red/"</ifmodule> 
                      
                      # Oberste Modul-Deklaration für den kompletten durch ssl gesicherten Service
                       <ifmodule mod_ssl.c=""># Festlegung des Ports, über den der Server erreichbar sein soll.
                         <virtualhost _default_:443="">ServerAdmin [ Email des Administrators (Optional)]
                            ServerName [ Externe URL des Servers ohne Protokoll, z.B.  haus.meineurl.de] 
                      
                            # Stammverzeichnis des Webservers für lokale Inhalte
                            DocumentRoot /var/www
                      
                              # Festlegung der Eigenschaften für das Root-Directory auf dem Webserver und alle Unterverzeichnisse
                            <directory>Options FollowSymLinks
                               AllowOverride None
                      
                                  # Festlegung der Authentifizierungseigenschaften 
                               # Hier wird basic-Authentification mit Liste der berechtigten User konfiguriert.
                               # Anleitung zur Konfiguration von Benutzern siehe https://httpd.apache.org/docs/current/howto/auth.html
                               AuthType basic
                               AuthName "home"
                               AuthBasicProvider file
                               AuthUserFile /etc/apache2/ssl/httpsusers
                      
                               # Festlegung, dass die Authentifizierung erfordlich ist. Speziell für die App kann kein Basic-Authentication verwendet werden, da diese Teile im Protokoll nicht enthalten sind.
                               # Für die App kann alternativ auf die dort angegeben Daten für User und Password geprüft werden. Diese Werte werden in der URL als Parameter übertragen.
                               # Die Werte werden nicht aus der Passwort-Datei ausgelesen sondern müssen hier statisch konfiguriert werden. 
                               # Wichtig: Nur der erste Request muss beim Öffnen der Verbindung authentifizieren. 
                               # Alle nachfolgenden Request über die gleiche http-Verbindung verwenden automatisch die gleichen Credentials. Deswegen ist beim Zugriff auf VIS die http-Authentifizierung für index.html ausreichend.
                               <requireany># Zugriff über URL-Authentifizierung
                                  <requireall># Erlaubt auch noch die Einschänkung auf andere Eigenschaften
                                     Require expr %{QUERY_STRING} =~ /user=[ Benutzername in der APP ]&pass=[ Passwort in der APP ]/</requireall> 
                                      # Für alle anderen Zugriffe ist http-Authentifizierung erforderlich  
                                  Require valid-user</requireany></directory> 
                      
                              # Eintrag falls noch lokale Scripte wie z.B. PHP unterstützt werden sollen (muss natürlich getrennt installiert und eingerichtet werden)
                            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
                            <directory "/usr/lib/cgi-bin"="">AllowOverride None
                               Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                               Order allow,deny
                               Allow from all</directory> 
                      
                            # Einrichtung der Zertifikate für die Verschlüsselung
                            # Weitere Informationen siehe z.B. https://thomas-leister.de/apache2-webserver-ssl-verschluesselte-verbindungen-ermoeglichen/
                            SSLCertificateFile /etc/apache2/ssl/[ Name der Zertifikatdatei ].crt
                            SSLCertificateKeyFile /etc/apache2/ssl/[ Name der Datei mit dem privaten Schnlüssel ].key
                            SSLCertificateChainFile /etc/apache2/ssl/[ evtl Name der Datei mit der Key Chain bis zum Root-Zertifikat ].crt
                      
                            
                            
                            # Rewrite-Regeln
                            # Wichtig: Bei den nachfolgenden Mod-Proxy-Einträgen ist die Reihenfolge relevant. Die Auswertung erfolgt von oben nach unten. Das erste passende ProxyPass-Statement gilt.
                            
                            
                              # Weiterleitung für Node-Red
                            # Wichtig: Damit die Websocket-Verbindung korrekt weitergeleitet werden kann, muss in den Adapter-Einstellungen von Node-Red in "http root directory" "node-red" eingetragen werden.
                            # Ohne Websocket-Verbindung kann man trotzdem auf die IDE zugreifen, bekommt jedoch keine Debug-Information angezeigt.
                            # Der Zugriff auf Node-erfolgt dann intern http://[ interne IP ]:1880/node-red und extern über https://[ externe URL ]/node-red
                            <ifmodule mod_proxy.c="">RewriteEngine On 
                               redirectmatch ^/node-red$ /node-red/
                               
                               # Spezieller Eintrag für websocket-Verbindung
                               RewriteCond %{REQUEST_URI} ^/node-red/comms [NC] 
                               RewriteRule /(.*) ws://[ interne IP ]:1880/$1 [P,L] 
                               
                               ProxyPass /node-red/ http://[ interne IP ]:1880/node-red/ 
                               ProxyPassReverse /node-red/ http://[ interne IP ]:1880/node-red/</ifmodule> 
                      
                            # Prototyp für Foscam Webcam
                            # Der Zugriff auf die Webcam dann extern über https://[ externe URL ]/video1
                      
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               redirectmatch ^/video1$ /video1/
                               rewritecond %{REQUEST_URI} ^/video1/
                               rewriterule (.*) $1 [PT]
                      
                               # Referer Auswertung, falls eine lokale absolute Referenz auf den Seiten ist. In diesem Fall wird /video1 ergänzt, damit ProxyPass matched.
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/video1/ 
                               rewriterule ^/(.*) /video1/$1 [PT]
                               
                               ProxyPass /video1/ http://[ interne IP ]/
                               ProxyPassReverse /video1/ http://[ interne IP ]/</ifmodule> 
                      
                            
                            # Rewrite-Regeln für Homematic CCU 
                            # Stammt ursprünglich aus Homematic Forum
                            # Der Zugriff auf die CCU efolgt intern weiterhin über http://[ interne IP ] und extern über https://[ externe URL ]/ccu
                      
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               redirectmatch ^/ccu$ /ccu/
                               rewritecond %{REQUEST_URI} ^/ccu/
                               rewriterule (.*) $1 [PT]
                      
                               # Referer Auswertung, falls eine lokale absolute Referenz auf den Seiten ist. In diesem Fall wird /ccu ergänzt, damit ProxyPass matched.
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/ccu/ [OR]
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/webui/ [OR]
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/pda/ [OR]
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/api/ [OR]
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/addons/xmlapi/ [OR]
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/addons/cuxd/
                               rewritecond %{HTTP_REFERER} \?sid\=\@.+\@ [OR]
                               rewritecond %{THE_REQUEST} \?sid\=\@.+\@
                               rewriterule ^/(.*) /ccu/$1 [PT]
                               rewriterule ^/pda/(.*) /ccu/pda/$1
                               rewriterule ^/webui/(.*) /ccu/webui/$1
                               rewriterule ^/addons/db/(.*) /ccu/addons/db/$1
                               rewriterule ^/addons/xmlapi/(.*) /ccu/addons/xmlapi/$1
                               rewriterule ^/addons/cuxd/(.*) /ccu/addons/cuxd/$1
                               ProxyPass /ccu/ http://[ interne IP ]/ timeout=1200
                               ProxyPassReverse /ccu/ http://[ interne IP ]/ timeout=1200</ifmodule> 
                      
                            # Rewrite-Regeln für ioBroker Admin
                            # Der Zugriff auf die Admin-Seite efolgt intern weiterhin über http://[ interne IP ]:8081 und extern über https://[ externe URL ]/iobroker
                            
                                      # Websocket Admin
                                     <ifmodule mod_proxy.c="">RewriteEngine On 
                                           Redirectmatch ^/iobroker/socket.io$ /iobroker/socket.io/
                                           RewriteCond %{REQUEST_URI} ^/iobroker/socket.io/ 
                                           RewriteCond %{QUERY_STRING} transport=websocket
                                           RewriteRule ^/(.*) /iobrokerwss/$1 [PT]
                                           ProxyPass /iobrokerwss/iobroker/socket.io/ ws://localhost:8081/socket.io/ timeout=1200 Keepalive=On</ifmodule> 
                      
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               redirectmatch ^/iobroker$ /iobroker/
                               rewritecond %{REQUEST_URI} ^/iobroker/
                               rewriterule (.*) $1 [PT]
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/iobroker/ [OR]
                                              rewritecond %{REQUEST_URI} ^/css/adapter.css [OR]
                                              rewritecond %{REQUEST_URI} ^/js/translate.js [OR]
                                              rewritecond %{REQUEST_URI} ^/js/adapter/ [OR]
                                              rewritecond %{REQUEST_URI} ^/adapter/ [OR]
                                              rewritecond %{REQUEST_URI} ^/js/adapter-settings.js [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/jqGrid/ [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/css/jquery.multiselect-1.13.css [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/jquery-ui.min.js [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/loStorage.js [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/ace.js [OR]
                                              rewritecond %{REQUEST_URI} ^/js/selectID.js  [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/loStorage.js  [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/ace.js [OR]
                                              rewritecond %{REQUEST_URI} ^/js/selectID.js [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/mode-javascript.js [OR]
                                              rewritecond %{REQUEST_URI} ^/lib/js/ace-1.2.0/worker-javascript.js      
                               rewriterule ^/(.*) /iobroker/$1 [PT]
                      
                               ProxyPass /iobroker/ http://[ interne IP ]:8081/ timeout=1200
                               ProxyPassReverse /iobroker/ http://[ interne IP ]:8081/ timeout=1200</ifmodule> 
                      
                            # Rewrite-Regeln für ioBroker VIS
                            # Die socket.io-Kommunikation und der Zugriff auf /lib wird nachfolgend getrennt geregelt (geht bestimmt auch einfacher hier lokal)
                            # Wichtig: Im web-Adapter mit "Socket.IO Instance" auf integriert stehen.
                            # Der Zugriff auf die Admin-Seite efolgt intern weiterhin über http://[ interne IP ]:8082/vis/index.html und extern über https://[ externe URL ]/vis/vis/index.html. 
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               redirectmatch ^/vis$ /vis/
                               rewritecond %{REQUEST_URI} ^/vis/
                               rewriterule (.*) $1 [PT]
                      
                               # Referer Auswertung, falls eine lokale absolute Referenz auf den Seiten ist. In diesem Fall wird /vis ergänzt, damit ProxyPass matched.
                               # Referenzen auf node-red, static und socket.io werden explizit ausgeschlossen.
                               rewritecond %{HTTP_REFERER} https://[ externe URL ]/vis/
                               rewritecond %{REQUEST_URI} !^/node-red/
                               rewritecond %{REQUEST_URI} !^/static/
                               rewritecond %{REQUEST_URI} !^/socket.io/
                               rewriterule ^/(.*) /vis/$1 [PT]
                               
                               ProxyPass /vis/ http://[ interne IP ]:8082/ timeout=10
                               ProxyPassReverse /vis/ http://[ interne IP ]:8082/ timeout=10</ifmodule> 
                      
                            # Rewrite-Regeln für einen direkten Zugriff auf das Verzeichnis /lib des Web-Servers von ioBroker VIS ohne Referer
                            # Dürfte normalerweise nicht benötigt werden.
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               redirectmatch ^/lib$ /lib/
                               rewritecond %{REQUEST_URI} ^/lib/
                               rewriterule (.*) $1 [PT]
                               ProxyPass /lib/ http://[ interne IP ]:8082/lib/ timeout=10
                               ProxyPassReverse /lib/ http://[ interne IP ]:8082/lib/ timeout=10</ifmodule> 
                      
                            # Rewrite-Regeln für einen direkten Zugriff auf auf flot ohne VIS
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               redirectmatch ^/flot$ /flot/
                               rewritecond %{REQUEST_URI} ^/flot/
                               rewriterule (.*) $1 [PT]
                               ProxyPass /flot/ http://[ interne IP ]/flot/ timeout=10
                               ProxyPassReverse /flot/ http://[ interne IP ]:8082/flot/ timeout=10</ifmodule> 
                      
                            # Rewrite-Regeln für einen direkten Zugriff auf auf rickshaw ohne VIS
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               redirectmatch ^/rickshaw$ /rickshaw/
                               rewritecond %{REQUEST_URI} ^/rickshaw/
                               rewriterule (.*) $1 [PT]
                               ProxyPass /rickshaw/ http://[ interne IP ]:8082/rickshaw/ timeout=10
                               ProxyPassReverse /rickshaw/ http://[ interne IP ]/rickshaw/ timeout=10</ifmodule> 
                      
                            # Rewrite-Regeln für die socket.io Websocket-Verbindung von VIS und APP sowie Javascript-Adapter
                            # Wichtig: Da socket.io im Webadapter auf intern steht, sollte hier auch auf den Web-Adapter und nicht auf einen separaten socket.io-Adapter referenziert werden.
                            # Setzt externes WSS (Verschlüsselte Websocket-Verbindung) auf internen WS (ohne SSL/TLS) um.
                      
                                      # Websocket Javascript
                            <ifmodule mod_proxy.c="">RewriteEngine On 
                               Redirectmatch ^/socket.io$ /socket.io/
                               RewriteCond %{REQUEST_URI} ^/socket.io/ 
                               RewriteCond %{QUERY_STRING} transport=websocket
                               RewriteCond %{QUERY_STRING} !key=
                               RewriteRule ^/(.*) /wss2/$1 [PT]
                               ProxyPass /wss2/socket.io/ ws://[ interne IP ]:8081/socket.io/ timeout=1200 Keepalive=On</ifmodule> 
                      
                            # Websocket VIS
                            <ifmodule mod_proxy.c="">RewriteEngine On 
                               Redirectmatch ^/socket.io$ /socket.io/
                               RewriteCond %{REQUEST_URI} ^/socket.io/ 
                               RewriteCond %{QUERY_STRING} transport=websocket
                               RewriteCond %{QUERY_STRING} key=
                               RewriteRule ^/(.*) /wss/$1 [PT]
                               ProxyPass /wss/socket.io/ ws://[ interne IP ]:8082/socket.io/ timeout=1200 Keepalive=On</ifmodule> 
                      
                            # Rewrite-Regeln für die Datei _socket im Hauptverzeichnis vom Web-Server
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               Redirectmatch ^/_socket$ /_socket/
                               RewriteCond %{REQUEST_URI} ^/_socket/
                      
                               RewriteRule (.*) $1 [PT]
                               ProxyPass /_socket/ http://[ interne IP ]:8082/_socket/
                               ProxyPassReverse /_socket http://[ interne IP ]:8082/_socket/</ifmodule> 
                      
                            # Rewrite-Regeln für die socket.io Verbindung im Polling-Modus über HTTPS von VIS und APP sowie Javascript-Adapter
                            # Wichtig: Da socket.io im Webadapter auf intern steht, sollte hier auch auf den Web-Adapter und nicht auf einen separaten socket.io-Adapter referenziert werden.
                            
                            # socket.io Javascript
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               Redirectmatch ^/socket.io$ /socket.io/
                               RewriteCond %{REQUEST_URI} ^/socket.io/
                               RewriteCond %{QUERY_STRING} transport=polling
                               RewriteCond %{QUERY_STRING} !key=
                               RewriteRule (.*) /adminsocket/$1 [PT]
                               ProxyPass /adminsocket/socket.io/ http://[ interne IP ]:8081/socket.io/
                               ProxyPassReverse /adminsocket/socket.io/ http://[ interne IP ]:8081/socket.io/</ifmodule> 
                      
                            # socket.io VIS
                            <ifmodule mod_proxy.c="">ProxyRequests off
                               RewriteEngine On
                               Redirectmatch ^/socket.io$ /socket.io/
                               RewriteCond %{REQUEST_URI} ^/socket.io/
                               RewriteCond %{QUERY_STRING} transport=polling
                               RewriteCond %{QUERY_STRING} key=
                               RewriteRule (.*) $1 [PT]
                               ProxyPass /socket.io/ http://[ interne IP ]:8082/socket.io/
                               ProxyPassReverse /socket.io/ http://[ interne IP ]:8082/socket.io/</ifmodule> 
                      
                            # Parameter für die Steuerung der Log-Ausgabe beim Rewrite
                            # Die Logausgabe kann durch Entfernen der # aktiviert werden
                            #LogLevel warn 
                            #LogLevel alert rewrite:trace8
                            #CustomLog ${APACHE_LOG_DIR}/ssl_access2.log combined 
                      
                            # Generelles Anschalten von SSL
                            SSLEngine on 
                      
                            # Sonderregeln für Scripte
                            <filesmatch "\.(shtml|phtml|php)$"="">
                               SSLOptions +StdEnvVars 
                            </filesmatch> 
                            <directory usr/lib/cgi-bin=""> 
                               SSLOptions +StdEnvVars 
                            </directory></virtualhost></ifmodule> 
                      
                      

                      Kannst du prüfen, ob dies so auch bei dir funktioniert?

                      Viele Grüße

                      Markus ` Auch wenn der Beitrag schon uralt ist, hat er mir dennoch sehr gut weitergeholfen. Vielen Dank!

                      (Schade, dass diese Config hier nicht in der Dokumentation ist…)

                      Gesendet von meinem Mi MIX 2S mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • M
                        Marc_St last edited by

                        Re: IoBroker (und vis) über ReverseProxy

                        Liebe alle,

                        zunächst besten Dank für den Content hier und sorry für das Hochholen eines doch alten Threads.

                        Ich habe ein Problem: Die Konfiguration ist ja auf basic-Authentication ausgelegt, und die Authentifizierung in Admin und VIS muss ausgeschaltet werden:

                        # Die Berechtigungsprüfung erfolgt durch Apache mittels HTTP-Basic Authentication oder Parameter an der URL.  Dies hat den Vorteil, das unberechtigte Anfragen erst garnicht zu den Systemen gelangen.
                        # Da die Verbindung mit SSL/TLS gesichert ist, ist basic-Authentication vollständig ausreichend und am schnellsten. 
                        # In den lokalen Systemen ist die Authentifizierung auszuschalten, da die Authentifizierungsdaten nicht durchgereicht werden.
                        

                        Nun möchte ich aber eben doch anstelle von HTTP-Basic Auth doch lieber mit der Authentifizierung in den Modulen arbeiten. Aus meiner Sicht gibt es dazu zwei gute Gründe: 1) Ich kann am Rechner die Credentials speichern lassen, was bei HTTP-Basic Auth bspw. im iPhone nicht geht, und 2.) die tolle, neue ioBroker app.

                        Ich bekomme es aber einfach nicht hin. Wenn ich mich auf domain.de/vis/... einlogge, springt der Dialog zu domain.de/login, was natürlich nicht geht, da domain.de/vis/login richtig wäre ...

                        Ich bin da leider mit meinem Latein am ende. Ist das viel zu ändern? Oder geht technisch nicht, was ich vorhabe?

                        Danke!

                        Marc

                        T 1 Reply Last reply Reply Quote 0
                        • 1
                          123flip @MrLee last edited by 123flip

                          @MrLee said in IoBroker (und vis) über ReverseProxy:

                          nginx

                          Nochmals die Nachfrage: Hat das schon mal jemand mit NGINX erfolgreich zum Laufen gebracht? Habe jetzt verschiedenste Konfigurationen probiert, aber es funktioniert leider nicht...

                          R 1 Reply Last reply Reply Quote 0
                          • D
                            dodi666 last edited by

                            Hallo zusammen,
                            gibt es eine laufende Reverse Proxy Konfiguration für den iobroker und die CCU?
                            Die alte für den Apache bekomme ich leider nicht mehr ans laufen...

                            Grüße Sascha

                            1 Reply Last reply Reply Quote 0
                            • R
                              robotastic @123flip last edited by robotastic

                              Hi @123flip und Hi Forum 🙂 ,

                              ich nutze aktuell zwar eigentlich lovelace, habe aber mal eben vis installiert und die config erweitert und getestet. Auf den ersten Blick scheint alles zu funktionieren. Ich habe mal beides drin gelassen, so dass sich jeder nach Bedarf die entsprechenden Teile rauspicken kann. Ports und Servername(myiobrokerurl) können natürlich nach Bedarf angepasst werden. Bei Rückfragen gerne melden.

                              Als Bonus hab ich auch noch eine Config für MQTTS angehängt 🙂

                              Anzupassen

                              • Ports
                              • Servername (myiobrokerurl)
                              • Pfade für SSL-Zertifikat und Key

                              Urls und Ports:

                              • Admin https: //myiobrokerurl
                              • Lovelace https ://myiobrokerurl:8092
                              • Vis https ://myiobrokerurl:8083

                              nginx/conf.d/iobroker.conf

                              #admin config
                              server { # simple reverse-proxy
                                  listen 80;
                                  listen [::]:80;
                              
                                  return 301 https://myiobrokerurl$request_uri;
                              }
                              
                              server{
                                  listen 443;
                                  listen [::]:443;
                              
                                  server_name myiobrokerurl;
                                  ssl_certificate /etc/ssl/certs/myiobrokerurl.cert.pem;
                                  ssl_certificate_key /etc/ssl/private/myiobrokerurl.key.pem;
                              
                                  ssl on;
                                  ssl_session_cache  builtin:1000  shared:SSL:10m;
                                  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
                                  ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
                                  ssl_prefer_server_ciphers on;
                              
                                  access_log            /var/log/nginx/myiobrokerurl.access.log;
                              
                                  location / {
                              
                                    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;
                              
                                    proxy_pass          http://127.0.0.1:8081;
                                    proxy_read_timeout  90;
                              
                                    proxy_redirect      http://127.0.0.1:8081 https://myiobrokerurl;
                                  }
                              }
                              #admin end
                              
                              #lovelace config
                              map $http_upgrade $connection_upgrade {
                                  default upgrade;
                                  '' close;
                              }
                              
                              
                              server{
                                  listen 8083;
                                  listen [::]:8083;
                              
                                  server_name myiobrokerurl;
                                  ssl_certificate /etc/ssl/certs/myiobrokerurl.cert.pem;
                                  ssl_certificate_key /etc/ssl/private/myiobrokerurl.key.pem;
                              
                                  ssl on;
                                  ssl_session_cache  builtin:1000  shared:SSL:10m;
                                  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
                                  ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
                                  ssl_prefer_server_ciphers on;
                              
                                  access_log            /var/log/nginx/myiobrokerurl.access.log;
                              
                                  location / {
                              
                                    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;
                              
                                    proxy_pass          http://127.0.0.1:8082;
                                    proxy_read_timeout  90;
                              
                                    proxy_redirect      http://127.0.0.1:8082 https://myiobrokerurl:8082;
                                  }
                              }
                              #lovelace end
                              
                              #vis conf
                              server{
                                  listen 8092;
                                  listen [::]:8092;
                              
                                  server_name myiobrokerurl;
                                  ssl_certificate /etc/ssl/certs/myiobrokerurl.cert.pem;
                                  ssl_certificate_key /etc/ssl/private/myiobrokerurl.key.pem;
                              
                                  ssl on;
                                  ssl_session_cache  builtin:1000  shared:SSL:10m;
                                  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
                                  ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
                                  ssl_prefer_server_ciphers on;
                              
                                  access_log            /var/log/nginx/myiobrokerurl.access.log;
                              
                                  location / {
                              
                                    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;
                              
                                    proxy_pass          http://127.0.0.1:8091;
                                    proxy_read_timeout  90;
                              
                                    proxy_redirect      http://127.0.0.1:8091 https://myiobrokerurl:8091;
                                  }
                              
                                  location /api/websocket {
                                      proxy_pass http://myiobrokerurl:8091/api/websocket;
                                      proxy_http_version 1.1;
                                      proxy_set_header Upgrade $http_upgrade;
                                      proxy_set_header Connection $connection_upgrade;
                                      proxy_set_header Host $host;
                                  }
                              }
                              #vis end
                              

                              nginx/stream_conf.d/mqtts.conf

                              server {
                                  listen 8883 ssl; # MQTT secure port
                              
                                  ssl_certificate     /etc/ssl/certs/myiobrokerurl.cert.pem;
                                  ssl_certificate_key /etc/ssl/private/myiobrokerurl.key.pem;
                                  ssl_ciphers         HIGH:!aNULL:!MD5;
                                  ssl_session_tickets on;
                                  ssl_session_timeout 8h;
                              
                                  proxy_pass 127.0.0.1:1883;
                                  proxy_connect_timeout 1s;
                              }
                              
                              1 1 Reply Last reply Reply Quote 0
                              • D
                                dodi666 last edited by

                                Vielen Dank @robotastic,
                                sofern keiner was laufendes für den Apache im Angebot hat, würde ich mir mal nginx anschauen...
                                Kannst du mir vielleicht noch dabei helfen, die CCU auch über diesen Weg einzubinden?

                                Grüße
                                Sascha

                                R 1 Reply Last reply Reply Quote 0
                                • R
                                  robotastic @dodi666 last edited by

                                  @dodi666 Leider habe ich keine CCU um das zu testen und weiß auch leider nicht, wie das ganze aufgebaut ist. Muss ein location Aufruf sein oder reicht auch eine Port Weiterleitung? Welche Protokolle werden verwendet?

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    dodi666 last edited by

                                    Hi,
                                    beim Apache habe ich es mittels einfacher Weiterleitung hinbekommen. Leider nur für Port 80 und die Weiterleitung des iobroker habe ich garnicht hinbekommen. Ich versuche mich in den nächsten Tagen erstmal mit der nginx Installation. Zudem würde ich die gerne mit einem htaccess Passwortschutz versehen, und eine SSL Verschlüsselung vorsehen. Dann wäre das Ziel den iobroker über eine URL und die ccu über eine zweite URL von außen zugänglich zu machen. Was deine Fragen zur CCU angeht, kannst du die Antworten ggf. in der Apache Konfiguration in diesem Thread sehen? Bitte nicht falsch verstehen, aber ich lese mich gerade erst in das Thema ein, und bin der totale Anfänger 😬

                                    1 Reply Last reply Reply Quote 0
                                    • T
                                      tigiba @Marc_St last edited by

                                      @Marc_St
                                      Ich hätte den selben Wunsch: Verwendung der in IO-Broker eingebauten Authentifizierung samt unterschiedliche Berechtigungen für unterschiedliche User - und das über einen Apache reverse proxy.

                                      Geht das? Hat das schon jemand geschafft? Ich stehe ziemlich an, und auch ohne Authentifizierung bin ich mit der aus diesem Thread hervorgegangenen Doku auf https://www.iobroker.net/docu/index-303.htm?page_id=5082&lang=de bin leider bisher nicht sehr weit gekommen...

                                      1 Reply Last reply Reply Quote 0
                                      • 1
                                        123flip @robotastic last edited by

                                        @robotastic
                                        Nach langer Zeit wollte ich heute mal wieder schauen, ob sich hier was getan hat und ich danke dir für deine Beispielkonfiguration.
                                        Wundersamerweise funktioniert nun meine alte Konfiguration, ich nehme an, dass es irgendwelche Updates bei iobroker gab, die das verbessert hat.

                                        Mein Problem waren immer die Websocket-Verbindungen über die Pfade ".../socket.io/". Leider finde ich dazu in deiner Konfiguration nichts.

                                        Anbei noch meine aktuelle Konfiguration:

                                        server {
                                            listen 443 ssl;
                                            server_name myhost.de;
                                            server_tokens off;
                                        
                                            ssl_certificate ./fullchain.pem;
                                            ssl_certificate_key ./privkey.pem;
                                            include /etc/letsencrypt/options-ssl-nginx.conf;
                                            ssl_dhparam ./ssl-dhparams.pem;
                                        
                                            location / {
                                                proxy_pass  http://ioBroker:8082;
                                                proxy_set_header    Host                $http_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;
                                                satisfy any;
                                                auth_basic            "Access Restricted";
                                                auth_basic_user_file  .htpasswd;
                                                proxy_set_header Upgrade $http_upgrade;
                                                proxy_set_header Connection "Upgrade";
                                                proxy_http_version 1.1;
                                            }
                                            
                                            #location /socket.io {
                                            #try_files $uri $uri/ @websocket;
                                            #}
                                        
                                            #location @websocket {
                                            #    proxy_pass http://ioBroker:8082/socket.io/;
                                            #    proxy_http_version 1.1;
                                            #    proxy_set_header Upgrade $http_upgrade;
                                            #    proxy_set_header Connection "upgrade";
                                            #}
                                            location /socket.io/socket.io.js {
                                                #proxy_set_header Upgrade $http_upgrade;
                                                #proxy_set_header Connection "Upgrade";
                                                #proxy_http_version 1.1;
                                                #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                                #proxy_set_header Host $host;
                                                proxy_pass http://ioBroker:8082/socket.io/socket.io.js;
                                            }
                                                
                                            location /socket.io {
                                                proxy_set_header Upgrade $http_upgrade;
                                                proxy_set_header Connection "Upgrade";
                                                proxy_http_version 1.1;
                                                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                                proxy_set_header Host $host;
                                                proxy_pass http://ioBroker:8082/socket.io;
                                            }
                                        }
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • spicer
                                          spicer last edited by spicer

                                          Hallo
                                          Ich nehme mal den alten Thread aus der Versenkung.
                                          Ich habe den apache2 reverse Proxy nach dieser Anleitung installiert:
                                          https://www.iobroker.net/docu/index-303.htm?page_id=5082&lang=de
                                          Das ist doch das, worüber hier diskutiert wird, oder?
                                          Wenn ich mich auf domain.de/vis/... einlogge, springt der Dialog zu domain.de/login/index.html?href=%2Flogin, was natürlich nicht geht, da domain.de/vis/login richtig wäre ...
                                          Kann mir da jemand behilflich sein oder gar eine aktuellere Anleitung empfehlen?

                                          Ach ja, ich benutze die Ports 81 und 444, da 80 und 443 von deCONZ besetzt sind.

                                          Edit:
                                          Problem gelöst. Habe nun auch nginx installiert.

                                          M 1 Reply Last reply Reply Quote 0
                                          • M
                                            Milraun @spicer last edited by

                                            Kann bitte noch einmal jemand eine aktuell nginx Konfiguration posten.

                                            Meine Vis hinter dem ReverseProxy behauptet immer sie hätte keine Connection.

                                            Ich bin schon etwas verzweifelt.

                                            Milraun

                                            spicer 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            466
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            19
                                            71
                                            18038
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo