Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Alles, was den Apache betrifft, kann hier besprochen werden.

Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Postby JochenH » 24. January 2019 15:51

Hinter meiner fritz!box - auf der nur die Ports 80 und eine 443 eine Weiterleitung, Ziel ist 192.168.1.113, eingerichtet ist - betreibe ich einige Webanwendungen mit teilweise exotischen Portsauf unterschiedlicher Hardware. Hier ein ein Auszug:
  • 192.168.1.113:80 Apache2 (2.4.10-10+deb8u12)
  • 192.168.1.113:443 Apache2 (2.4.10-10+deb8u12)
  • 192.168.1.113:9981 TVheadend (4.2.1-dmo1~bpo8+1)
  • 192.168.1.140:5004 TV-Tuner (HDHOMERUN)
Im Heimnetz klappt auch alles besten, die Anwendungen können ja auch direkt über ihre Kombination aus IP-Adresse und Port angesprochen. Aus dem Internet klappt es mit Hilfe fer Module ProxyPass und ProxyPassReverse auch problemlos, soweit die Anwendung nicht auf dem Hauptrechner 192.168.1.113 läuft. Die Anwendungen mit dem Port 443 laufen hier natürlich auch problemlos!

Hier ein Auszug aus der /etc/apache2/sites-available/example.com.conf:
Code: Select all
##################################
# HDHOMERUN LiveTV                   <===== alles okay
##################################
<VirtualHost *:80>
    ServerName fernsehen.example.com
    ServerAdmin admin@example.com

    RewriteEngine On
    RewriteRule ^/(.*) https://fernsehen.example.com/$1 [R=permanent,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName fernsehen.example.com
    ServerAdmin admin@example.com

    SSLProxyEngine On
    <Proxy "*">
       AuthName "Mein Fernseher"
       AuthType Basic
       AuthUserFile /var/www/.kennwoerter/fernsehen
       Require all denied
       Require valid-user
    </Proxy>
    ProxyPass / http://192.168.1.140:5004/auto/
    ProxyPassReverse / http://192.168.1.140:5004/auto/

    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    SSLEngine on
    SSLCertificateKeyFile /etc/apache2/ssl/fernsehen.key
    SSLCertificateFile    /etc/apache2/ssl/fernsehen.cert
</VirtualHost>

##################################
## TVheadend                         <===== der Problemfall
##################################
<VirtualHost *:80>
    ServerName rekorder.example.com
    ServerAdmin admin@example.com

    RewriteEngine On
    RewriteRule ^/(.*) https://rekorder.example.com/$1 [R=permanent,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName rekorder.example.com
    ServerAdmin admin@example.com

    SSLProxyEngine On
    <Proxy "*">
       AuthName "My DVR"
       AuthType Basic
       AuthUserFile /var/www/.kennwoerter/rekorder
       Require all denied
       Require valid-user
    </Proxy>
    ProxyPass / http://192.168.1.113:9981/
    ProxyPassReverse / http://192.168.1.113:9981/

    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    SSLEngine on
    SSLCertificateKeyFile /etc/apache2/ssl/rekorder.key
    SSLCertificateFile    /etc/apache2/ssl/rekorder.cert
</VirtualHost>

Der Aufruf der Adresse http://rekorder.example.com wird wunschgemäß auf https://rekorder.example.com umgeleitet. Es kommt auch -erwartungsgemäß- die Kennwortabfrage der Rekorder-Software, aber das mit dem Reverse klappt nicht. Firefox vermeldet in der Statuszeile "Warten auf rekoder.example.com ..."

Die beim Googeln gefundenen Lösungsansätze für das bekannte Problem habe ich nicht verstanden. Deshalb dieser Hilferuf!
--
Gruß aus der Ex-Heimat der CeBIT
Jochen
User avatar
JochenH
 
Posts: 5
Joined: 24. January 2019 15:08
XAMPP version: 2.4.10
Operating System: Debian 8

Re: Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Postby Nobbie » 24. January 2019 22:33

JochenH wrote:Die beim Googeln gefundenen Lösungsansätze für das bekannte Problem habe ich nicht verstanden.


