URL Umschreibung für Aufruf (https) über mod_proxy

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

URL Umschreibung für Aufruf (https) über mod_proxy

Beitragvon marzog » 02.09.2010 14:40

Hallo zusammen, dies ist mein erstes Post hier und ich hoffe auf etwas Nachsicht, falls ich etwas (bei der Suche) übersehen habe.

Mein Problem ist folgendes: Ich habe einen Server in einer "DMZ", nach außen soll nur per https kommuniziert werden, daher beantwortet der Server anfragen auf http mit einer Umleitung auf https. Das läuft und ist soweit unerheblich also nur damit man weiß um was es geht.

Ich möchte nun per https, dass bestimmte "Ordner" die in einer Datei hinterlegt sind, per proxy auf hinterlegte interne IP umgeleitet werden. Alles was dort nicht drin steht soll aber auch per proxy über eine feste IP:port aufgerufen werden. Ich habe dazu eine Config im Netz gefunden die sowas ähnliches macht, allerdings ohne das im letzten Satz gewünschte proxy auf feste IP:port, darum habe ich sie verändert:

Code: Alles auswählen
RewriteLock     /var/lock/rewrite.lock

<VirtualHost *:443>
  ServerName www.bsp.bsp
  ServerAlias bsp.bsp
  DocumentRoot /pfad/www
  ServerAdmin joo@joo.joo

  # SSL
  SSLEngine On
  SSLProtocol all -SSLv2
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
  SSLCertificateFile    bsp.crt
  SSLCertificateKeyFile bsp.key
  SSLCertificateChainFile bsp.ca.pem
  SSLCACertificateFile ca.pem

  # Logfiles:
  CustomLog access-ssl combined
  ErrorLog error-ssl
  LogLevel warn

  <Location />
    Options None
    #AllowOverride All
    Order allow,deny
    allow from All
  </Location>

  <IfModule mod_rewrite.c>
  <IfModule mod_ssl.c>

  # Rewrite-Engine einschalten fuer Umschreiben der URL
  RewriteEngine   on
  RewriteCond %{REQUEST_METHOD} ^TRACE
  RewriteRule .* - [F]

  # Logging ausschalten mit folgenden Zeilen:
  #RewriteLog     /dev/null
  #RewriteLog     0
  RewriteLog      sslproxy.log
  RewriteLogLevel 2

  RewriteMap      lowercase       int:tolower
  # RewriteMap für die Domainnamen, welche SSL erhalten sollen
  RewriteMap      domaindb        txt:ssldomains
  RewriteRule     ^/icons/(.+)  -                               [L]
  # Fuer MS Internet Explorer ab Version 6
  RewriteRule     ^/w3c/(.+)      -                               [L]
  # Kundendomain in Kleinbuchstaben umwandeln (fuer Datenbank-Lookup)
  RewriteRule     ^/([^/]+)/(.*)  /${lowercase:$1}/$2             [S=1]
  RewriteRule     ^/(.*)          /${lowercase:$1}
  # Per Proxy Verbindung zu http://kundendomain/... aufbauen.
  # Wahlweise auch http://www.kundendomain/...
  # Falls Kundendomain ohne abschliessenden "/" angegeben,
  # "/" anhaengen und Redirect erzwingen, d.h. Browser soll es
  # mit "kundendomain/" nochmal versuchen.
  # Für den Fall, dass der "Pfad" nicht in der domaindb gefunden wurde,
  # ssl.domain/Pfad anzeigen.
  #RewriteRule     ^/www\.([^/]+)/(.*)     /${domaindb:$1|%{HTTP_HOST}/$1}/$2      [S=2]
  #RewriteRule     ^/([^/]+)/(.*)          /${domaindb:$1|%{HTTP_HOST}/$1}/$2      [S=1]
  RewriteRule     ^/www\.([^/]+)/(.*)     /${domaindb:$1|intern:port/$1}/$2        [S=2]
  RewriteRule     ^/([^/]+)/(.*)          /${domaindb:$1|intern:port/$1}/$2        [S=1]
  RewriteRule     ^/(.+)                  /$1/                                     [R,L]
  RewriteRule     ^/(.*)                  http://$1                                [P,L]


  </IfModule>
  </IfModule>

</VirtualHost>


Er sucht in einer Textdatei (ssldomains -> Bsp. für eine Zeile: test intern1), rufe ich jetzt https://bsp.bsp/test auf, sollte er auf http://intern1/ umschreiben und dies per proxy holen (intern1 ist eine IP die nur intern erreichbar ist). Das geht auch soweit.
Nun soll aber ein Aufruf von https://bsp.bsp/ per proxy intern von http://intern:port/ (server-config (sh. Code)) holen. Er schreibt es aber nur in http:// um und versucht das per proxy zu holen.
Wenn ich nun ein Verzeichnis angebe das vorhanden ist z.B. test und schreibe https://bsp.bsp/test/ liest er es richtig (per proxy holt er http://intern:port/test/), gebe ich aber https://bsp.bsp/test an (also ohne slash am Ende) leitet er ohne proxy auf http://intern:port/test/ um, die ja von extern nicht erreichbar ist. An Dateien wiederum hängt er einen Slash und ruft sie über proxy ab (also auch falsch) also https://bsp.bsp/index.html wird so per proxy zu http://intern:port/index.html/ nach außen dann https://bsp.bsp/index.html/

Ich vermute mein Fehler ist nur irgendwo ein kleiner Denkfehler, aber ich bekomme es einfach nicht raus. Ich hoffe hier kann das jemand lösen. Und bitte erläutert die gemachten Änderungen, damit ich etwas lernen kann...
marzog
.
.
 
Beiträge: 2
Registriert: 02.09.2010 13:22

Re: URL Umschreibung für Aufruf (https) über mod_proxy

Beitragvon marzog » 03.09.2010 00:08

Ich glaub ich hab's gelöst, aber frage nicht ... :roll:

Das Umleitungsproblem, als im Browser die Interne IP angezeigt wurde, war wohl ein Cache-Problem. Ich konnte es nicht wieder nachstellen... Ansonsten geht es jetzt soweit ich das getestet habe mit diesem Code (nur der relevante Teil):

Code: Alles auswählen
...
  RewriteRule     ^/www\.([^/]+)/(.*)     /${domaindb:$1|intern:port/$1}/$2      [S=2]
  RewriteRule     ^/([^/]+)/(.*)          /${domaindb:$1|intern:port/$1}/$2      [S=1]
  RewriteRule     ^/(.+)                  /$1/                          [R,L]
  RewriteRule     ^[/]$                   http://intern:port/           [P,L]          <------ mit der Zeile geht's
  RewriteRule     ^/(.*)                  http://$1                     [P,L]
...
marzog
.
.
 
Beiträge: 2
Registriert: 02.09.2010 13:22


Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast