Apache/13 Proxy und Cache/Proxy/mod proxy html
mod_proxy_html
Das Modul mod_proxy_html wurde längere Zeit als Drittanbieter-Modul gepflegt und erst im Endspurt der 2.4-Entwicklung in die offizielle Distribution aufgenommen
- Es dient als Ausgabefilter (SSI und Filter) und ermöglicht das Rewriting von HTML-Hyperlinks für eine Proxy-Umgebung
Genauer ermöglicht das Modul, die Links in HTML-Dokumenten innerhalb einer durch eine Reverse-Proxy-Konfiguration angebundenen Website durch ihre externen Gegenstücke zu ersetzen, genau wie es ProxyPassReverse mit den aufgerufenen URLs macht
Angenommen, ein Reverse-Proxy ist wie folgt eingebunden
ProxyPass /external https://internal.mynet.de
Eine Webseite innerhalb der Website unter https://internal.mynet.de enthält beispielsweise folgenden Link
<a href="https://internal.mynet.de/info.html">Info</a>
Mit mod_proxy_html können Sie dafür sorgen, dass der Link automatisch wie folgt geändert wird, um über den Proxy zugänglich zu sein
<a href="https://proxy.mynet.de/external/info.html">Info</a>
ProxyHTMLEnable Aktiviert die Funktionalität von mod_proxy_html
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Syntax ProxyHTMLEnable on|off Standardwert off
Mit dieser Direktive können Sie die Funktionalität von mod_proxy_html für den jeweiligen Kontext aktivieren
ProxyHTMLEnable on
Das Rewriting erfolgt nur für HTML-Dokumente (MIME-Types text/html oder application/xhtml+xml)
- Wenn Sie auch andere Dateitypen entsprechend bearbeiten möchten, müssen Sie die Umgebungsvariable PROXY_HTML_FORCE setzen
Beachten Sie jedoch, dass dies manche Dateien - insbesondere Binärformate, die an manchen Stellen zufällig HTML enthalten - unbrauchbar machen kann
Wenn das Modul mod_xml2enc aktiv ist (siehe Kapitel 16, SSI und Filter), dann wird automatisch die durch dieses Modul gebotene Internationalisierung aktiviert
- ProxyHTMLURLMap Regeln für das HTML-URL-Rewriting definieren
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLURLMap Suchmuster Ersatzmuster [Flags] [Bedingung] Standardwert nicht gesetzt
Nachdem Sie die Funktionalität mit ProxyHTMLEnable grundsätzlich aktiviert haben, definiert ProxyHTMLURLMap die eigentlichen Ersetzungsregeln
- Das folgende einfache Beispiel führt die in der Einführung beschriebene Ersetzung von Links auf https://internal.mynet.de nach /external auf dem aktuellen Host
(proxy.mynet.de) durch
- ProxyHTMLEnable on ProxyHTMLURLMap https://internal.mynet.de /external
Die ersten beiden Parameter, Suchmuster und Ersatzmuster, bilden im Prinzip die Umkehrung der Parameter von Direktiven wie ProxyPass
Als dritten Parameter können Sie beliebig viele der folgenden Flags angeben (dabei wird zwischen Groß- und Kleinschreibung unterschieden)
- h - HTML-Links ignorieren (unverändert durchreichen)
- e - Skript-Events ignorieren (unverändert durchreichen)
- c - eingebettete Skript- und Style-Abschnitte unverändert durchreichen
- L - letzte Regel; wenn die aktuelle Ersetzungsregel zutrifft, werden keine weiteren mehr ausgeführt (bei HTML-Links geschieht dies automatisch)
- l - das Gegenteil von L: auch auf HTML-Links gegebenenfalls weitere Regeln anwenden
- R - Als Suchmuster wird ein regulärer Ausdruck verwendet, und im Ersatzmuster können die Treffervariablen $1 bis $9 für ()-geklammerte Teilausdrücke aus dem Suchmuster verwendet werden
- x - POSIX-erweiterte reguläre Ausdrücke verwenden (nur zusammen mit R verwendbar)
- i - beim Suchen keine Groß- und Kleinschreibung beachten (nur zusammen mit R verwendbar)
- n - den Speicher für reguläre Ausdrücke zur Beschleunigung deaktivieren (nur zusammen mit R verwendbar)
- s - zeilenbasierte Suche nach regulären Ausdrücken (nur zusammen mit R verwendbar)
- ^ - Treffer nur am String-Anfang (nur für Strings, nicht für reguläre Ausdrücke;
spielt bei HTML-Links keine Rolle)
- $ - Treffer nur am String-Ende (nur für Strings, nicht für reguläre Ausdrücke;
spielt bei HTML-Links keine Rolle)
- V - Umgebungsvariablen im Ersatzmuster interpretieren (dazu muss ProxyHTMLInterp aktiv sein)
- Das Format im Ersatzmuster ist ${Variablenname|Standardwert}
- Wenn die entsprechende Variable definiert ist, wird an der jeweiligen Stelle ihr Wert eingefügt, andernfalls der angegebene Standardwert (Letzterer ist jedoch optional)
- v - Umgebungsvariablen im Suchmuster interpretieren (Details siehe bei V)
Als letztes Argument kann schließlich optional ein ap_expr-Ausdruck angegeben werden
- Die Regel wird dann nur beachtet, wenn dieser Ausdruck zutrifft
- Alle Einzelheiten über Ausdrücke stehen in der Beschreibung der Direktive <If> in Kapitel 6, Grundkonfiguration
- ProxyHTMLBufSize Anzahl Bytes, um die der interne Puffer für den HTML-Proxy bei Bedarf erhöht wird
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLBufSize Bytes Standardwert 8192
Während des Link-Rewritings muss der Parser Nicht-HTML-Inhalte wie CSS und JavaScript in einem Puffer zwischenspeichern
- Wenn dieser Puffer zu klein wird, dann wird er jeweils in Blöcken der hier angegebenen Byte-Anzahl vergrößert
Wenn Sie wissen, dass viele der zu verarbeitenden Dokumente Stylesheet- oder Skript-Blöcke enthalten, die größer als 8 KByte sind, dann sollten Sie den Wert
erhöhen, weil die dynamische Vergrößerung des Puffers während der Verarbeitung zu Lasten der Performance geht
Das folgende Beispiel stellt die doppelte Größe ein
ProxyHTMLBufSize 16384
ProxyHTMLCharsetOut Zeichensatz für die Ausgabe von mod_proxy_html festlegen
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLCharset Zeichensatz|* Standardwert UTF-8
Mit dieser Direktive können Sie einen Ausgabezeichensatz für das Ergebnis der HTML-Proxy-Verarbeitung angeben
- Der spezielle Wert * verwendet den Zeichensatz des Ursprungsdokuments
- Wenn es möglich ist, sollten Sie aus PerformanceGründen bei UTF-8 bleiben, weil libxml2 auch intern diesen Zeichensatz verwendet und alles andere zu Lasten der Performance geht
Hier dennoch ein Beispiel mit iso-latin-1
ProxyHTMLCharsetOut ISO-8859-1
ProxyHTMLDocType Eine HTML- oder XHTML-Doctype-Deklaration hinzufügen
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLDocType HTML|XHTML [Legacy] oder ProxyHTMLDocType fpi [SGML|XML] Standardwert nicht festgelegt
Diese Direktive setzt den <!DOCTYPE>-Header für die ausgegebenen HTML-Dokumente
- In der ersten Form haben Sie die Wahl zwischen HTML (ergibt HTML 4.01)
und XHTML (XHTML 1.0)
- Wenn Sie das Schlüsselwort Legacy hinzufügen, wird der Kompatibilitätsmodus Transitional aktiviert, der weniger genau ist als der Standardmodus Strict
- Wenn die Direktive in diesem Format verwendet wird,
Apache als Proxy-Server 13.1
versucht mod_proxy_html zusätzlich, das HTML des verarbeiteten Dokuments im Sinne des gewählten Standards zu säubern; wo dies nicht gelingt, werden entsprechende Fehler mit dem LogLevel debug ins ErrorLog geschrieben
Die andere Möglichkeit ist die Angabe eines eigenen Formal Public Identifiers (FPI) wie beispielsweise "-//W3C//DTD HTML 4.01//EN"
- In diesem Fall gibt der zusätzliche Parameter an, ob SGML/HTML- oder XML/XHTML-Syntax verwendet werden soll
ProxyHTMLEvents Liste von Attributen, die als Skript-Events interpretiert werden
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLEvents Attribut [Attribut ...] Standardwert nicht gesetzt
Eine Reihe von HTML-Attributen sind JavaScript-Event-Handler, beispielweise onclick oder onfocus
- Diese können JavaScript-Anweisungen enthalten, in denen sich wiederum URLs befinden können, die umgeschrieben werden sollten
mod_proxy_html sucht in allen hier angegebenen Attributen danach und ersetzt sie
- In der Standardkonfiguration werden alle HTML-4.0.1- und XHTML-1.0Event-Attribute angegeben
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \ onmouseover onmousemove onmouseout onkeypress \ onkeydown onkeyup onfocus onblur onload \ onunload onsubmit onreset onselect onchange
Es ist eine gute Idee, auch das Attribut style hinzuzufügen
- Dies löst zwar kein JavaScript aus, sondern enthält Inline-CSS, aber dies kann URL-Angaben wie background-image:url(...) enthalten, die gegebenenfalls geändert werden müssen
ProxyHTMLExtended Bestimmt, ob die Ersetzungsregeln auch auf Inline-Skripte, -Stylesheets und Skript-Ereignisse angewendet werden
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Syntax ProxyHTMLExtended on|off Standardwert off
Wenn diese Direktive den Wert off hat, werden die Ersetzungsregeln nur auf HTML-Links angewendet, bei on auch auf Inline-Skripte, -Stylesheets und SkriptEreignisse (sofern die ProxyHTMLURLMap-Flags entsprechend gesetzt sind)
- Wenn Sie diese Funktionalität einschalten, hat der Parser mehr zu tun, und die Performance kann leiden
- Sie sollten on also nur verwenden, wenn es wirklich notwendig ist
ProxyHTMLFixups Beseitigung einfacher HTML-Fehler
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLFixups [lowercase] [dospath] [reset] Standardwert nicht gesetzt
Wenn diese Direktive gesetzt wird, kann mod_proxy_html einfache, verbreitete HTML-Link-Fehler beseitigen
- lowercase - URLs werden in Kleinschreibung umgewandelt
- dospath - Backslashes (\) werden in Forward-Slashes (/) umgewandelt
- reset - Einstellungen der nächsthöheren Konfigurationsebene werden zurückgesetzt
Sie können beliebig viele dieser Werte angeben
Bitte beachten Sie, dass die vermeintlichen Fehler in manchen HTML-Dokumenten Absicht sind; verwenden Sie diese Direktive daher nur, wenn Sie genau wissen, dass der Backend-Server die entsprechenden Fehler produziert
ProxyHTMLInterp Ersetzungsregeln für jede Anfrage neu interpretieren
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLInterp on|off Standardwert off
Apache als Proxy-Server 13.1
Standardmäßig werden die Ersetzungsregeln beim Start von Apache vorkompiliert und dann einfach angewendet
- Wenn Sie diese Direktive auf on setzen, werden sie dagegen bei jeder einzelnen Anfrage neu interpretiert
- Dies beeinträchtigt die Performance, schafft aber beispielsweise die Möglichkeit, Umgebungsvariablen zu verwenden
ProxyHTMLLinks Legt die HTML-Elemente und -Attribute fest, die als Links gelten
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLLinks Element Attribut [Attribut ...] Standardwert nicht gesetzt
Diese Direktive legt die HTML-Elemente (Tags) und -Attribute fest, die als zu verarbeitende Links betrachtet werden
- Sie benötigen für jedes Element eine Instanz dieser Direktive, können aber beliebig viele Attribute angeben
- Die Standardkonfiguration definiert alle HTML-4.0.1- und XHTML-1.0-Links
ProxyHTMLLinks a href ProxyHTMLLinks area href ProxyHTMLLinks link href ProxyHTMLLinks img src longdesc usemap ProxyHTMLLinks object classid codebase data usemap ProxyHTMLLinks q cite ProxyHTMLLinks blockquote cite ProxyHTMLLinks ins cite ProxyHTMLLinks del cite ProxyHTMLLinks form action ProxyHTMLLinks input src usemap ProxyHTMLLinks head profile ProxyHTMLLinks base href ProxyHTMLLinks script src for
ProxyHTMLStripComments HTML-Kommentare entfernen
Seit Version 2.4, für ältere 2.x-Versionen als externes Zusatzmodul Modul mod_proxy_html Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax ProxyHTMLStripComments on|off Standardwert off
Wenn Sie diese Direktive auf on setzen, werden HTML-Kommentare aus dem verarbeiteten Dokument entfernt
- Beachten Sie, dass dabei auch Skripte und Stylesheets verschwinden, die in Kommentare eingebettet sind
- Außerdem würden auch die Anweisungen für kommentarbasierte Präprozessoren wie SSI und ESI gelöscht; daher müssen diese in der Filterkette vor mod_proxy_html verarbeitet werden (SSI und Filter)