Vielleicht verstehen wir es ja. Wie lauteten die denn?

Grundsätzlich: ich vermute, dass Du hier mit verschleierten Daten um Hilfe fragst. Aus entsprechender (sehr schlechter) Erfahrung kann ich nur noch bei realen Daten Hilfe anbieten. Es ist leider allzu häufig der Fall, dass die Verschleierung auch leider die wirkliche Ursache verschleiert, im höchsten Maße unbefriedigend, weswegen ich grundsätzlich bei verschleierten Daten nicht helfen kann.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Postby JochenH » 25. January 2019 09:27

Hallo Nobbie,
es stimmt, ich habe die Anfrage mit verschleierten Daten gestellt. Das betrifft aber nur die externe URL , alles außer example.com ist original.
Da es sich bei dem "Internetauftritt" um einen rein privaten Zugang handelt möchte ich verständlicherweise die tatsächliche URL nicht veröffentlichen!
---
Gruß aus der Ex-Heimat der CeBIT
Jochen
User avatar
JochenH
 
Posts: 5
Joined: 24. January 2019 15:08
XAMPP version: 2.4.10
Operating System: Debian 8

Re: Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Postby Nobbie » 25. January 2019 11:16

Das ist selbstverständlich Deine Entscheidung, aber ich habe eben leider auch ganz schlechte Erfahrung mit maskierten Daten gemacht, sehr oft wird durch die Verschleierung oder sonstige Anpassungen, die dem Autor unwichtig erschienen, die eigentliche Ursache verdeckt. Das ist einfach total nervig, weil man beim besten Willen die Ursache nicht findet.

Rein von der Beschreibung her sehe ich noch nicht, warum das nicht gehen sollte. Meistens hat es dann einen völlig anderen Grund als wo man sucht.

P.S.: EIne Idee habe ich noch, das mit dem Login macht mich stutzig. Die Rekordersoftware macht einen Login, dafür wird mit Sicherheit ein Cookie benötigt, was der Browser speichert und mit dem er den eigentlichen Request nachher durchführt. Ein Login via HTTP ist ja eigentlich "getürkt", da wird kein Prozess "eingelogged", da muss der Client (= Browser) einmal das richtige Kennwort eingeben und beim nächsten Request schon müßte er er das eigentlich schon wieder machen, denn der Server kann sich das nicht merken (HTTP ist ein sog. "zustandsloses" Protokoll). Für dieses Problem wurden Cookies geschaffen, der Server gibt an den Client einen bestimmten Code, der Client speichert das (das ganze nennt sich Cookie) und beim nächsten Request liefert der Client automatisch das Cookie an den Server aus (dazu muss in jedem Cookie auch genau festgelegt sein, für welchen Server das Cookie ist). Und der Server erkennt den Inhalt des Cookies wieder und sagt dann quasi "Ok, der hat sich schon eingelogged, der braucht nicht mehr" und liefert den gewünschten Inhalt aus.

Genau das geht hier wahrscheinlich schief, denn das Cookie wird hier vom TVRekorder NICHT direkt an den Browser zurückgeschickt, sondern an Apache, der diesen ReverseProxy aufgerufen hat. Damit diese Cookie richtig auch an den Browser weitergeschickt werden, muss das Apache mitgeteilt werden, dass er das so tun soll. Die notwendige Klausel heißt bei Dir:

HWSProxyPassReverseCookie /


Schreibe das einfach unter oder über die beiden anderen Zeilen des ReverseProxy.

Ein weiteres Problem kann sein, dass die Cookies unter bestimmten Domainnamen gespeichert werden. Firefox "glaubt" ja, er würde auf rekorder.example.com zugreifen. Der TVRekorder wird aber via 192.168.1.113 aufgerufen, der weiß nichts von rekorder.example.com und setzt das Cookie im Kontext der IP statt des Domainnamens. Wenn es also immer noch nicht funktioniert, dann ändere mal die ProxyPass Anweisung, statt der IP verwende dort auch den Domainnamen:


