Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. IoBroker (und vis) über ReverseProxy

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

IoBroker (und vis) über ReverseProxy

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
71 Beiträge 19 Kommentatoren 21.8k Aufrufe 9 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • R Offline
    R Offline
    robsdobs
    schrieb am zuletzt editiert von
    #38

    Man kann auch aus Umgebungen heraus zugreifen, bei denen VPN Verbindungen schlicht gesperrt sind.

    Gesendet von meinem A0001 mit Tapatalk

    Scripte: http://forum.iobroker.net/viewtopic.php?f=23&t=2799&p=119565#p119565,

    1 Antwort Letzte Antwort
    0
    • D Offline
      D Offline
      dodi666
      schrieb am zuletzt editiert von
      #39

      @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
      .
      .
      .
      .
             
         
      
      

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

      Viele Grüße

      Markus `

      Hi Markus,

      habe es gerade kurz angetestet und es scheint zu funktionieren.

      Werde die nächsten Tage noch was intensiver testen und dann berichten.

      Ganz lieben Dank

      Gruß

      Sascha

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        patrick131184
        schrieb am zuletzt editiert von
        #40

        Hallo zusammen,

        ich benutze aktuell folgende konfig:

        http://forum.iobroker.net/viewtopic.php … 227#p31971

        Leider habe ich das Problem, das ich beim Zugriff meine Anzeige immer wieder neu lädt (fast jede Minute).

        Wenn ich die Webseitenanzeige intern aufrufe ist alles gut.

        Kann es sein, dass ich hier in einen Timeout laufe?

        Hat jemand das Problem auch schonmal gehabt?

        Viele Grüße Patrick
        4015_2017-11-03_10_50_54-vis.png

        1 Antwort Letzte Antwort
        0
        • D Offline
          D Offline
          dodi666
          schrieb am zuletzt editiert von
          #41

          Hi,

          seid dem letzten ioBroker Update habe ich auch wieder Probleme.

          • ioBroker.admin Objekte, wird nicht geladen

          • ioBroker.admin Aufzählungen, wird nicht geladen

          • ioBroker.admin Skripte, wird nicht geladen

          gibt es einen Fix dazu?

          Grüße

          Sascha

          1 Antwort Letzte Antwort
          0
          • N Offline
            N Offline
            nobody
            schrieb am zuletzt editiert von
            #42

            @dodi666:

            Hi,

            seid dem letzten ioBroker Update habe ich auch wieder Probleme.

            • ioBroker.admin Objekte, wird nicht geladen

            • ioBroker.admin Aufzählungen, wird nicht geladen

            • ioBroker.admin Skripte, wird nicht geladen

            gibt es einen Fix dazu? `
            Hi,

            tritt das Problem immer noch auf?

            Ich hab heute alle Updates eingespielt und den Browser-Cache gelöscht. Bisher funktioniert bei mir der Zugriff über den Reverse Proxy.

            Gruß

            Markus

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              dodi666
              schrieb am zuletzt editiert von
              #43

              Jetzt geht es seltsamerweise wieder.

              Muss ich mir in Ruhe nochmal anschauen.

              Grüße

              Sascha

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                patrick131184
                schrieb am zuletzt editiert von
                #44

                Hallo zusammen,

                ich habe den "reloading Fehler" leider immer noch :(

                Habe nochmal die komplette apache Konfig nach diesem Guide eingerichtet. http://www.iobroker.net/docu/?page_id=5082&lang=de

                in den apache logs steht einge sekunden vor dem erneuten reloaden:

                [Fri Nov 10 12:59:02.566563 2017] [proxy_http:error] [pid 28777] (70007)The timeout specified has expired: [client 80.139.xxx.xxx:53881] AH01102: error reading status line from remote server 192.168.0.12:8082, referer: https://xxx.home-webserver.de/vis/vis/index.html
                [Fri Nov 10 12:59:02.566805 2017] [proxy:error] [pid 28777] [client 80.139.xxx.xxx:53881] AH00898: Error reading from remote server returned by /socket.io/, referer: https://xxx.home-webserver.de/vis/vis/index.html
                
                1 Antwort Letzte Antwort
                0
                • N Offline
                  N Offline
                  nobody
                  schrieb am zuletzt editiert von
                  #45

                  @patrick131184:

                  Hallo zusammen,

                  ich habe den "reloading Fehler" leider immer noch :(

                  Habe nochmal die komplette apache Konfig nach diesem Guide eingerichtet. http://www.iobroker.net/docu/?page_id=5082&lang=de

                  in den apache logs steht einge sekunden vor dem erneuten reloaden: `
                  Welche Apache-Version verwendest du und welche Module sind installiert?

                  Der Standard-Timeout bei Apache steht soweit ich mich erinnern kann, auf 60 Sekunden. Für die websocket-Verbindungen ist dieser im proxypass-Statement auf 1200 verlängert und sollte eigentlich nie zuschlagen, weil immer neue Daten transportiert werden.

                  Falls bei dir die Abfrage im Polling-Modus läuft, wird jedoch der darunter befindliche Eintrag für das Polling verwendet. Dieser hat keinen expliziten Timeout gesetzt und sollte somit den Default von 60 Sekunden haben. Du kannst ja mal ausprobieren was passiert, wenn du hier z.B. den Wert 120 einträgst, indem zu den Parameter timeout=120 in der proxypass Zeile zufügst.

                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    patrick131184
                    schrieb am zuletzt editiert von
                    #46

                    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 Antwort Letzte Antwort
                    0
                    • R Offline
                      R Offline
                      robsdobs
                      schrieb am zuletzt editiert von
                      #47

                      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.

                      Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

                      1 Antwort Letzte Antwort
                      0
                      • N Offline
                        N Offline
                        nobody
                        schrieb am zuletzt editiert von
                        #48

                        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 Antwort Letzte Antwort
                        0
                        • R Offline
                          R Offline
                          robsdobs
                          schrieb am zuletzt editiert von
                          #49

                          @nobody:

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

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

                          Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

                          1 Antwort Letzte Antwort
                          0
                          • lobomauL Offline
                            lobomauL Offline
                            lobomau
                            schrieb am zuletzt editiert von
                            #50

                            @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.

                            Host: NUC8i3 mit Proxmox:

                            • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                            • Slave: Pi4
                            1 Antwort Letzte Antwort
                            0
                            • W Offline
                              W Offline
                              Wyse
                              schrieb am zuletzt editiert von
                              #51

                              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 Antwort Letzte Antwort
                              0
                              • N Offline
                                N Offline
                                nobody
                                schrieb am zuletzt editiert von
                                #52

                                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 Antwort Letzte Antwort
                                0
                                • wtfkaW Offline
                                  wtfkaW Offline
                                  wtfka
                                  schrieb am zuletzt editiert von
                                  #53

                                  @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 Antwort Letzte Antwort
                                  0
                                  • wtfkaW Offline
                                    wtfkaW Offline
                                    wtfka
                                    schrieb am zuletzt editiert von
                                    #54

                                    @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 Antwort Letzte Antwort
                                    0
                                    • M Offline
                                      M Offline
                                      Marc_St
                                      schrieb am zuletzt editiert von
                                      #55

                                      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 Antwort Letzte Antwort
                                      0
                                      • M MrLee

                                        Moin!

                                        Hat jemand das schonmal für nginx umgesetzt?

                                        bis denne

                                        Mr.Lee

                                        1 Offline
                                        1 Offline
                                        123flip
                                        schrieb am zuletzt editiert von 123flip
                                        #56

                                        @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 Antwort Letzte Antwort
                                        0
                                        • D Offline
                                          D Offline
                                          dodi666
                                          schrieb am zuletzt editiert von
                                          #57

                                          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 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          990

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe