<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
<modulesynopsis>

<name>mod_proxy</name>
<description>HTTP/1.1 proxy/gateway Server</description>
<status>Erweiterung</status>
<sourcefile>mod_proxy.c</sourcefile>
<identifier>proxy_module</identifier>

<summary>

<note type="warning"><title>Warnung</title>
Dieses Dokument ist aktualisiert worden, um die &#196;nderungen in Betracht
zu ziehen, die in der Version 2.0 des Apache HTTP Servers vorgenommen wurden.
Da einige der Informationen noch ungenau sein k&#246;nnen, verwenden Sie diese
bitte mit Bedacht.
</note>

<p>Dieses Modul implementiert ein proxy/gateway f&#252;r Apache. Es implementiert
Proxy-F&#228;higkeit f&#252;r
<code>FTP</code>,
<code>CONNECT</code> (f&#252;r SSL),
<code>HTTP/0.9</code>,
<code>HTTP/1.0</code> und
<code>HTTP/1.1</code>.
Das Modul kann konfiguriert werden, um andere Proxymodule
f&#252;r diese und andere Protokolle anzuschlie&#223;en.</p>

<p>Dieses Modul war experimentell in Apache 1.1.x. Verbesserungen und
Fehlerbeseitigungen wurden in Apache v1.2.x und in Apache v1.3.x gemacht,
dann unterging das Modul einer General&#252;berholung f&#252;r Apache v2.0.
Die Protokollunterst&#252;tzung wurde zu HTTP/1.1 verbessert, und Filterunterst&#252;tzung
wurde erm&#246;glicht.</p>

<p>Notieren Sie bitte, da&#223; die <strong>cache-Funktion</strong>, die im mod_proxy
bis zu Apache v1.3.x vorhanden ist, vom mod_proxy <strong>entfernt</strong> worden und
im neuen Modul mod_cache enthalten ist.</p>

<p>Sollten Sie beim Verbindungsaufbau zu Internetservern SSL brauchen,
lesen Sie bitte die <code>SSLProxy*</code> Direktiven in mod_ssl.</p>

<note type="warning"><p>Setzen Sie keinen Proxy mit <directive
module="mod_proxy">ProxyRequests</directive> auf solange Sie
<a href="#access">den Server nicht sicher gemacht haben</a>. Offene Proxyserver
sind gef&#228;hrlich f&#252;r Ihr Netzwerk und das Internet im allgemeinen.</p></note>

</summary>

<section id="configs"><title>Allgemeine Konfigurationsthemen</title>

<ul>
<li><a href="#forwardreverse">Forward und Reverse Proxies</a></li>
<li><a href="#access">Zugriff auf den Proxy kontrollieren</a></li>
<li><a href="#mimetypes">Warum kann Dateityp <em>xxx</em> nicht per FTP
heruntergeladen werden?</a></li>
<li><a href="#type">Wie kann man ein Herunterladen mittels FTP ASCII von
einer bestimmten Datei erzwingen?</a></li>
<li><a href="#percent2fhack">Wie erh&#228;lt man via FTP auf Dateien au&#223;erhalb
seines Benutzerverzeichnisses Zugriff?</a></li>
<li><a href="#ftppass">Wie kann man bei FTP das im Klartext vorliegende
Passwort in der URL des Browsers verschl&#252;sseln?</a></li>
<li><a href="#startup">Warum startet Apache etwas langsamer, wenn das Proxymodul
benutzt wird?</a></li>
<!--<li><a href="#socks">Can I use the Apache proxy module with my SOCKS proxy?</a>-->
<li><a href="#intranet">Was k&#246;nnte sonst noch n&#252;tzlich sein f&#252;r
einen Intranet Proxyserver?</a></li>
<li><a href="#envsettings">Wie kann man dem Proxy HTTP/1.0 beibringen und
keepalive deaktivieren?</a></li>
</ul>

<section id="forwardreverse"><title>Forward und Reverse Proxy</title>

<p>Apache kann als <em>forward</em> und <em>reverse</em> Proxy konfiguriert
werden.</p>

<p>Ein <em>Forward Proxy</em> ist ein Transitsystem, das einem Client-Browser
die Verbindung zu einem entfernten Netzwerk erm&#246;glicht worauf dieser
normalerweise keinen Zugriff hat. Ein solcher Proxy kann auch Daten im Cache
ablegen, was die Netzbelastung zwischen dem Rechner des Proxy und dem entfernten
Webserver reduziert.</p>

<p>Einen Forward Proxy, einen Weiterleiter, konfiguriert man mit der
<directive module="mod_proxy">ProxyRemote</directive> Direktive.
Zus&#228;tzliches Cachen der Daten erfordert eine Konfiguration des Moduls
<module>mod_cache</module>.
Bei sehr hohen Anspr&#252;chen an den Cache, GB-Bereich und mehrere hundert
oder tausend Benutzer, sollten Sie <a href="http://www.squid.org">Squid</a>
einsetzen.</p>

<p>Ein <em>Reverse Proxy</em> ist ein Webserver, der so konfiguriert ist,
da&#223; er Seiten eines anderen Webservers einblendet - und das zus&#228;tzlich
zu eigenen von der Festplatte stammenden Dokumenten oder solchen, die dynamisch
mit Skripten erzeugt wurden. Dem Client bleibt der Ursprung der eingeblendeten
Seiten verborgen.</p>

<p>Ist der Reverse Proxy mit mod_cache konfiguriert, kann er auch als Cache
f&#252;r langsame Webserver eingesetzt werden. Damit lassen sich fortgeschrittene
URL-Strategien und Verwaltungstechniken einsetzen in dem Sinn, da&#223; Webseiten
verschiedener Webserver oder Betriebssysteme innerhalb eines gemeinsamen Namensraums
koexistieren. Zus&#228;tzlich bietet sich hier die M&#246;glichkeit ein zentrales
Loggen der Zugriffe zu implementieren.</p>

<p>Einen Reverse Proxy konfiguriert man mit den Direktiven
<directive module="mod_proxy">ProxyPass</directive> und <directive
module="mod_proxy">ProxyPassReverse</directive>.
Auch hierbei kann mit mod_cache ein Zusatzspeicher angelegt werden.</p>

</section>

<section id="access"><title>Zugriff auf den Proxy kontrollieren</title>

<p>Zugriffskontrolle auf den Proxy erfolgt mit der
<directive module="mod_proxy" type="section">Proxy</directive>-Kontrollstruktur;
Beispiel:</p>

<example>
&lt;Proxy *&gt;<br />
Order Deny,Allow<br />
Deny from all<br />
Allow from 192.168.0<br />
&lt;/Proxy&gt;
</example>

<p>Wenn man einen Reverse Proxy konfiguriert, wird die Zugriffskontrolle &#252;bernommen
von den Anweisungen in der <directive module="core"
type="section">directory</directive>-Konfiguration.</p>

</section>

<section id="mimetypes"><title>Warum kann Dateityp <em>xxx</em>
nicht per FTP heruntergeladen werden?</title>

<p>Ein wahrscheinlicher Grund wird sein, da&#223; der betreffende Dateityp
nicht als <em>application/octet-stream</em> in der Datei mime.types
konfiguriert ist. Eine solche Zeile k&#246;nnte z.B. sein:</p>

<example>
application/octet-stream        bin dms lha lzh exe class tgz taz
</example>

</section>

<section id="type"><title>Wie kann man ein Herunterladen mittels
FTP ASCII von einer bestimmten Datei erzwingen?</title>

<p>In der seltenen Situation wo ein solches Herunterladen mittels der FTP
<strong>ASCII</strong> &#220;bermittlungsmethode n&#246;tig ist (Standardtransfer
ist <strong>bin&#228;r</strong>), kann man die Voreinstellung von mod_proxy
umgehen, indem man den URI erg&#228;nzt mit dem Zusatz <code>;type=a</code>,
um den ASCII-Transfer zu erzwingen (FTP Verzeichniseintr&#228;ge werden immer
im ASCII-Modus ausgef&#252;hrt).</p>

</section>

<section id="percent2fhck"><title>Wie erh&#228;lt man via
FTP auf Dateien au&#223;erhalb seines Benutzerverzeichnisses Zugriff?</title>

<p>Eine FTP URI wird normalerweise relativ zu dem Benutzerverzeichnis des
Benutzers interpretiert, der sich auf dem Server einloggt. Um in h&#246;her
gelgene Stockwerke zu gelangen, kann man beispielsweise nicht /../ angeben,
da die Punkte vom Browser interpretiert und nicht zum FTP-Server gesandt werden.
Um dieses Problem zu l&#246;sen, wurde der sogenannte "Squid %2f hack" in
den Apache FTP-Proxy implementiert; diese L&#246;sung wird auch in anderen
Proxyservern, wie z.B dem <a href="http://www.squid-cache.org/">Squid Proxy Cache</a> benutzt.
Indem man ein /%2f an den Pfad der Anforderung anh&#228;ngt, kann man das Startverzeichnis
f&#252;r FTP auf / (root - an Stelle des Benutzerverzeichnisses) setzen. Das
h&#228;ngt nat&#252;rlich auch von der Konfiguration des jeweiligen
FTP-Servers ab.</p>

<p><strong>Beispiel:</strong> Um auf die Datei <code>/etc/motd</code> zuzugreifen,
verwendet man die URL</p>

<example>
ftp://<em>user@host</em>/%2f/etc/motd
</example>

</section>

<section id="ftppass"><title>Wie kann man bei FTP das im Klartext vorliegende
Passwort in der URL des Browsers verschl&#252;sseln?</title>

<p>Apache benutzt verschiedene Strategien, wenn es um das Einloggen mittels
Benutzername und Passwort geht. Fehlen Benutzername und Passwort, sendet Apache
an den FTP-Server ein anonymes Login, z.B.,</p>

<example>
user: anonymous<br />
password: apache_proxy@
</example>

<p>Das ist erfolgreich bei allen popul&#228;ren FTP-Servern, die f&#252;r
anonymen Zugriff konfiguriert sind.</p>

<p>Will man sich mit seinem Benutzernamen einloggen, so kann dieser in die
URL beispielsweise eingegeben werden als <code>ftp://<em>benutzername@rechner</em>/datei</code>.
Wenn der FTP-Server nach einem Passwort fragt, was normalerweise der Fall
ist, dann wird Apache einen Antwort-Header generieren [401 Authorization
required], der den Browser des Benutzers dazu bringt ein Dialogfenster zu
&#246;ffnen, in welches Passwort und Benutzername eingegeben werden k&#246;nnen.
Sind diese Eingaben erfolgt, wird ein neuer Verbindungsaufbau versucht,
und im Erfolgsfall wird die Seite angezeigt. Der Vorteil des Dialogfensters
f&#252;r Passwort und Benutzername liegt darin, da&#223; diese kritischen
Angaben nicht in der URL des Browsers erscheinen und damit f&#252;r jemand
mit Zugang zum selben Rechner in der Historie des Browsers sichtbar sind.</p>

<note><title>Wichtige Notiz</title>
Solchermassen &#252;bermittelte Daten werden auf ihrer Reise nicht verschl&#252;sselt.
Sie werden zwischen Browser und dem Apacheserver als base64-encoded Klartext
&#252;bertragen, und auf dem Weg vom Apache Proxy zum FTP-Server in reinem
Text. Sie sollten daher eigentlich NIE diese Methode benutzen, um mittels
HTTP auf pers&#246;nliche Daten auf einem FTP-Server zuzugreifen. Netzverkehr
kann mitbelauscht und Klartext sehr einfach rausgeschnitten werden.
</note>

</section>

<section id="startup"><title>Warum startet Apache etwas langsamer,
wenn das Proxymodul benutzt wird?</title>

<p>Wenn man z.B. die <directive module="mod_proxy">ProxyBlock</directive>-Direktive
einsetzt, werden IP-Adressen nach ihrem Rechnernamen aufgel&#246;st und im
Zwischenspeicher abgelegt, um im laufenden Betrieb schnelleren Zugriff zu
erhalten. Das kann f&#252;r das Startverhalten einige Sekunden mehr Zeit
beanspruchen, je nachdem wieviele DNS-Anfragen erforderlich sind und wie
schnell der DNS-Server antwortet.</p>

</section>

<section id="intranet"><title>Was k&#246;nnte sonst noch n&#252;tzlich
sein f&#252;r einen Intranet Proxyserver?</title>

<p>Ein Apache Proxyserver im Intranet einer Firma wird Anfragen zum Internet
in der Regel durch eine Firewall senden m&#252;ssen. Erfolgt jedoch auch
ein Zugriff auf Webseiten im Intranet, so sollte die Firewall umgangen werden.
Dazu dient die Direktive <directive module="mod_proxy">NoProxy</directive>.
Damit z&#228;hlt man diejenigen Rechner auf, auf welche ein direkter Zugriff
ohne Umweg &#252;ber die Firewall erfolgen soll.</p>

<p>Benutzer innerhalb eines Intranet tendieren dazu in der URL des Browsers
lokale Adressen abzuk&#252;rzen, wie z.B. "http://intra/" an Stelle von
"http://intra.unsere.firma.de/". Bei einigen kommerziellen Proxyservern kann
man dieses Benutzerverhalten durch eine entsprechende Konfiguration abfangen
und auf die richtige Adresse weiterleiten. Wenn im Apache Webserver der
<a href="#proxyrequests">Proxydienst</a> aktiviert ist, setzt man die
<directive module="mod_proxy">ProxyDomain</directive>-Direktive f&#252;r diesen Zweck
ein. Dann generiert derApache eine Redirekt-Antwort und leitet den
Client zu der korrekten, voll qualifizierten Adresse. Damit enth&#228;lt
auch die Lesezeichendatei des Benutzers den voll qualifizierten Rechnernamen,
wie z.B. "http://intra.unsere.firma.de/"</p>

</section>

<section id="envsettings"><title>Wie kann man dem Proxy HTTP/1.0
beibringen und keepalive deaktivieren?</title>

<p>Sollte ein Fall vorliegen, wo ein Applikationsserver keine Verbindungen
aufrechterhalten kann, oder HTTP/1.1 ist nicht sauber implementiert,
stehen zwei Umgebungsvariablen zur Verf&#252;gung, die ein HTTP/1.0
mit "no keepalive" senden. Gesetzt wird das mit den <directive
module="mod_env">SetEnv</directive>-Direktiven 'force-proxy-request-1.0'
und 'proxy-nokeepalive':</p>

<example>
&lt;location /buggyappserver/ &gt;<br />
ProxyPass http://buggyappserver:7001/foo/<br />
SetEnv force-proxy-request-1.0 1<br />
SetEnv proxy-nokeepalive 1<br />
&lt;/location&gt;
</example>

</section>

</section>

<directivesynopsis type="section">
<name>Proxy</name>
<description>Kontrollstruktur und Container f&#252;r Direktiven bez&#252;glich
der Ressourcen</description>
<syntax>&lt;Proxy <em>wildcard-url</em>&gt; ...&lt;/Proxy&gt;</syntax>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>

<usage>

<p>Direktiven innerhalb des <directive type="section">Proxy</directive>-Abschnittes
gelten nur f&#252;r den daf&#252;r zutreffenden Inhalt. Dabei sind Metazeichen
wie in der Shell erlaubt.</p>

<p>Im folgenden Beispiel wird nur Rechnern der Domain <code>yournetwork.example.com</code>
Zugriff auf den Proxyserver gew&#228;hrt:</p>

<example>
&lt;Proxy *&gt;<br />
&#160;&#160;Order Deny,Allow<br />
&#160;&#160;Deny from all<br />
&#160;&#160;Allow from yournetwork.example.com<br />
&lt;/Proxy&gt;
</example>

<p>Das n&#228;chste Beispiel zeigt wie man alle Dateien im Verzeichnis <code>foo</code>
von <code>example.com</code> mit dem <code>INCLUDES</code>-Filter parst, wenn
sie &#252;ber den Proxy angefordert werden:</p>

<example>
&lt;Proxy http://example.com/foo/*&gt;<br />
&#160;&#160;SetOutputFilter INCLUDES<br />
&lt;/Proxy&gt;
</example>

</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>ProxyMatch</name>
<description>Kontrollstruktur und Container f&#252;r Direktiven bez&#252;glich
der Ressourcen mit einem Regul&#228;ren Ausdruck</description>
<syntax>&lt;Proxy <em>regex</em>&gt; ...&lt;/Proxy&gt;</syntax>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>

<usage>

<p>Die <directive type="section">ProxyMatch</directive>-Direktive ist identisch
mit der <directive module="mod_proxy" type="section">Proxy</directive>-Direktive;
statt einem Metazeichen (*) oder der Kombination von Ausdruck + Metazeichen
wird f&#252;r das Bestimmen der URL ein Regul&#228;rer Ausdruck ausgewertet.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyPreserveHost</name>
<description>Durchreichen des eingehenden Host HTTP-Header</description>
<syntax>ProxyPreserveHost on|off</syntax>
<default>ProxyPreserveHost Off</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>
<compatibility>Verf&#252;gbar in Apache 2.0.31 und sp&#228;ter.</compatibility>

<usage>

<p>Wenn dieser Schalter gesetzt ist, wird die Zeile mit dem Host-Feld der
eingehenden Anforderung zum &#252;bergeordneten Server unver&#228;ndert durchgereicht.
</p>

<p>Normalerweise wird man diese Direktive nicht benutzen.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyRequests</name>
<description>Schalter f&#252;r das Aktivieren des Proxy-Moduls</description>
<syntax>ProxyRequests on|off</syntax>
<default>ProxyRequests Off</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Damit wird das Proxy-Modul des Apache aktiviert, um als Forward Proxy
t&#228;tig zu werden. Bleibt der Schalter aus, ist keinesfalls die M&#246;glichkeit
zur Konfiguration eines Reverse Proxy mit der <directive module="mod_proxy"
>ProxyPass</directive>-Direktive genommen; hier bleibt dieser
Schalter in der Regel aus.</p>

<note type="warning"><p>Warnung: Schalten Sie <directive
module="mod_proxy">ProxyRequests</directive> erst dann ein, wenn Sie Ihren
Server <a href="#access">sicher gemacht haben</a>. &#214;ffentlich zug&#228;ngliche
Proxyserver sind gef&#228;hrlich f&#252;r das dahinter liegende Netzwerk
und f&#252;r das Internet im allgemeinen.</p></note>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyRemote</name>
<description>Einen anderen Cache vorschalten</description>
<syntax>ProxyRemote <em>match remote-server</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Mit dieser Direktive gibt man einen &#252;bergeordneten Cache an. Das
Argument <em>match</em> ist entweder der Name eines vom vorgeschalteten Cache
unterst&#252;tzten URL-Schemas, oder eine partielle URL, bzw. ein '*' steht
f&#252;r alle Protokolle, mit denen Anforderungen an den anderen Cache weitergeleitet
werden. Syntax:</p>

<pre>
  remote-server = protocol://hostname[:port]
</pre>

<p><em>protocol</em> ist das Protokoll, mittels dessen mit dem vorgeschalteten Cache
kommuniziert werden soll; nur "http" wird vom Proxy-Modul unterst&#252;tzt.</p>

<p>Beispiel:</p>

<example>
  ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br />
  ProxyRemote * http://cleversite.com<br />
  ProxyRemote ftp http://ftpproxy.mydomain.com:8080
</example>

<p>Hierbei wird der Proxy alle FTP-Anforderungen an den ftpproxy.mydomain
als HTTP-Proxy-Request weiterleiten. Ist der Host nicht erreichbar, wickelt
der Apache die Anfrage eigenst&#228;ndig ab.</p>

<p>Mit dieser Direktive kann man auch die Konfiguration eines Reverse Proxy
aufbauen. Beispielsweise kann ein hinter einer Firewall agierender Applikationsserver
in den Namensraum eines virtuellen Hosts eingebettet werden - selbst dann,
wenn ein anderer Weiterleitungs-Proxy diesen verbirgt.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyRemoteMatch</name>
<description>Einen anderen Cache mittels eines
Regul&#228;ren Ausdrucks vorschalten</description>
<syntax>ProxyRemote <em>regex remote-server</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p><directive>ProxyRemoteMatch</directive> ist identisch mit
der <directive module="mod_proxy">ProxyRemote</directive>-Direktive,
wobei das erste Argument einen Regul&#228;ren Ausdruck enth&#228;lt, mit
dem der &#252;bergeordnete Cache erreicht wird. Dadurch kann eine Lastverteilung
angestrebt werden.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyPass</name>
<description>Blendet Webseiten anderer Server in den
eigenen Namensraum ein</description>
<syntax>ProxyPass [<em>path</em>] !|<em>url</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Beim Einsatz dieser Direktive k&#246;nnen Seiten anderer Server in den
lokalen Namensraum eingeblendet werden; verwenden Sie zu diesem Zweck auf
keinen Fall die Direktive ProxyRequests on. Der lokale Server agiert nicht
als Proxy im herk&#246;mmlichen Sinne sondern mehr als ein Spiegel des Servers,
dessen Seiten eingeblendet werden. Mit <em>pfad</em> geben Sie den Namen
des lokalen virtuellen Pfades an und mit <em>url</em> die URL des entfernten
Servers. Diese darf keine Zus&#228;tze mit CGI-Abfragen enthalten.</p>

<p>Hat beispielsweise der lokale Server die Adresse <code>http://wibble.org/</code>;
dann</p>

<example>
  ProxyPass /mirror/foo/ http://foo.com/
</example>

<p>wird eine lokale Anforderung f&#252;r &lt;<code>http://wibble.org/mirror/foo/bar</code>&gt;
intern in eine Proxy-Anforderung f&#252;r &lt;<code>http://foo.com/bar</code>&gt;
umgewandelt.</p>

<p>Die (Verneinungs-) ! Direktive ist n&#252;tzlich f&#252;r Situationen,
in denen man ein Einblenden f&#252;r ein bestimmtes Unterverzeichnis ausschliessen
will. Das folgende Beispiel</p>

<example>
  ProxyPass /mirror/foo/i !<br />
  ProxyPass /mirror/foo http://foo.com
</example>

<p>lenkt alle Anfragen wie gehabt um mit Ausnahme derjenigen, die nach dem
foo das Unterverzeichnis i angeben.</p>

<note>Notiz: die Reihenfolge der Direktiven ist wichtig. Ein
Ausschluss mu&#223; vor die allgemeine ProxyPass- Direktive gesetzt werden.</note>

<p>Wird ProxyPass innerhalb von <directive type="section"
module="core">Location</directive> eingesetzt,
mu&#223; das erste Argument, pfad, wegelassen werden, weil Apache
das lokale Verzeichnis aus <directive type="section"
module="core">Location</directive> ausliest.</p>

<p>Haben Sie das Proxy-Modul in den Apache eingebunden, lassen sich &#252;ber
das Proxy-Flag von <directive module="mod_rewrite">RewriteRule</directive>
<code>[P]</code>sehr vielseitige Konfigurationen erstellen, da die Nutzung
des Proxy transparent f&#252;r den Client geschieht.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyPassReverse</name>
<description>Vom &#252;bergeordneten Webserver erzeugte selbst referenzierende
HTTP-Redirekts werden auf den eigenen Hostnamen umgeschrieben</description>
<syntax>ProxyPassReverse [<em>path</em>] <em>url</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Diese Direktive schreibt den eigenen Hostnamen in die URL in den Feldern
<code>Location</code>, <code>Content-Location</code> und <code>URI</code>
des Headers bei HTTP-Redirekts des &#252;bergeordneten Webservers.
Erst durch diese zu ProxyPass als Erg&#228;nzung dienende Funktionalit&#228;t
l&#228;&#223;t sich der Apache als Reverse-Proxy einsetzen. Der Begriff
bedeutet, da&#223; die Seiten nicht vom eigenen Server stammen, sondern
von einem oder mehrern anderen Servern, die quasi hinter dem Reverse-Proxy
versteckt werden. Ein typisches Einsatzgebiet sind Datenserver hinter einer
Firewall.</p>

<p>Mit <em>pfad</em> geben Sie den Namen des lokalen virtuellen Pfades an
und mit <em>url</em> die URL des entfernten Servers - wie bei der
<directive module="mod_proxy">ProxyPass</directive>-Direktive.</p>

<p>Beispiel:<br />
Angenommen der lokale Server hat die Adresse <code>http://my.antispam.de/</code>;
dann wird im folgenden Beispiel</p>

<example>
  ProxyPass         /mirror/foo/ http://foo.com/<br />
  ProxyPassReverse  /mirror/foo/ http://foo.com/
</example>

<p>nicht nur die lokale Anforderung f&#252;r &lt;<code>http://my.antispam.de/misc/spamAbuse</code>&gt;
intern konvertiert in eine Proxy-Anforderung &lt;<code>http://ordb.org/faq</code>&gt;
(die Funktionalit&#228;t von <code>ProxyPass</code>), es werden durch <code>ProxyPassReverse</code>
auch Redirekt-Headerzeilen (301, 302, 304) des Servers ordb.org behandelt. Wenn
die &#252;ber den Proxy unter <code>http://ordb.org/faq</code> aufgerufenen
Seite einen Link auf <code>http://ordb.org/dictionary</code> enth&#228;lt,
wird Apache diesen Link umwandeln in <code>http://my.antispam.de/dictionary</code>
in der HTTP-Redirekt-Antwort an den Client. Das hei&#223;t, da&#223; dieses
Verzeichnis bei <code>my.antispam.de</code> existieren mu&#223;, damit es
keine "Not Found"-Meldung (404) gibt.</p>

<p>Bei Benutztung von <directive>ProxyPassReverse</directive> in
Verbindung mit dem <code>RewriteRule-Flag [P]</code>des Moduls
<module>mod_rewrite</module> ist keine korrespondierende
<directive module="mod_proxy">ProxyPass</directive>-Direktive erforderlich.</p>

<p>Wird ProxyPassReverse innerhalb von <directive type="section"
module="core">Location</directive> eingesetzt, wird das erste Argument,
pfad, weggelassen und das lokale Verzeichnis aus <directive
type="section" module="core">Location</directive> ausgelesen.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>AllowCONNECT</name>
<description>Liste von erlaubten Portnummern f&#252;r die
Proxy CONNECT-Methode</description>
<syntax>AllowCONNECT <em>port</em> [<em>port</em>] ...</syntax>
<default>AllowCONNECT 443 563</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Die <directive>AllowCONNECT</directive>-Direktive erlaubt neben
den Standard-Portnummern f&#252;r <em>https</em> und <em>snews</em> weitere
Ports f&#252;r das CONNECT-Protokoll anzugeben, um SSL-Verbindungen &#252;ber
einen Proxy zu tunneln. Man gebraucht die <directive>AllowCONNECT</directive>-Direktive,
wenn die Standardeinstellungen ge&#228;ndert oder erweitert werden sollen.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyBlock</name>
<description>W&#246;rter, Rechner oder Domainnamen f&#252;r den Proxyzugriff
sperren</description>
<syntax>ProxyBlock *|<em>word|host|domain</em>
[<em>word|host|domain</em>] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Mit der <directive>ProxyBlock</directive>-Direktive kann man eine
Liste von W&#246;rterns, Rechnern und/oder Domainnamen sperren; Trennzeichen
in der Liste ist das Leerzeichen. Kommt im Hostnamen der URL ein Wort aus
der Liste vor, wird ebenfalls der Zugriff <em>verweigert</em>. Versucht ein
Nutzer auf die IP-Adresse einer gesperrten ("geblockten") Seite zuzugreifen,
wird dieser Versuch abgefangen. Das gilt auch f&#252;r die aus Namensaufl&#246;sung
abgeleiteten IP-Adressen. Beispiel:</p>

<example>
  ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
</example>

<p>'rocky.wotsamattau.edu' wird demnach auch gesperrt, wenn stattdessen in
der URL die IP-Adresse eingegeben wird.</p>

<p>Wichtig: auch 'wotsamattau' gen&#252;gt als Treffer f&#252;r 'wotsamattau.edu'.</p>

<p>Und keinen Sinn macht die folgende Angabe, die den Zugriff auf alles sperrt:</p>

<example>
  ProxyBlock *
</example>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyReceiveBufferSize</name>
<description>Gr&#246;&#223;e des Netzwerkpuffers f&#252;r ausgehende HTTP und
FTP-Verbindungen</description>
<syntax>ProxyReceiveBufferSize <em>bytes</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Mit der <directive>ProxyReceiveBufferSize</directive>-Direktive
kann die Netzwerkpuffergr&#246;&#223;e explizit f&#252;r ausgehende HTTP
und FTP-Verbindungen angegeben werden.  Als Gr&#246;&#223;e wird der Wert
in Bytes angegeben, entweder gr&#246;&#223;er als 512, oder er steht auf
0, um die Systemvoreinstellungen zu &#252;bernehmen.</p>

<example><title>Beispiel</title>
  ProxyReceiveBufferSize 2048
</example>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyIOBufferSize</name>
<description>IO Puffergr&#246;&#223;e f&#252;r ausgehende HTTP und FTP
Verbindungen</description>
<syntax>ProxyIOBufferSize <em>bytes</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>
<!-- XXX: content needed -->
</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyMaxForwards</name>
<description>Maximale Anzahl der Weiterleitungsproxies</description>
<syntax>ProxyMaxForwards <em>number</em></syntax>
<default>ProxyMaxForwards 10</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>
<compatibility>Verf&#252;gbar in Apache 2.0 und sp&#228;ter</compatibility>

<usage>

<p>Die <directive>ProxyMaxForwards</directive>-Direktive gibt an,
durch wieviele Proxies maximal die Anfrage durchgereicht werden darf. In
erster Linie dient diese Anweisung dem Vermeiden von Endlosschleifen oder
auch DoS(denial of service)-Attacken.</p>

<example><title>Beispiel</title>
  ProxyMaxForwards 10
</example>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>NoProxy</name>
<description>Rechner, Dom&#228;nen, oderr Netzwerke, zu denen direkt konnektiert
werden soll</description>
<syntax>NoProxy <em>host</em> [<em>host</em>] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Diese Anweisung ist nur dann n&#252;tzlich, wenn die
<directive module="mod_proxy">ProxyRemote</directive>-Direktive
verwendet wird. Mittels <directive>NoProxy</directive> kann man steuern,
ob eine Anfrage an den in der
<directive module="mod_proxy">ProxyRemote</directive>-Anweisung
angegebenen Proxy durchgereicht oder die Zieladdresse direkt angesprochen
werden soll. Eine solche Liste wird mit Leerzeichen getrennt.</p>

<example><title>Beispiel</title>
  ProxyRemote  *  http://firewall.mycompany.com:81<br />
  NoProxy         .mycompany.com 192.168.112.0/21
</example>

<p>Als <em>host</em>-Argumente f&#252;r die NoProxy-Direktive k&#246;nnen
Sie folgende Werte verwenden:</p>

<dl>
  <!-- ===================== Domain ======================= -->
  <dt><a name="domain"><em>Domainname, gekennzeichnet durch einen Punkt
  als erstes Zeichen</em></a></dt>
  <dd>Eine <em>Domaine repr&#228;sentiert</em> repr&#228;sentiert eine
      Liste von Rechnern, die logischzu der gleichen DNS-Domain oder Zone geh&#246;ren
      (<em>i.e.</em>, das Suffix der Hostnamen endet in <em>Domain</em>).<br />
      Beispiel: <code>.com</code>   <code>.apache.org.</code>
  </dd>

  <!-- ===================== SubNet ======================= -->
  <dt><a name="subnet"><em>Subnetz, angegeben als partielle IP-Adresse
  oder als Adresse mit zugeh&#246;riger Netzmaske</em></a></dt>
  <dd>Beispiele:
    <dl>
      <dt><code>192.168</code> oder <code>192.168.0.0</code></dt>
      <dd><br /></dd>
      <dt><code>192.168.112.0/2</code></dt>
      <dd><br /></dd>
    </dl>
  </dd>

  <!-- ===================== IPAddr ======================= -->
  <dt><a name="ipaddr"><em>IP-Adresse</em></a></dt>
  <dd>Beispiel: <code>192.168.123.7</code><br /></dd>

  <!-- ===================== Hostname ======================= -->
  <dt><a name="hostname"><em>Hostname</em></a></dt>
  <dd>Beispiel: <code>prep.ai.mit.edu</code>   <code>www.apache.org.</code><br />
      Notiz: In vielen Situationen ist es effektiver eine <a
      href="#ipaddr"><em>IP-Adresse</em></a> statt eines <em>Hostname</em>ns anzugeben,
      da eine DNS-Anfrage vermieden werden kann. Namensaufl&#246;sung in Apache
      kann unn&#246;tig Zeit kosten, wenn die Verbindung zum DNS-Server langsam
      oder &#252;berlastet ist.<br />
      Notiz: F&#252;r <em>Hostnamen</em> wird Gross-/Kleinschreibung nicht
      unterschieden; deswegen werden Hosts mit Bezeichnugen wie <code>WWW.MyDomain.com</code>
      und <code>www.mydomain.com.</code> (abschliessenden Punkt beachten!) als
      gleich betrachtet.</dd>
</dl>

</usage>
<seealso><a href="../dns-caveats.html">DNS Bemerkungen</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ProxyTimeout</name>
<description>Netzwerk Timeout f&#252;r Proxy-Anfragen</description>
<syntax>ProxyTimeout <em>seconds</em></syntax>
<default>ProxyTimeout 300</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>
<compatibility>Verf&#252;gbar in Apache 2.0.31 und sp&#228;ter</compatibility>

<usage>

<p>Mit dieser Direktive kann die Voreinstellung von 300 Sekunden reduziert
oder erh&#246;ht werden. Das ist insbesondre dann n&#252;tzlich, wenn ein
Applikationsserver gelegentlich "h&#228;ngt" und man m&#246;chte den Client
lieber rechtzeitig mit einer Timeout-Meldung versorgen als ihn in dieser
Verbindung auf unbestimmte Zeit h&#228;ngen zu lassen.</p>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyDomain</name>
<description>Anzuh&#228;ngender Domainname bei unvollst&#228;ndigen Anforderungen</description>
<syntax>ProxyDomain <em>Domain</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Diese Direktive ist nur n&#252;tzlich f&#252;r Apache Proxyserver im Intranet.
Die <directive>ProxyDomain</directive>-Direktive gibt den Domainnamen
an, der angeh&#228;ngt werden soll, wenn die Anforderung unvollst&#228;ndig
ist. Mittels eines HTTP-Redirekt wird ein Verweis auf den kompletten Namen
(FQDN) durchgef&#252;hrt. Die im folgenden Beispiel angegebene
<directive>ProxyDomain</directive>-Direktive wird daf&#252;r sorgen, da&#223;
eine Eingabe eines Benutzers in der URL, wie z.B. http://intranet, umgewandelt
wird in http://intranet.unserefirma.com/</p>

<example><title>Beispiel</title>
  ProxyRemote  *  http://firewall.mycompany.com:81<br />
  NoProxy         .mycompany.com 192.168.112.0/21<br />
  ProxyDomain     .mycompany.com
</example>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyVia</name>
<description>Generierung eines Via-HTTP-Header-Feldes</description>
<syntax>ProxyVia on|off|full|block</syntax>
<default>ProxyVia off</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>

<usage>

<p>Ein bereits in einer Anforderung vorhandener <code>Via:</code> HTTP-Header
wird vom Proxy weitergeleitet, jedoch wird ein eigener Eintrag erst generiert,
wenn der Schalter nicht aus ist. Damit kann man den Weg einer Anfrage entlang
einer Kette von Proxyservern verfolgen (siehe auch RFC2068, HTTP/1.1).</p>

<ul>
  <li>Ist der Schalter auf <em>on</em>, wird jeder Anfrage und Antwort eine
      Zeile mit dem <code>Via:</code> Header  hinzugef&#252;gt, die den eigenen
      Hostnamen enth&#228;lt.</li>
  <li>Ist der Schalter auf <em>full</em>, dann wird im <code>Via:</code>
      Header zus&#228;tzlich zum Hostnamen die Serverversion im <code>Via:</code>
      -Kommentarfeld angezeigt.</li>
  <li>Ist der Schalter auf <em>block</em>, dann werden alle bereits
      vorhandenen <code>Via:</code> Header in der Anfrage entfernt und kein neuer
      generiert.</li>
</ul>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ProxyErrorOverride</name>
<description>Ersatz der normalen Fehlermeldungen im Proxy</description>
<syntax>ProxyErrorOverride On|Off</syntax>
<default>ProxyErrorOverride Off</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>
<compatibility>Verf&#252;gbar in version 2.0 und sp&#228;ter</compatibility>

<usage>

<p>Diese Direktive ist beispielsweise n&#252;tzlich, wenn man f&#252;r den
Endbenutzer ein vertrautes "look and feel" f&#252;r Seiten mit Fehlermeldungen
herstellen m&#246;chte, insbesondre wenn ein Reverse Proxy konfiguriert ist.
Mittels SSI kann man zus&#228;tzlich den Fehlercode erfassen und entsprechend
eine daf&#252;r geeignete Seite an den Browser des Benutzers zur&#252;ckliefern.</p>

</usage>
</directivesynopsis>

</modulesynopsis>