Code: Select all
    ProxyPass / http://rekorder.example.com:9981/
    ProxyPassReverse / http://rekorder.example.com:9981/


Last not least kann man auch Apache anweisen, als sog. "Host" (das ist ein Teil des Protokolls HTTP 1.1) nicht die IP, sondern den ursprünglichen Domainnamen zu verwenden, wie Apache selbst von Firefox angesprochen wurde (also auch rekorder.example.com). Das wird mit dieser Anweisung realisiert:

Code: Select all
ProxyPreserveHost On


Probiere alle Varianten mal aus, ich denke wirklich, dass es ein Problem des Cookies und des Domainnamen ist. Ggf. musst Du außerdem in der Hosts Datei des Servers auch noch die Domain angeben:

Code: Select all
192.168.1.113    rekorder.example.com
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Postby JochenH » 26. January 2019 14:26

Hallo Nobbie,
danke für die Tipps, werde sie im laufe der Woche testen. Bin zurzeit auf einer Tagung in Melle.
---
Gruß aus der Ex-Heimat der CeBIT
Jochen
User avatar
JochenH
 
Posts: 5
Joined: 24. January 2019 15:08
XAMPP version: 2.4.10
Operating System: Debian 8

Re: Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Postby JochenH » 28. January 2019 22:12

Hallo Nobbie,
danke für deine Tipps! Die Kombination aus
ProxyPass / http://rekorder.example.com:9981/
ProxyPassReverse / http://rekorder.example.com:9981/
ProxyPreserveHost On

und
192.168.1.113 rekorder.example.com

funktioniert. Ob alles notwendig prüf' ich die Tage und gebe Rückmeldung
---
Gruß aus der Ex-Heimat der CeBIT
Jochen
User avatar
JochenH
 
Posts: 5
Joined: 24. January 2019 15:08
XAMPP version: 2.4.10
Operating System: Debian 8

Hilfe beim ProxyPass/ProxyPassReverse erforderlich [gelöst]

Postby JochenH » 02. February 2019 17:25

Hallo, ich bin ja noch eine Rückmeldung schuldig, was hiermit passieren soll.
Mit dieser Konfiguration klappt es problemlos:
  • Hier der Auszug aus der /etc/apache2/sites-available/example.com.conf:
    Code: Select all
    ##########################################
    # TVheadend               
    ##########################################
    <VirtualHost *:80>
        ServerName rekorder.example.com
        ServerAdmin admin@zuhause.xx
        RewriteEngine On
        RewriteRule ^/(.*) https://rekorder.example.com/$1 [R=permanent,L]
    </VirtualHost>

    <VirtualHost *:443>
        ServerName rekorder.example.com
        SSLProxyEngine On
        ProxyPreserveHost On
        ProxyPass        / http://rekorder.example.com:9981/
        ProxyPassReverse / http://rekorder.example.com:9981/
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off
        SSLEngine on
        SSLCertificateKeyFile /etc/apache2/ssl/rekorder.key
        SSLCertificateFile    /etc/apache2/ssl/rekorder.cert
    </VirtualHost>

  • und hier die /etc/hosts des Hauptrechners 192.168.1.113:
    Code: Select all
    127.0.0.1   localhost
    127.0.1.1   www.example.com                   Server

    192.168.1.113   rekorder.example.com   TVheadend

    # The following lines are desirable for IPv6 capable hosts
    ::1     localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
Danke für die Unterstützung!!
---
Gruß aus der Ex-Heimat der CeBIT
Jochen
User avatar
JochenH
 
Posts: 5
Joined: 24. January 2019 15:08
XAMPP version: 2.4.10
Operating System: Debian 8

Re: Hilfe beim ProxyPass/ProxyPassReverse erforderlich

Postby Nobbie » 02. February 2019 20:25

Ich würde vermuten, dass "ProxyPreserveHost On" nicht notwendig ist, weil Frontend und Backend sowieso den gleichen ServerName tragen (rekorder.example.com). Aber es richtet auch keinen Schaden an.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04


Return to Apache

Who is online

Users browsing this forum: No registered users and 27 guests