Mod proxy html: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „= Bekannte Probleme =“ durch „= Problembehebung =“
 
(15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''mod_proxy_html''' - Kurzbeschreibung
== Beschreibung ==
== Beschreibung ==
{| class="wikitable options big"
{| class="wikitable options"
|-
|-
| Beschreibung || Umschreiben von HTML-Links, um sicherzustellen, dass sie von Client-Netzwerken in einem Proxy-Kontext adressierbar sind.
| Beschreibung || Umschreiben von HTML-Links, um sicherzustellen, dass sie von Client-Netzwerken in einem Proxy-Kontext adressierbar sind
|-
|-
| Status || Basis
| Status || Basis
Zeile 10: Zeile 12:
| Quelldatei || mod_proxy_html.c
| Quelldatei || mod_proxy_html.c
|-
|-
| Kompatibilität || Version 2.4 und höher. Als Drittanbieter-Modul für frühere 2.x-Versionen verfügbar
| Kompatibilität || Version 2.4 und höher
* Als Drittanbieter-Modul für frühere 2.x-Versionen verfügbar
|}
|}


Dieses Modul bietet einen Ausgabefilter zum Umschreiben von HTML-Links in einer Proxy-Situation, um sicherzustellen, dass Links für Benutzer außerhalb des Proxys funktionieren. Es dient demselben Zweck wie die Apache-Direktive <code>ProxyPassReverse</code> für HTTP-Header und ist eine wesentliche Komponente eines Reverse-Proxys.
Dieses Modul bietet einen Ausgabefilter zum Umschreiben von HTML-Links in einer Proxy-Situation, um sicherzustellen, dass Links für Benutzer außerhalb des Proxys funktionieren
* Es dient demselben Zweck wie die Apache-Direktive ProxyPassReverse für HTTP-Header und ist eine wesentliche Komponente eines Reverse-Proxys
 
Wenn ein Unternehmen zum Beispiel einen Anwendungsserver unterappserver.example.com hat, der nur vom internen Netzwerk des Unternehmens aus sichtbar ist, und einen öffentlichen Webserverwww.example.com, möchte es vielleicht ein Gateway zum Anwendungsserver unter <nowiki>http://www.example.com/appserver/</nowiki> bereitstellen . Wenn der Anwendungsserver auf sich selbst verlinkt, müssen diese Links umgeschrieben werden, damit sie über das Gateway funktionieren. mod_proxy_html dient dazu,<a href="http://appserver.example.com/foo/bar.html">foobar</a> in<a href="http://www.example.com/appserver/foo/bar.html">foobar</a>umzuschreiben, um es von außen zugänglich zu machen
 
 
== Beschreibung ==
[https://httpd.apache.org/docs/2.4/mod/mod_proxy_html.html mod_proxy_html] ist ein Ausgabefilter, der HTML-Links so umschreiben kann, dass mehrere Webserver nahtlos miteinander kombiniert werden können.
 
So kann z.B.&nbsp;ein zweiter Webserver (welchen z.B.&nbsp;Dienste wie ejabberd bereitstellen) unter ''http://server/ejabberd'' erreicht werden, obwohl der zweite Webserver auf der IP 127.0.0.1 und dem Port 5281 läuft.
* Die Hauptaufgabe (und damit der Unterschied zum "normalen" '''mod_proxy''') besteht darin, dass das übertragene HTML so modifiziert wird, dass alle Links mit der veränderten Situation klarkommen.


Wenn ein Unternehmen zum Beispiel einen Anwendungsserver unter<code>appserver.example.com</code> hat, der nur vom internen Netzwerk des Unternehmens aus sichtbar ist, und einen öffentlichen Webserver<code>www.example.com,</code> möchte es vielleicht ein Gateway zum Anwendungsserver unter <code><nowiki>http://www.example.com/appserver/</nowiki></code> bereitstellen <code>.</code> Wenn der Anwendungsserver auf sich selbst verlinkt, müssen diese Links umgeschrieben werden, damit sie über das Gateway funktionieren. <code>mod_proxy_html</code> dient dazu,<code><a href="http://appserver.example.com/foo/bar.html">foobar</a></code> in<code><a href="http://www.example.com/appserver/foo/bar.html">foobar</a></code>umzuschreiben, um es von außen zugänglich zu machen.
Hier eine grafische Darstellung des Ganzen:
[[Bild(mod_proxy_html.png, align=center)]]
Wie im Beispiel zu sehen wird man über `http://server/ejabberd` auf den eingebauten Webserver vom [:Archiv/ejabberd:] umgeleitet.  
* Alle Seiten, die der ejabberd sendet, werden durch '''mod_proxy_html''' so verändert, dass die Links mit `http://server/ejabberd/` beginnen.  
* So ist eine normale Funktion der ejabberd-Administrationsseiten gewährleistet.  
* Natürlich funktioniert dieses Verfahren auch mit vielen anderen Diensten.


== Direktiven ==
== Direktiven ==
Zeile 21: Zeile 39:
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Legt die Puffergrößenerhöhung für die Pufferung von Inline-Skripten und Stylesheets fest.
|Legt die Puffergrößenerhöhung für die Pufferung von Inline-Skripten und Stylesheets fest
|-
|-
!Syntax
!Syntax
|<code>ProxyHTMLBufSize <var>bytes</var></code>
|ProxyHTMLBufSize <var>bytes</var>
|-
|-
!Standard
!Standard
|<code>ProxyHTMLBufSize 8192</code>
|ProxyHTMLBufSize 8192
|-
|-
!Kontext
!Kontext
Zeile 41: Zeile 59:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
Um in HTML-Dokumente eingebettete Nicht-HTML-Inhalte (Stylesheets und Skripte) zu parsen, muss <code>mod_proxy_html</code>das gesamte Skript oder Stylesheet in einen Puffer einlesen. Dieser Puffer wird nach Bedarf erweitert, um das größte Skript oder Stylesheet in einer Seite aufzunehmen, und zwar in <var>Byte-Schritten</var>, die durch diese Direktive festgelegt werden.
Um in HTML-Dokumente eingebettete Nicht-HTML-Inhalte (Stylesheets und Skripte) zu parsen, muss mod_proxy_htmldas gesamte Skript oder Stylesheet in einen Puffer einlesen
* Dieser Puffer wird nach Bedarf erweitert, um das größte Skript oder Stylesheet in einer Seite aufzunehmen, und zwar in <var>Byte-Schritten</var>, die durch diese Direktive festgelegt werden


Der Standardwert ist 8192 und funktioniert für fast alle Seiten gut. Wenn Sie jedoch wissen, dass Sie Seiten mit Stylesheets und/oder Skripten, die größer als 8K sind (d.h. für ein einzelnes Skript oder Stylesheet, NICHT insgesamt), als Proxy verwenden, ist es effizienter, eine größere Puffergröße einzustellen und zu vermeiden, dass die Größe des Puffers während einer Anfrage dynamisch angepasst werden muss.
Der Standardwert ist 8192 und funktioniert für fast alle Seiten gut
* Wenn Sie jedoch wissen, dass Sie Seiten mit Stylesheets und/oder Skripten, die größer als 8K sind (d.h
* für ein einzelnes Skript oder Stylesheet, NICHT insgesamt), als Proxy verwenden, ist es effizienter, eine größere Puffergröße einzustellen und zu vermeiden, dass die Größe des Puffers während einer Anfrage dynamisch angepasst werden muss


=== ProxyHTMLCharsetOut ===
=== ProxyHTMLCharsetOut ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Geben Sie einen Zeichensatz für die mod_proxy_html-Ausgabe an.
|Geben Sie einen Zeichensatz für die mod_proxy_html-Ausgabe an
|-
|-
!Syntax
!Syntax
|<code>ProxyHTMLCharsetOut <var><nowiki>Zeichensatz |</nowiki></var> *</code>
|ProxyHTMLCharsetOut <var><nowiki>Zeichensatz |</nowiki></var> *
|-
|-
!Kontext
!Kontext
Zeile 65: Zeile 86:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
Hiermit wird eine Kodierung für die mod_proxy_html-Ausgabe ausgewählt. Sie sollte normalerweise nicht verwendet werden, da jede Änderung der Standardkodierung <code>UTF-8</code>(Unicode - wie intern von libxml2 verwendet) einen zusätzlichen Verarbeitungsaufwand bedeutet. Das spezielle Token <code>ProxyHTMLCharsetOut *</code>erzeugt die Ausgabe in der gleichen Kodierung wie die Eingabe.
Hiermit wird eine Kodierung für die mod_proxy_html-Ausgabe ausgewählt
* Sie sollte normalerweise nicht verwendet werden, da jede Änderung der Standardkodierung UTF-8(Unicode - wie intern von libxml2 verwendet) einen zusätzlichen Verarbeitungsaufwand bedeutet
* Das spezielle Token ProxyHTMLCharsetOut *erzeugt die Ausgabe in der gleichen Kodierung wie die Eingabe


Beachten Sie, dass dies davon abhängt, dass <code>mod_xml2enc</code> geladen ist.
Beachten Sie, dass dies davon abhängt, dass mod_xml2enc geladen ist


=== ProxyHTMLDocType ===
=== ProxyHTMLDocType ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Legt eine HTML- oder XHTML-Dokumenttyp-Deklaration fest.
|Legt eine HTML- oder XHTML-Dokumenttyp-Deklaration fest
|-
|-
!Syntax
!Syntax
|<code><nowiki>ProxyHTMLDocType HTML|XHTML [Legacy]</nowiki></code><code>'''OR'''</code><code>ProxyHTMLDocType <var>fpi</var><nowiki> [SGML|XML]</nowiki></code>
|<nowiki>ProxyHTMLDocType HTML|XHTML [Legacy]</nowiki>'''OR'''ProxyHTMLDocType <var>fpi</var><nowiki> [SGML|XML]</nowiki>
|-
|-
!Kontext
!Kontext
Zeile 89: Zeile 112:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
In der ersten Form werden die Dokumente je nach der gewählten Option als HTML 4.01 oder XHTML 1.0 deklariert. Diese Option bestimmt auch, ob die HTML- oder XHTML-Syntax für die Ausgabe verwendet wird. Beachten Sie, dass das Format der Dokumente, die vom Backend-Server kommen, keine Rolle spielt: der Parser wird es automatisch verarbeiten. Wenn das optionale zweite Argument auf<code>Legacy</code> gesetzt wird, werden die Dokumente als "Transitional" deklariert. Diese Option kann notwendig sein, wenn Sie Inhalte aus der Zeit vor 1998 als Proxy verwenden oder mit fehlerhaften Authoring/Publishing-Tools arbeiten.
In der ersten Form werden die Dokumente je nach der gewählten Option als HTML 4.01 oder XHTML 1.0 deklariert
* Diese Option bestimmt auch, ob die HTML- oder XHTML-Syntax für die Ausgabe verwendet wird
* Beachten Sie, dass das Format der Dokumente, die vom Backend-Server kommen, keine Rolle spielt: der Parser wird es automatisch verarbeiten
* Wenn das optionale zweite Argument aufLegacy gesetzt wird, werden die Dokumente als "Transitional" deklariert
* Diese Option kann notwendig sein, wenn Sie Inhalte aus der Zeit vor 1998 als Proxy verwenden oder mit fehlerhaften Authoring/Publishing-Tools arbeiten


In der zweiten Form wird Ihr eigenes FPI eingefügt. Das optionale zweite Argument bestimmt, ob die SGML/HTML- oder die XML/XHTML-Syntax verwendet werden soll.
In der zweiten Form wird Ihr eigenes FPI eingefügt
* Das optionale zweite Argument bestimmt, ob die SGML/HTML- oder die XML/XHTML-Syntax verwendet werden soll


Die Standardeinstellung ist das Weglassen jeglicher FPI, mit der Begründung, dass keine FPI besser ist als eine gefälschte. Wenn Ihr Backend anständiges HTML oder XHTML erzeugt, stellen Sie es entsprechend ein.
Die Standardeinstellung ist das Weglassen jeglicher FPI, mit der Begründung, dass keine FPI besser ist als eine gefälschte
* Wenn Ihr Backend anständiges HTML oder XHTML erzeugt, stellen Sie es entsprechend ein


Wenn die erste Form verwendet wird, bereinigt mod_proxy_html auch den HTML-Code gemäß dem angegebenen Standard. Es kann nicht jeden Fehler beheben, aber es entfernt falsche Elemente und Attribute. Es protokolliert optional auch andere Fehler im <code>LogLevel</code> Debug.
Wenn die erste Form verwendet wird, bereinigt mod_proxy_html auch den HTML-Code gemäß dem angegebenen Standard
* Es kann nicht jeden Fehler beheben, aber es entfernt falsche Elemente und Attribute
* Es protokolliert optional auch andere Fehler im LogLevel Debug


=== ProxyHTMLEnable ===
=== ProxyHTMLEnable ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Schaltet den proxy_html-Filter ein oder aus.
|Schaltet den proxy_html-Filter ein oder aus
|-
|-
!Syntax
!Syntax
|<code><nowiki>ProxyHTMLEnable On|Off</nowiki></code>
|<nowiki>ProxyHTMLEnable On|Off</nowiki>
|-
|-
!Standard
!Standard
|<code>ProxyHTMLEnable Aus</code>
|ProxyHTMLEnable Aus
|-
|-
!Kontext
!Kontext
Zeile 118: Zeile 149:
|-
|-
!Kompatibilität
!Kompatibilität
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich.
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich
|}
|}
Ein einfacher Schalter, um den proxy_html-Filter zu aktivieren oder zu deaktivieren. Wenn <code>mod_xml2enc</code> geladen ist, wird auch automatisch die Internationalisierungsunterstützung eingerichtet.
Ein einfacher Schalter, um den proxy_html-Filter zu aktivieren oder zu deaktivieren
* Wenn mod_xml2enc geladen ist, wird auch automatisch die Internationalisierungsunterstützung eingerichtet


Beachten Sie, dass der proxy_html-Filter nur auf HTML-Daten (Content-Type text/html oder application/xhtml+xml) wirkt und wenn die Daten über einen Proxy übermittelt werden. Sie können dies (auf eigene Gefahr) außer Kraft setzen, indem Sie die Umgebungsvariable <var>PROXY_HTML_FORCE</var> setzen.
Beachten Sie, dass der proxy_html-Filter nur auf HTML-Daten (Content-Type text/html oder application/xhtml+xml) wirkt und wenn die Daten über einen Proxy übermittelt werden
* Sie können dies (auf eigene Gefahr) außer Kraft setzen, indem Sie die Umgebungsvariable <var>PROXY_HTML_FORCE</var> setzen


=== ProxyHTMLEvents ===
=== ProxyHTMLEvents ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Geben Sie Attribute an, die als Scripting-Ereignisse behandelt werden sollen.
|Geben Sie Attribute an, die als Scripting-Ereignisse behandelt werden sollen
|-
|-
!Syntax
!Syntax
|<code>ProxyHTMLEvents <var>Attribut [Attribut ...]</var></code>
|ProxyHTMLEvents <var>Attribut [Attribut ...]</var>
|-
|-
!Kontext
!Kontext
Zeile 144: Zeile 177:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
Gibt ein oder mehrere Attribute an, die als Skripting-Ereignisse behandelt werden und auf die <code>ProxyHTMLURLMaps</code>angewendet wird, wenn sie aktiviert sind. Sie können eine beliebige Anzahl von Attributen in einer oder mehreren<code>ProxyHTMLEvents-Direktiven</code> angeben.
Gibt ein oder mehrere Attribute an, die als Skripting-Ereignisse behandelt werden und auf die ProxyHTMLURLMapsangewendet wird, wenn sie aktiviert sind
* Sie können eine beliebige Anzahl von Attributen in einer oder mehrerenProxyHTMLEvents-Direktiven angeben


Normalerweise werden Sie dies global festlegen. Wenn Sie <code>ProxyHTMLEvents</code> in mehr als einem Bereich festlegen, so dass einer den anderen überschreibt, müssen Sie in jedem dieser Bereiche einen vollständigen Satz angeben.
Normalerweise werden Sie dies global festlegen
* Wenn Sie ProxyHTMLEvents in mehr als einem Bereich festlegen, so dass einer den anderen überschreibt, müssen Sie in jedem dieser Bereiche einen vollständigen Satz angeben


Eine Standardkonfiguration ist in <var>proxy-html.conf</var>enthalten und definiert die Ereignisse in Standard-HTML 4 und XHTML 1.
Eine Standardkonfiguration ist in <var>proxy-html.conf</var>enthalten und definiert die Ereignisse in Standard-HTML 4 und XHTML 1


=== ProxyHTMLExtended ===
=== ProxyHTMLExtended ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Legt fest, ob Links in Inline-Skripten, Stylesheets und Skriptereignissen repariert werden sollen.
|Legt fest, ob Links in Inline-Skripten, Stylesheets und Skriptereignissen repariert werden sollen
|-
|-
!Syntax
!Syntax
|<code><nowiki>ProxyHTMLExtended On|Off</nowiki></code>
|<nowiki>ProxyHTMLExtended On|Off</nowiki>
|-
|-
!Standard
!Standard
|<code>ProxyHTMLExtended Aus</code>
|ProxyHTMLExtended Aus
|-
|-
!Kontext
!Kontext
Zeile 173: Zeile 208:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
Bei der Einstellung " <code>Aus"</code> werden HTML-Links gemäß den<code>ProxyHTMLURLMap-Richtlinien</code> umgeschrieben, aber Links, die in Javascript und CSS erscheinen, werden ignoriert.
Bei der Einstellung " Aus" werden HTML-Links gemäß denProxyHTMLURLMap-Richtlinien umgeschrieben, aber Links, die in Javascript und CSS erscheinen, werden ignoriert


Wenn diese Option auf <code>Ein</code> gesetzt ist, werden alle Skriptereignisse (wie von<code>ProxyHTMLEvents</code> bestimmt) und eingebettete Skripte oder Stylesheets auch von den <code>ProxyHTMLURLMap-Regeln</code>verarbeitet, entsprechend den für jede Regel gesetzten Flags. Da dies mehr Parsing erfordert, ist die Leistung am besten, wenn Sie es nur aktivieren, wenn es unbedingt notwendig ist.
Wenn diese Option auf Ein gesetzt ist, werden alle Skriptereignisse (wie vonProxyHTMLEvents bestimmt) und eingebettete Skripte oder Stylesheets auch von den ProxyHTMLURLMap-Regelnverarbeitet, entsprechend den für jede Regel gesetzten Flags
* Da dies mehr Parsing erfordert, ist die Leistung am besten, wenn Sie es nur aktivieren, wenn es unbedingt notwendig ist


Sie müssen auch auf die übereinstimmenden Muster achten, da der Parser nicht weiß, was eine URL innerhalb eines eingebetteten Skripts oder Stylesheets ist. Insbesondere die erweiterte Übereinstimmung von <code>/</code> führt wahrscheinlich zu falschen Übereinstimmungen.
Sie müssen auch auf die übereinstimmenden Muster achten, da der Parser nicht weiß, was eine URL innerhalb eines eingebetteten Skripts oder Stylesheets ist
* Insbesondere die erweiterte Übereinstimmung von / führt wahrscheinlich zu falschen Übereinstimmungen


=== ProxyHTMLFixups ===
=== ProxyHTMLFixups ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Korrekturen für einfache HTML-Fehler.
|Korrekturen für einfache HTML-Fehler
|-
|-
!Syntax
!Syntax
|<code>ProxyHTMLFixups [Kleinbuchstaben] [dospath] [reset]</code>
|ProxyHTMLFixups [Kleinbuchstaben] [dospath] [reset]
|-
|-
!Kontext
!Kontext
Zeile 199: Zeile 236:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
Diese Richtlinie nimmt ein bis drei Argumente wie folgt entgegen:
Diese Richtlinie nimmt ein bis drei Argumente wie folgt entgegen


* <code>Kleinschreibung</code> Urls werden in Kleinbuchstaben umgeschrieben
* Kleinschreibung Urls werden in Kleinbuchstaben umgeschrieben
* <code>dospath</code> Backslashes in URLs werden in Schrägstriche umgeschrieben.
* dospath Backslashes in URLs werden in Schrägstriche umgeschrieben
* <code>zurücksetzen</code> Alle Optionen, die auf einer höheren Ebene in der Konfiguration festgelegt wurden, werden zurückgesetzt.
* zurücksetzen Alle Optionen, die auf einer höheren Ebene in der Konfiguration festgelegt wurden, werden zurückgesetzt


Seien Sie vorsichtig, wenn Sie diese verwenden. Die Korrekturen korrigieren bestimmte Autorenfehler, bergen aber auch das Risiko, dass Links, die ursprünglich korrekt waren, fälschlicherweise korrigiert werden. Verwenden Sie sie nur, wenn Sie wissen, dass Ihr Backend-Server defekt ist.
Seien Sie vorsichtig, wenn Sie diese verwenden
* Die Korrekturen korrigieren bestimmte Autorenfehler, bergen aber auch das Risiko, dass Links, die ursprünglich korrekt waren, fälschlicherweise korrigiert werden
* Verwenden Sie sie nur, wenn Sie wissen, dass Ihr Backend-Server defekt ist


=== ProxyHTMLInterp ===
=== ProxyHTMLInterp ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Ermöglicht die Interpolation von<code>ProxyHTMLURLMap-Regeln</code> pro Anfrage.
|Ermöglicht die Interpolation vonProxyHTMLURLMap-Regeln pro Anfrage
|-
|-
!Syntax
!Syntax
|<code><nowiki>ProxyHTMLInterp On|Off</nowiki></code>
|<nowiki>ProxyHTMLInterp On|Off</nowiki>
|-
|-
!Standard
!Standard
|<code>ProxyHTMLInterp Aus</code>
|ProxyHTMLInterp Aus
|-
|-
!Kontext
!Kontext
Zeile 230: Zeile 269:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich
|}
|}
Dies ermöglicht die Interpolation pro Anfrage in <code>ProxyHTMLURLMap</code> Hin- und Von-Mustern.
Dies ermöglicht die Interpolation pro Anfrage in ProxyHTMLURLMap Hin- und Von-Mustern


Wenn die Interpolation nicht aktiviert ist, werden alle Regeln beim Start vorkompiliert. Mit Interpolation müssen sie für jede Anfrage neu kompiliert werden, was einen zusätzlichen Verarbeitungsaufwand bedeutet. Sie sollte daher nur bei Bedarf aktiviert werden.
Wenn die Interpolation nicht aktiviert ist, werden alle Regeln beim Start vorkompiliert
* Mit Interpolation müssen sie für jede Anfrage neu kompiliert werden, was einen zusätzlichen Verarbeitungsaufwand bedeutet
* Sie sollte daher nur bei Bedarf aktiviert werden


=== ProxyHTMLLinks ===
=== ProxyHTMLLinks ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Geben Sie HTML-Elemente an, die URL-Attribute haben, die umgeschrieben werden sollen.
|Geben Sie HTML-Elemente an, die URL-Attribute haben, die umgeschrieben werden sollen
|-
|-
!Syntax
!Syntax
|<code>ProxyHTMLLinks <var>Element Attribut [attribute2 ...]</var></code>
|ProxyHTMLLinks <var>Element Attribut [attribute2 ...]</var>
|-
|-
!Kontext
!Kontext
Zeile 254: Zeile 295:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
Gibt Elemente an, die URL-Attribute haben, die mit Hilfe von <code>Standard-ProxyHTMLURLMaps</code>umgeschrieben werden sollen. Sie benötigen eine <code>ProxyHTMLLinks-Direktive</code> pro Element, aber sie kann eine beliebige Anzahl von Attributen haben.
Gibt Elemente an, die URL-Attribute haben, die mit Hilfe von Standard-ProxyHTMLURLMapsumgeschrieben werden sollen
* Sie benötigen eine ProxyHTMLLinks-Direktive pro Element, aber sie kann eine beliebige Anzahl von Attributen haben


Normalerweise werden Sie dies global festlegen. Wenn Sie <code>ProxyHTMLLinks</code> in mehr als einem Bereich festlegen, so dass ein Bereich den anderen überschreibt, müssen Sie in jedem dieser Bereiche einen vollständigen Satz angeben.
Normalerweise werden Sie dies global festlegen
* Wenn Sie ProxyHTMLLinks in mehr als einem Bereich festlegen, so dass ein Bereich den anderen überschreibt, müssen Sie in jedem dieser Bereiche einen vollständigen Satz angeben


Eine Standardkonfiguration ist in <var>proxy-html.conf</var>enthalten und definiert die HTML-Links für Standard-HTML 4 und XHTML 1.
Eine Standardkonfiguration ist in <var>proxy-html.conf</var>enthalten und definiert die HTML-Links für Standard-HTML 4 und XHTML 1


==== Beispiele aus proxy-html.conf ====
; Beispiele
Beispiele aus proxy-html.conf
  ProxyHTMLLinks a hrefProxyHTMLLinks area hrefProxyHTMLLinks link hrefProxyHTMLLinks img src longdesc usemapProxyHTMLLinks object classid codebase data usemapProxyHTMLLinks q citeProxyHTMLLinks blockquote citeProxyHTMLLinks ins citeProxyHTMLLinks del citeProxyHTMLLinks form actionProxyHTMLLinks input src usemapProxyHTMLLinks head profileProxyHTMLLinks base hrefProxyHTMLLinks script src for
  ProxyHTMLLinks a hrefProxyHTMLLinks area hrefProxyHTMLLinks link hrefProxyHTMLLinks img src longdesc usemapProxyHTMLLinks object classid codebase data usemapProxyHTMLLinks q citeProxyHTMLLinks blockquote citeProxyHTMLLinks ins citeProxyHTMLLinks del citeProxyHTMLLinks form actionProxyHTMLLinks input src usemapProxyHTMLLinks head profileProxyHTMLLinks base hrefProxyHTMLLinks script src for


Zeile 266: Zeile 310:
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Schaltet das zusätzliche Vorparsen von Metadaten in HTML<code><head>-Abschnitten</code> ein oder aus.
|Schaltet das zusätzliche Vorparsen von Metadaten in HTML<head>-Abschnitten ein oder aus
|-
|-
!Syntax
!Syntax
|<code><nowiki>ProxyHTMLMeta Ein|Aus</nowiki></code>
|<nowiki>ProxyHTMLMeta Ein|Aus</nowiki>
|-
|-
!Standard
!Standard
|<code>ProxyHTMLMeta Aus</code>
|ProxyHTMLMeta Aus
|-
|-
!Kontext
!Kontext
Zeile 284: Zeile 328:
|-
|-
!Kompatibilität
!Kompatibilität
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich.
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich
|}
|}
Dies schaltet das Pre-Parsing von Metadaten in HTML <code><head>-Abschnitten</code> ein oder aus.
Dies schaltet das Pre-Parsing von Metadaten in HTML <head>-Abschnitten ein oder aus


Wenn Sie ProxyHTMLMeta nicht benötigen, können Sie durch das Überspringen dieses Parse-Schrittes eine kleine Leistungssteigerung erzielen. Er ist jedoch manchmal notwendig, damit die Internationalisierung korrekt funktioniert.
Wenn Sie ProxyHTMLMeta nicht benötigen, können Sie durch das Überspringen dieses Parse-Schrittes eine kleine Leistungssteigerung erzielen
* Er ist jedoch manchmal notwendig, damit die Internationalisierung korrekt funktioniert


<code>ProxyHTMLMeta</code> hat zwei Auswirkungen. Erstens und am wichtigsten ermöglicht es die Erkennung von Zeichenkodierungen, die in der Form
ProxyHTMLMeta hat zwei Auswirkungen
* Erstens und am wichtigsten ermöglicht es die Erkennung von Zeichenkodierungen, die in der Form
  <meta http-equiv="Content-Type" content="text/html;<var>charset=foo</var>">
  <meta http-equiv="Content-Type" content="text/html;<var>charset=foo</var>">
oder, im Falle eines XHTML-Dokuments, eine XML-Deklaration. Sie ist NICHT erforderlich, wenn der Zeichensatz in einem echten HTTP-Header des Backend-Servers deklariert ist (was immer vorzuziehen ist), oder wenn das Dokument <var>utf-8</var> (Unicode) oder eine Untermenge wie ASCII ist. Sie können auch darauf verzichten, wenn Dokumente einen Standard verwenden, der mit <code>xml2EncDefault</code> deklariert wurde, aber das birgt das Risiko, eine falsche Deklaration zu verbreiten. Ein <code>ProxyHTMLCharsetOut</code>kann dieses Risiko beseitigen, stellt aber wahrscheinlich einen größeren Verarbeitungsaufwand dar als die Aktivierung von ProxyHTMLMeta.
oder, im Falle eines XHTML-Dokuments, eine XML-Deklaration
* Sie ist NICHT erforderlich, wenn der Zeichensatz in einem echten HTTP-Header des Backend-Servers deklariert ist (was immer vorzuziehen ist), oder wenn das Dokument <var>utf-8</var> (Unicode) oder eine Untermenge wie ASCII ist
* Sie können auch darauf verzichten, wenn Dokumente einen Standard verwenden, der mit xml2EncDefault deklariert wurde, aber das birgt das Risiko, eine falsche Deklaration zu verbreiten
* Ein ProxyHTMLCharsetOutkann dieses Risiko beseitigen, stellt aber wahrscheinlich einen größeren Verarbeitungsaufwand dar als die Aktivierung von ProxyHTMLMeta


Die andere Auswirkung der Aktivierung von <code>ProxyHTMLMeta</code> ist, dass alle <code><meta http-equiv=...>-Deklarationen</code> geparst und in echte HTTP-Header umgewandelt werden, was dem ursprünglichen Zweck dieser Form des HTML <meta>-Elements entspricht.
Die andere Auswirkung der Aktivierung von ProxyHTMLMeta ist, dass alle <meta http-equiv=...>-Deklarationen geparst und in echte HTTP-Header umgewandelt werden, was dem ursprünglichen Zweck dieser Form des HTML <meta>-Elements entspricht


==== Warnung ====
==== Warnung ====
Da ProxyHTMLMeta '''alle''' <code>http-equiv-Elemente</code> zu HTTP-Headern macht, ist es wichtig, dass Sie diese Funktion nur in Fällen aktivieren, in denen Sie dem HTML-Inhalt ebenso vertrauen wie dem Upstream-Server. Wenn der HTML-Inhalt von böswilligen Akteuren kontrolliert wird, ist es für diese möglich, beliebige, möglicherweise bösartige HTTP-Header in die Antworten Ihres Servers einzufügen.
Da ProxyHTMLMeta '''alle''' http-equiv-Elemente zu HTTP-Headern macht, ist es wichtig, dass Sie diese Funktion nur in Fällen aktivieren, in denen Sie dem HTML-Inhalt ebenso vertrauen wie dem Upstream-Server
* Wenn der HTML-Inhalt von böswilligen Akteuren kontrolliert wird, ist es für diese möglich, beliebige, möglicherweise bösartige HTTP-Header in die Antworten Ihres Servers einzufügen


=== ProxyHTMLStripComments ===
=== ProxyHTMLStripComments ===
{| class="wikitable options float"
{| class="wikitable options float"
!Beschreibung
!Beschreibung
|Legt fest, ob HTML-Kommentare entfernt werden sollen.
|Legt fest, ob HTML-Kommentare entfernt werden sollen
|-
|-
!Syntax
!Syntax
|<code><nowiki>ProxyHTMLStripKommentare Ein|Aus</nowiki></code>
|<nowiki>ProxyHTMLStripKommentare Ein|Aus</nowiki>
|-
|-
!Standard
!Standard
|<code>ProxyHTMLStripKommentare Aus</code>
|ProxyHTMLStripKommentare Aus
|-
|-
!Kontext
!Kontext
Zeile 322: Zeile 372:
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich
|}
|}
Diese Direktive veranlasst mod_proxy_html, HTML-Kommentare zu entfernen. Beachten Sie, dass dadurch auch alle in Kommentare eingebetteten Skripte oder Stile gelöscht werden (eine Unart, die 1995/6 mit Netscape 2 zugunsten älterer Browser eingeführt wurde, aber auch heute noch verwendet wird). Sie kann auch mit kommentarbasierten Prozessoren wie SSI oder ESI interferieren: Stellen Sie sicher, dass Sie diese in der Filterkette ''vor'' mod_proxy_html ausführen, wenn Sie Kommentare entfernen!
Diese Direktive veranlasst mod_proxy_html, HTML-Kommentare zu entfernen
* Beachten Sie, dass dadurch auch alle in Kommentare eingebetteten Skripte oder Stile gelöscht werden (eine Unart, die 1995/6 mit Netscape 2 zugunsten älterer Browser eingeführt wurde, aber auch heute noch verwendet wird)
* Sie kann auch mit kommentarbasierten Prozessoren wie SSI oder ESI interferieren: Stellen Sie sicher, dass Sie diese in der Filterkette ''vor'' mod_proxy_html ausführen, wenn Sie Kommentare entfernen!


=== ProxyHTMLURLMap ===
=== ProxyHTMLURLMap ===
Zeile 330: Zeile 382:
|-
|-
!Syntax
!Syntax
|<code>ProxyHTMLURLMap <var>from-pattern to-pattern [flags] [cond]</var></code>
|ProxyHTMLURLMap <var>from-pattern to-pattern [flags] [cond]</var>
|-
|-
!Kontext
!Kontext
Zeile 342: Zeile 394:
|-
|-
!Kompatibilität
!Kompatibilität
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich.
|Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich
|}
|}


Dies ist die wichtigste Direktive zum Umschreiben von HTML-Links. Wenn beim Parsen eines Dokuments ein Link-Ziel mit <var>from-pattern</var> übereinstimmt, wird der übereinstimmende Teil in <var>to-pattern</var> umgeschrieben, modifiziert durch alle übergebenen Flags und die Direktive<code>ProxyHTMLExtended</code>. Nur die mit der Direktive <code>ProxyHTMLLinks</code> angegebenen Elemente werden als HTML-Links betrachtet.
Dies ist die wichtigste Direktive zum Umschreiben von HTML-Links
* Wenn beim Parsen eines Dokuments ein Link-Ziel mit <var>from-pattern</var> übereinstimmt, wird der übereinstimmende Teil in <var>to-pattern</var> umgeschrieben, modifiziert durch alle übergebenen Flags und die DirektiveProxyHTMLExtended
* Nur die mit der Direktive ProxyHTMLLinks angegebenen Elemente werden als HTML-Links betrachtet


Das optionale dritte Argument kann einen der folgenden'''Flags''' definieren. Bei den Flags wird die Groß- und Kleinschreibung beachtet.
Das optionale dritte Argument kann einen der folgenden'''Flags''' definieren
* Bei den Flags wird die Groß- und Kleinschreibung beachtet
{| class="wikitable sortable options"
{| class="wikitable sortable options"
|-
|-
Zeile 362: Zeile 417:
| l || Im Gegensatz zu L. Überschreibt das Standardverhalten von HTML-Links, die nur einmal geändert werden können
| l || Im Gegensatz zu L. Überschreibt das Standardverhalten von HTML-Links, die nur einmal geändert werden können
|-
|-
| R || Verwenden Sie Regular Expression matching-and-replace. <code>from-pattern</code>ist ein regexp, und <code>to-pattern</code> eine Ersetzungszeichenfolge, die auf dem regexp basieren kann.Der Regexp-Speicher wird unterstützt: Sie können Klammern () in <code>from-pattern</code> verwenden und die Übereinstimmungen mit $1 bis $9 in <code>to-pattern</code> abrufen.Die Logik ''beginnt mit'' HTML-Links,''enthält'' aber auch Skripting-Events und eingebettete Skript- und Stilabschnitte
| R || Verwenden Sie Regular Expression matching-and-replace. from-patternist ein regexp, und to-pattern eine Ersetzungszeichenfolge, die auf dem regexp basieren kann.Der Regexp-Speicher wird unterstützt: Sie können Klammern () in from-pattern verwenden und die Übereinstimmungen mit $1 bis $9 in to-pattern abrufen.Die Logik ''beginnt mit'' HTML-Links,''enthält'' aber auch Skripting-Events und eingebettete Skript- und Stilabschnitte
|-
|-
| x || POSIX-erweiterte reguläre Ausdrücke verwenden.Nur mit R anwendbar
| x || POSIX-erweiterte reguläre Ausdrücke verwenden.Nur mit R anwendbar
Zeile 376: Zeile 431:
| $ || Nur am Ende abgleichen.Dies gilt nur für den Abgleich von Zeichenfolgen (nicht für Regexps) und ist für HTML-Links irrelevant
| $ || Nur am Ende abgleichen.Dies gilt nur für den Abgleich von Zeichenfolgen (nicht für Regexps) und ist für HTML-Links irrelevant
|-
|-
| V || Interpoliert Umgebungsvariablen in <code>to-pattern</code>. Eine Zeichenkette der Form <code>${varname|default}</code> wird durch den Wert der Umgebungsvariablen <code>varname</code> ersetzt.Wenn diese nicht gesetzt ist, wird sie durch den <code>Standardwert</code> ersetzt.Das <code>|default</code> ist optional.HINWEIS: Die Interpolation wird nur aktiviert, wenn<code>ProxyHTMLInterp</code> auf <var>Ein</var> steht
| V || Interpoliert Umgebungsvariablen in to-pattern
* Eine Zeichenkette der Form ${varname|default} wird durch den Wert der Umgebungsvariablen varname ersetzt.Wenn diese nicht gesetzt ist, wird sie durch den Standardwert ersetzt.Das |default ist optional.HINWEIS: Die Interpolation wird nur aktiviert, wennProxyHTMLInterp auf <var>Ein</var> steht
|-
|-
| v || Interpolieren von Umgebungsvariablen in <code>from-pattern</code>. Unterstützt werden die oben genannten Patterns.HINWEIS: Die Interpolation wird nur aktiviert, wenn<code>ProxyHTMLInterp</code> auf <var>Ein</var> steht
| v || Interpolieren von Umgebungsvariablen in from-pattern
* Unterstützt werden die oben genannten Patterns.HINWEIS: Die Interpolation wird nur aktiviert, wennProxyHTMLInterp auf <var>Ein</var> steht
|}
|}


Das optionale vierte '''cond-Argument''' definiert eine Bedingung, die pro Anfrage ausgewertet wird, sofern<code>ProxyHTMLInterp</code> <var>eingeschaltet</var> ist. Wird die Bedingung mit FALSE ausgewertet, wird die Map in dieser Anfrage nicht angewandt. Bei TRUE oder wenn keine Bedingung definiert ist, wird die Map angewandt.
Das optionale vierte '''cond-Argument''' definiert eine Bedingung, die pro Anfrage ausgewertet wird, sofernProxyHTMLInterp <var>eingeschaltet</var> ist
* Wird die Bedingung mit FALSE ausgewertet, wird die Map in dieser Anfrage nicht angewandt
* Bei TRUE oder wenn keine Bedingung definiert ist, wird die Map angewandt
 
Eine '''Bedingung''' wird durch den Expression Parser ausgewertet
* Darüber hinaus wird auch die einfachere Syntax der Bedingungen in mod_proxy_html 3.x für HTTPD 2.0 und 2.2 unterstützt


Eine '''Bedingung''' wird durch den Expression Parser ausgewertet. Darüber hinaus wird auch die einfachere Syntax der Bedingungen in mod_proxy_html 3.x für HTTPD 2.0 und 2.2 unterstützt.
mod_proxy_html wurde ursprünglich von WebÞing entwickelt, dessen ausführliche Dokumentation für die Benutzer nützlich sein könnte


mod_proxy_html wurde ursprünglich von WebÞing entwickelt, dessen ausführliche Dokumentation für die Benutzer nützlich sein könnte.
<noinclude>
== Anhang ==
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
==== Links ====
===== Weblinks =====
# https://wiki.ubuntuusers.de/Apache/mod_proxy_html/
# http://sarwiki.informatik.hu-berlin.de/Reverse_Proxy
 
[[Kategorie:Apache/HTTP/Module]]
[[Kategorie:Apache/HTTP/Proxy]]


{{DEFAULTSORT:mod_proxy_html}}
{{DEFAULTSORT:mod_proxy_html}}
{{DISPLAYTITLE:mod_proxy_html}}
{{DISPLAYTITLE:mod_proxy_html}}
= TMP =
== Sicherheitskonzept ==
== Installation ==
Seit Apache 2.4 ist mod_proxy_html enthalten und muss nur aktiviert werden
=== Modul aktivieren ===
sudo a2enmod proxy
sudo a2enmod proxy_html
sudo a2enmod proxy_http
; Hinweis
Anschließend muss der Apache Webserver neu gestartet werden ('''force-reload''')
== Anwendung ==
=== Problembehebung ===
== Konfiguration ==
Zum Verwenden des Moduls muss die [[Apache/HTTP/Virtuelle Server]]-Konfiguration entsprechend angepasst werden.
; Hier ein Ausschnitt einer möglichen Konfiguration
<syntaxhighlight lang=apache line>
<VirtualHost *>
...
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /ejabberd/ http://127.0.0.1:5281/
ProxyPassReverse /ejabberd/ http://127.0.0.1:5281/
...
</VirtualHost>
</syntaxhighlight>
; Hinweis
Nach dieser Änderung muss der Apache Webserver neu gestartet werden (reload)
; Warnung
Die Option '''ProxyRequests''' sollte ohne weitere Sicherheitsvorkehrungen (z.B.&nbsp;nur für bestimmte Subnetze erlaubt) '''NICHT''' auf On gesetzt werden, ansonst hat man einen sog.&nbsp;Open Proxy, was im Normalfall ein großes Sicherheitsproblem darstellt!
=== Proxy-Eigenschaften ===
=== Dateien ===
<noinclude>


[[Kategorie:Apache/HTTP/Module]]
[[Kategorie:Apache/HTTP/Module]]
[[Kategorie:Apache/HTTP/Proxy]]
[[Kategorie:Apache/HTTP/Proxy]]
</noinclude>

Aktuelle Version vom 19. Oktober 2024, 10:14 Uhr

mod_proxy_html - Kurzbeschreibung

Beschreibung

Beschreibung Umschreiben von HTML-Links, um sicherzustellen, dass sie von Client-Netzwerken in einem Proxy-Kontext adressierbar sind
Status Basis
Modul-Bezeichner proxy_html_modul
Quelldatei mod_proxy_html.c
Kompatibilität Version 2.4 und höher
  • Als Drittanbieter-Modul für frühere 2.x-Versionen verfügbar

Dieses Modul bietet einen Ausgabefilter zum Umschreiben von HTML-Links in einer Proxy-Situation, um sicherzustellen, dass Links für Benutzer außerhalb des Proxys funktionieren

  • Es dient demselben Zweck wie die Apache-Direktive ProxyPassReverse für HTTP-Header und ist eine wesentliche Komponente eines Reverse-Proxys

Wenn ein Unternehmen zum Beispiel einen Anwendungsserver unterappserver.example.com hat, der nur vom internen Netzwerk des Unternehmens aus sichtbar ist, und einen öffentlichen Webserverwww.example.com, möchte es vielleicht ein Gateway zum Anwendungsserver unter http://www.example.com/appserver/ bereitstellen . Wenn der Anwendungsserver auf sich selbst verlinkt, müssen diese Links umgeschrieben werden, damit sie über das Gateway funktionieren. mod_proxy_html dient dazu,<a href="http://appserver.example.com/foo/bar.html">foobar</a> in<a href="http://www.example.com/appserver/foo/bar.html">foobar</a>umzuschreiben, um es von außen zugänglich zu machen


Beschreibung

mod_proxy_html ist ein Ausgabefilter, der HTML-Links so umschreiben kann, dass mehrere Webserver nahtlos miteinander kombiniert werden können.

So kann z.B. ein zweiter Webserver (welchen z.B. Dienste wie ejabberd bereitstellen) unter http://server/ejabberd erreicht werden, obwohl der zweite Webserver auf der IP 127.0.0.1 und dem Port 5281 läuft.

  • Die Hauptaufgabe (und damit der Unterschied zum "normalen" mod_proxy) besteht darin, dass das übertragene HTML so modifiziert wird, dass alle Links mit der veränderten Situation klarkommen.

Hier eine grafische Darstellung des Ganzen: Bild(mod_proxy_html.png, align=center) Wie im Beispiel zu sehen wird man über `http://server/ejabberd` auf den eingebauten Webserver vom [:Archiv/ejabberd:] umgeleitet.

  • Alle Seiten, die der ejabberd sendet, werden durch mod_proxy_html so verändert, dass die Links mit `http://server/ejabberd/` beginnen.
  • So ist eine normale Funktion der ejabberd-Administrationsseiten gewährleistet.
  • Natürlich funktioniert dieses Verfahren auch mit vielen anderen Diensten.

Direktiven

ProxyHTMLBufSize

Beschreibung Legt die Puffergrößenerhöhung für die Pufferung von Inline-Skripten und Stylesheets fest
Syntax ProxyHTMLBufSize bytes
Standard ProxyHTMLBufSize 8192
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

Um in HTML-Dokumente eingebettete Nicht-HTML-Inhalte (Stylesheets und Skripte) zu parsen, muss mod_proxy_htmldas gesamte Skript oder Stylesheet in einen Puffer einlesen

  • Dieser Puffer wird nach Bedarf erweitert, um das größte Skript oder Stylesheet in einer Seite aufzunehmen, und zwar in Byte-Schritten, die durch diese Direktive festgelegt werden

Der Standardwert ist 8192 und funktioniert für fast alle Seiten gut

  • Wenn Sie jedoch wissen, dass Sie Seiten mit Stylesheets und/oder Skripten, die größer als 8K sind (d.h
  • für ein einzelnes Skript oder Stylesheet, NICHT insgesamt), als Proxy verwenden, ist es effizienter, eine größere Puffergröße einzustellen und zu vermeiden, dass die Größe des Puffers während einer Anfrage dynamisch angepasst werden muss

ProxyHTMLCharsetOut

Beschreibung Geben Sie einen Zeichensatz für die mod_proxy_html-Ausgabe an
Syntax ProxyHTMLCharsetOut Zeichensatz | *
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

Hiermit wird eine Kodierung für die mod_proxy_html-Ausgabe ausgewählt

  • Sie sollte normalerweise nicht verwendet werden, da jede Änderung der Standardkodierung UTF-8(Unicode - wie intern von libxml2 verwendet) einen zusätzlichen Verarbeitungsaufwand bedeutet
  • Das spezielle Token ProxyHTMLCharsetOut *erzeugt die Ausgabe in der gleichen Kodierung wie die Eingabe

Beachten Sie, dass dies davon abhängt, dass mod_xml2enc geladen ist

ProxyHTMLDocType

Beschreibung Legt eine HTML- oder XHTML-Dokumenttyp-Deklaration fest
Syntax ProxyHTMLDocType HTML|XHTML [Legacy]ORProxyHTMLDocType fpi [SGML|XML]
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

In der ersten Form werden die Dokumente je nach der gewählten Option als HTML 4.01 oder XHTML 1.0 deklariert

  • Diese Option bestimmt auch, ob die HTML- oder XHTML-Syntax für die Ausgabe verwendet wird
  • Beachten Sie, dass das Format der Dokumente, die vom Backend-Server kommen, keine Rolle spielt: der Parser wird es automatisch verarbeiten
  • Wenn das optionale zweite Argument aufLegacy gesetzt wird, werden die Dokumente als "Transitional" deklariert
  • Diese Option kann notwendig sein, wenn Sie Inhalte aus der Zeit vor 1998 als Proxy verwenden oder mit fehlerhaften Authoring/Publishing-Tools arbeiten

In der zweiten Form wird Ihr eigenes FPI eingefügt

  • Das optionale zweite Argument bestimmt, ob die SGML/HTML- oder die XML/XHTML-Syntax verwendet werden soll

Die Standardeinstellung ist das Weglassen jeglicher FPI, mit der Begründung, dass keine FPI besser ist als eine gefälschte

  • Wenn Ihr Backend anständiges HTML oder XHTML erzeugt, stellen Sie es entsprechend ein

Wenn die erste Form verwendet wird, bereinigt mod_proxy_html auch den HTML-Code gemäß dem angegebenen Standard

  • Es kann nicht jeden Fehler beheben, aber es entfernt falsche Elemente und Attribute
  • Es protokolliert optional auch andere Fehler im LogLevel Debug

ProxyHTMLEnable

Beschreibung Schaltet den proxy_html-Filter ein oder aus
Syntax ProxyHTMLEnable On|Off
Standard ProxyHTMLEnable Aus
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich

Ein einfacher Schalter, um den proxy_html-Filter zu aktivieren oder zu deaktivieren

  • Wenn mod_xml2enc geladen ist, wird auch automatisch die Internationalisierungsunterstützung eingerichtet

Beachten Sie, dass der proxy_html-Filter nur auf HTML-Daten (Content-Type text/html oder application/xhtml+xml) wirkt und wenn die Daten über einen Proxy übermittelt werden

  • Sie können dies (auf eigene Gefahr) außer Kraft setzen, indem Sie die Umgebungsvariable PROXY_HTML_FORCE setzen

ProxyHTMLEvents

Beschreibung Geben Sie Attribute an, die als Scripting-Ereignisse behandelt werden sollen
Syntax ProxyHTMLEvents Attribut [Attribut ...]
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

Gibt ein oder mehrere Attribute an, die als Skripting-Ereignisse behandelt werden und auf die ProxyHTMLURLMapsangewendet wird, wenn sie aktiviert sind

  • Sie können eine beliebige Anzahl von Attributen in einer oder mehrerenProxyHTMLEvents-Direktiven angeben

Normalerweise werden Sie dies global festlegen

  • Wenn Sie ProxyHTMLEvents in mehr als einem Bereich festlegen, so dass einer den anderen überschreibt, müssen Sie in jedem dieser Bereiche einen vollständigen Satz angeben

Eine Standardkonfiguration ist in proxy-html.confenthalten und definiert die Ereignisse in Standard-HTML 4 und XHTML 1

ProxyHTMLExtended

Beschreibung Legt fest, ob Links in Inline-Skripten, Stylesheets und Skriptereignissen repariert werden sollen
Syntax ProxyHTMLExtended On|Off
Standard ProxyHTMLExtended Aus
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

Bei der Einstellung " Aus" werden HTML-Links gemäß denProxyHTMLURLMap-Richtlinien umgeschrieben, aber Links, die in Javascript und CSS erscheinen, werden ignoriert

Wenn diese Option auf Ein gesetzt ist, werden alle Skriptereignisse (wie vonProxyHTMLEvents bestimmt) und eingebettete Skripte oder Stylesheets auch von den ProxyHTMLURLMap-Regelnverarbeitet, entsprechend den für jede Regel gesetzten Flags

  • Da dies mehr Parsing erfordert, ist die Leistung am besten, wenn Sie es nur aktivieren, wenn es unbedingt notwendig ist

Sie müssen auch auf die übereinstimmenden Muster achten, da der Parser nicht weiß, was eine URL innerhalb eines eingebetteten Skripts oder Stylesheets ist

  • Insbesondere die erweiterte Übereinstimmung von / führt wahrscheinlich zu falschen Übereinstimmungen

ProxyHTMLFixups

Beschreibung Korrekturen für einfache HTML-Fehler
Syntax ProxyHTMLFixups [Kleinbuchstaben] [dospath] [reset]
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

Diese Richtlinie nimmt ein bis drei Argumente wie folgt entgegen

  • Kleinschreibung Urls werden in Kleinbuchstaben umgeschrieben
  • dospath Backslashes in URLs werden in Schrägstriche umgeschrieben
  • zurücksetzen Alle Optionen, die auf einer höheren Ebene in der Konfiguration festgelegt wurden, werden zurückgesetzt

Seien Sie vorsichtig, wenn Sie diese verwenden

  • Die Korrekturen korrigieren bestimmte Autorenfehler, bergen aber auch das Risiko, dass Links, die ursprünglich korrekt waren, fälschlicherweise korrigiert werden
  • Verwenden Sie sie nur, wenn Sie wissen, dass Ihr Backend-Server defekt ist

ProxyHTMLInterp

Beschreibung Ermöglicht die Interpolation vonProxyHTMLURLMap-Regeln pro Anfrage
Syntax ProxyHTMLInterp On|Off
Standard ProxyHTMLInterp Aus
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich

Dies ermöglicht die Interpolation pro Anfrage in ProxyHTMLURLMap Hin- und Von-Mustern

Wenn die Interpolation nicht aktiviert ist, werden alle Regeln beim Start vorkompiliert

  • Mit Interpolation müssen sie für jede Anfrage neu kompiliert werden, was einen zusätzlichen Verarbeitungsaufwand bedeutet
  • Sie sollte daher nur bei Bedarf aktiviert werden

ProxyHTMLLinks

Beschreibung Geben Sie HTML-Elemente an, die URL-Attribute haben, die umgeschrieben werden sollen
Syntax ProxyHTMLLinks Element Attribut [attribute2 ...]
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

Gibt Elemente an, die URL-Attribute haben, die mit Hilfe von Standard-ProxyHTMLURLMapsumgeschrieben werden sollen

  • Sie benötigen eine ProxyHTMLLinks-Direktive pro Element, aber sie kann eine beliebige Anzahl von Attributen haben

Normalerweise werden Sie dies global festlegen

  • Wenn Sie ProxyHTMLLinks in mehr als einem Bereich festlegen, so dass ein Bereich den anderen überschreibt, müssen Sie in jedem dieser Bereiche einen vollständigen Satz angeben

Eine Standardkonfiguration ist in proxy-html.confenthalten und definiert die HTML-Links für Standard-HTML 4 und XHTML 1

Beispiele

Beispiele aus proxy-html.conf

ProxyHTMLLinks a hrefProxyHTMLLinks area hrefProxyHTMLLinks link hrefProxyHTMLLinks img src longdesc usemapProxyHTMLLinks object classid codebase data usemapProxyHTMLLinks q citeProxyHTMLLinks blockquote citeProxyHTMLLinks ins citeProxyHTMLLinks del citeProxyHTMLLinks form actionProxyHTMLLinks input src usemapProxyHTMLLinks head profileProxyHTMLLinks base hrefProxyHTMLLinks script src for

ProxyHTMLMeta

Beschreibung Schaltet das zusätzliche Vorparsen von Metadaten in HTML<head>-Abschnitten ein oder aus
Syntax ProxyHTMLMeta Ein|Aus
Standard ProxyHTMLMeta Aus
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich

Dies schaltet das Pre-Parsing von Metadaten in HTML <head>-Abschnitten ein oder aus

Wenn Sie ProxyHTMLMeta nicht benötigen, können Sie durch das Überspringen dieses Parse-Schrittes eine kleine Leistungssteigerung erzielen

  • Er ist jedoch manchmal notwendig, damit die Internationalisierung korrekt funktioniert

ProxyHTMLMeta hat zwei Auswirkungen

  • Erstens und am wichtigsten ermöglicht es die Erkennung von Zeichenkodierungen, die in der Form
<meta http-equiv="Content-Type" content="text/html;charset=foo">

oder, im Falle eines XHTML-Dokuments, eine XML-Deklaration

  • Sie ist NICHT erforderlich, wenn der Zeichensatz in einem echten HTTP-Header des Backend-Servers deklariert ist (was immer vorzuziehen ist), oder wenn das Dokument utf-8 (Unicode) oder eine Untermenge wie ASCII ist
  • Sie können auch darauf verzichten, wenn Dokumente einen Standard verwenden, der mit xml2EncDefault deklariert wurde, aber das birgt das Risiko, eine falsche Deklaration zu verbreiten
  • Ein ProxyHTMLCharsetOutkann dieses Risiko beseitigen, stellt aber wahrscheinlich einen größeren Verarbeitungsaufwand dar als die Aktivierung von ProxyHTMLMeta

Die andere Auswirkung der Aktivierung von ProxyHTMLMeta ist, dass alle <meta http-equiv=...>-Deklarationen geparst und in echte HTTP-Header umgewandelt werden, was dem ursprünglichen Zweck dieser Form des HTML <meta>-Elements entspricht

Warnung

Da ProxyHTMLMeta alle http-equiv-Elemente zu HTTP-Headern macht, ist es wichtig, dass Sie diese Funktion nur in Fällen aktivieren, in denen Sie dem HTML-Inhalt ebenso vertrauen wie dem Upstream-Server

  • Wenn der HTML-Inhalt von böswilligen Akteuren kontrolliert wird, ist es für diese möglich, beliebige, möglicherweise bösartige HTTP-Header in die Antworten Ihres Servers einzufügen

ProxyHTMLStripComments

Beschreibung Legt fest, ob HTML-Kommentare entfernt werden sollen
Syntax ProxyHTMLStripKommentare Ein|Aus
Standard ProxyHTMLStripKommentare Aus
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter erhältlich

Diese Direktive veranlasst mod_proxy_html, HTML-Kommentare zu entfernen

  • Beachten Sie, dass dadurch auch alle in Kommentare eingebetteten Skripte oder Stile gelöscht werden (eine Unart, die 1995/6 mit Netscape 2 zugunsten älterer Browser eingeführt wurde, aber auch heute noch verwendet wird)
  • Sie kann auch mit kommentarbasierten Prozessoren wie SSI oder ESI interferieren: Stellen Sie sicher, dass Sie diese in der Filterkette vor mod_proxy_html ausführen, wenn Sie Kommentare entfernen!

ProxyHTMLURLMap

Beschreibung Definiert eine Regel zum Umschreiben von HTML-Links
Syntax ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]
Kontext Serverkonfiguration, virtueller Host, Verzeichnis
Status Basis
Modul mod_proxy_html
Kompatibilität Version 2.4 und höher; für frühere 2.x-Versionen als Drittanbieter-Modul erhältlich

Dies ist die wichtigste Direktive zum Umschreiben von HTML-Links

  • Wenn beim Parsen eines Dokuments ein Link-Ziel mit from-pattern übereinstimmt, wird der übereinstimmende Teil in to-pattern umgeschrieben, modifiziert durch alle übergebenen Flags und die DirektiveProxyHTMLExtended
  • Nur die mit der Direktive ProxyHTMLLinks angegebenen Elemente werden als HTML-Links betrachtet

Das optionale dritte Argument kann einen der folgendenFlags definieren

  • Bei den Flags wird die Groß- und Kleinschreibung beachtet
Option Beschreibung
h HTML-Links ignorieren (unverändert durchlassen)
e Skripting-Ereignisse ignorieren (unverändert durchlassen)
c Eingebettete Skript- und Stilabschnitte werden unverändert weitergegeben
L Letzte Übereinstimmung.Wenn diese Regel zutrifft, werden keine weiteren Regeln angewandt (beachten Sie, dass dies bei HTML-Links automatisch geschieht)
l Im Gegensatz zu L. Überschreibt das Standardverhalten von HTML-Links, die nur einmal geändert werden können
R Verwenden Sie Regular Expression matching-and-replace. from-patternist ein regexp, und to-pattern eine Ersetzungszeichenfolge, die auf dem regexp basieren kann.Der Regexp-Speicher wird unterstützt: Sie können Klammern () in from-pattern verwenden und die Übereinstimmungen mit $1 bis $9 in to-pattern abrufen.Die Logik beginnt mit HTML-Links,enthält aber auch Skripting-Events und eingebettete Skript- und Stilabschnitte
x POSIX-erweiterte reguläre Ausdrücke verwenden.Nur mit R anwendbar
i Groß- und Kleinschreibung wird nicht berücksichtigt.Nur mit R anwendbar
n Regexp-Speicher deaktivieren (für Geschwindigkeit).Nur anwendbar mit R
s Zeilenbasierter Regexp-Abgleich.Nur mit R anwendbar
^ Nur am Anfang abgleichen.Dies gilt nur für den Abgleich von Zeichenfolgen (nicht für Regexps) und ist für HTML-Links irrelevant
$ Nur am Ende abgleichen.Dies gilt nur für den Abgleich von Zeichenfolgen (nicht für Regexps) und ist für HTML-Links irrelevant
V Interpoliert Umgebungsvariablen in to-pattern
  • Eine Zeichenkette der Form ${varname|default} wird durch den Wert der Umgebungsvariablen varname ersetzt.Wenn diese nicht gesetzt ist, wird sie durch den Standardwert ersetzt.Das |default ist optional.HINWEIS: Die Interpolation wird nur aktiviert, wennProxyHTMLInterp auf Ein steht
v Interpolieren von Umgebungsvariablen in from-pattern
  • Unterstützt werden die oben genannten Patterns.HINWEIS: Die Interpolation wird nur aktiviert, wennProxyHTMLInterp auf Ein steht

Das optionale vierte cond-Argument definiert eine Bedingung, die pro Anfrage ausgewertet wird, sofernProxyHTMLInterp eingeschaltet ist

  • Wird die Bedingung mit FALSE ausgewertet, wird die Map in dieser Anfrage nicht angewandt
  • Bei TRUE oder wenn keine Bedingung definiert ist, wird die Map angewandt

Eine Bedingung wird durch den Expression Parser ausgewertet

  • Darüber hinaus wird auch die einfachere Syntax der Bedingungen in mod_proxy_html 3.x für HTTPD 2.0 und 2.2 unterstützt

mod_proxy_html wurde ursprünglich von WebÞing entwickelt, dessen ausführliche Dokumentation für die Benutzer nützlich sein könnte


Anhang

Siehe auch

Links

Weblinks
  1. https://wiki.ubuntuusers.de/Apache/mod_proxy_html/
  2. http://sarwiki.informatik.hu-berlin.de/Reverse_Proxy



TMP

Sicherheitskonzept

Installation

Seit Apache 2.4 ist mod_proxy_html enthalten und muss nur aktiviert werden

Modul aktivieren

sudo a2enmod proxy
sudo a2enmod proxy_html
sudo a2enmod proxy_http
Hinweis

Anschließend muss der Apache Webserver neu gestartet werden (force-reload)

Anwendung

Problembehebung

Konfiguration

Zum Verwenden des Moduls muss die Apache/HTTP/Virtuelle Server-Konfiguration entsprechend angepasst werden.

Hier ein Ausschnitt einer möglichen Konfiguration
 <VirtualHost *>
 ...
 ProxyRequests Off
 <Proxy *>
 Order deny,allow
 Allow from all
 </Proxy>
 ProxyPass /ejabberd/ http://127.0.0.1:5281/
 ProxyPassReverse /ejabberd/ http://127.0.0.1:5281/
 ...
 </VirtualHost>
Hinweis

Nach dieser Änderung muss der Apache Webserver neu gestartet werden (reload)

Warnung

Die Option ProxyRequests sollte ohne weitere Sicherheitsvorkehrungen (z.B. nur für bestimmte Subnetze erlaubt) NICHT auf On gesetzt werden, ansonst hat man einen sog. Open Proxy, was im Normalfall ein großes Sicherheitsproblem darstellt!

Proxy-Eigenschaften

Dateien