<li><img alt="" src="../images/down.gif" /> <a href="#warning">Warning</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Kommentare</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AcceptFilter" id="AcceptFilter">AcceptFilter</a>-<a name="acceptfilter" id="acceptfilter">Direktive</a></h2>
<table class="directive">
</table><p>Die Dokumentation zu dieser Direktive wurde
noch nicht übersetzt. Bitte schauen Sie in die englische
Version.</p></div>
+
</div>
<div class="bottomlang">
<p><span>Verfügbare Sprachen: </span><a href="../de/mod/core.html" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#warning">Warning</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AcceptFilter" id="AcceptFilter">AcceptFilter</a> <a name="acceptfilter" id="acceptfilter">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#warning">Warning</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AcceptFilter" id="AcceptFilter">AcceptFilter</a> <a name="acceptfilter" id="acceptfilter">Directiva</a></h2>
<table class="directive">
</table><p>The documentation for this directive has
not been translated yet. Please have a look at the English
version.</p></div>
+
</div>
<div class="bottomlang">
<p><span>Idiomas disponibles: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#warning">Warning</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="acceptfilter" id="acceptfilter">Directive</a> <a name="AcceptFilter" id="AcceptFilter">AcceptFilter</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#warning">Warning</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AcceptFilter" id="AcceptFilter">AcceptFilter</a> <a name="acceptfilter" id="acceptfilter">ディレクティブ</a></h2>
<table class="directive">
</table><p>このディレクティブの解説文書は
まだ翻訳されていません。英語版をご覧ください。
</p></div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#warning">Warning</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AcceptFilter" id="AcceptFilter">AcceptFilter</a> <a name="acceptfilter" id="acceptfilter">Yönergesi</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Compatibility">Uyumluluk:</a></th><td>2.5 and later</td></tr>
</table><p>Bu yönergenin belgesi henüz Türkçeye çevrilmedi.
Lütfen İngilizce sürümüne bakınız.</p></div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><a href="worker.html">The worker MPM</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AsyncRequestWorkerFactor" id="AsyncRequestWorkerFactor">AsyncRequestWorkerFactor</a> <a name="asyncrequestworkerfactor" id="asyncrequestworkerfactor">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limit concurrent connections per process</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AsyncRequestWorkerFactor <var>factor</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>2</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>event</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.13 and later</td></tr>
+</table>
+ <p>The event MPM handles some connections in an asynchronous way, where
+ request worker threads are only allocated for short periods of time as
+ needed, and other connections with one request worker thread reserved per
+ connection. This can lead to situations where all workers are tied up and
+ no worker thread is available to handle new work on established async
+ connections.</p>
+
+ <p>To mitigate this problem, the event MPM does two things: Firstly, it
+ limits the number of connections accepted per process, depending on the
+ number of idle request workers. Secondly, if all workers are busy, it will
+ close connections in keep-alive state even if the keep-alive timeout has
+ not expired. This allows the respective clients to reconnect to a
+ different process which may still have worker threads available.</p>
+
+ <p>This directive can be used to fine-tune the per-process connection
+ limit. A process will only accept new connections if the current number of
+ connections (not counting connections in the "closing" state) is lower
+ than:</p>
+
+ <p class="indent"><strong>
+ <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> +
+ (<code class="directive">AsyncRequestWorkerFactor</code> *
+ <var>number of idle workers</var>)
+ </strong></p>
+
+ <p>This means the absolute maximum numbers of concurrent connections is:</p>
+
+ <p class="indent"><strong>
+ (<code class="directive">AsyncRequestWorkerFactor</code> + 1) *
+ <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
+ </strong></p>
+
+ <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> was called
+ <code class="directive">MaxClients</code> prior to version 2.3.13. The above value
+ shows that the old name did not accurately describe its meaning for the event MPM.</p>
+
+ <p><code class="directive">AsyncRequestWorkerFactor</code> can take non-integer
+ arguments, e.g "1.5".</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
<p>This MPM tries to fix the 'keep alive problem' in HTTP. After a client
with support for EPoll.</li>
</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AsyncRequestWorkerFactor" id="AsyncRequestWorkerFactor">AsyncRequestWorkerFactor</a> <a name="asyncrequestworkerfactor" id="asyncrequestworkerfactor">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limit concurrent connections per process</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AsyncRequestWorkerFactor <var>factor</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>2</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>event</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.13 and later</td></tr>
-</table>
- <p>The event MPM handles some connections in an asynchronous way, where
- request worker threads are only allocated for short periods of time as
- needed, and other connections with one request worker thread reserved per
- connection. This can lead to situations where all workers are tied up and
- no worker thread is available to handle new work on established async
- connections.</p>
-
- <p>To mitigate this problem, the event MPM does two things: Firstly, it
- limits the number of connections accepted per process, depending on the
- number of idle request workers. Secondly, if all workers are busy, it will
- close connections in keep-alive state even if the keep-alive timeout has
- not expired. This allows the respective clients to reconnect to a
- different process which may still have worker threads available.</p>
-
- <p>This directive can be used to fine-tune the per-process connection
- limit. A process will only accept new connections if the current number of
- connections (not counting connections in the "closing" state) is lower
- than:</p>
-
- <p class="indent"><strong>
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> +
- (<code class="directive">AsyncRequestWorkerFactor</code> *
- <var>number of idle workers</var>)
- </strong></p>
-
- <p>This means the absolute maximum numbers of concurrent connections is:</p>
-
- <p class="indent"><strong>
- (<code class="directive">AsyncRequestWorkerFactor</code> + 1) *
- <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
- </strong></p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> was called
- <code class="directive">MaxClients</code> prior to version 2.3.13. The above value
- shows that the old name did not accurately describe its meaning for the event MPM.</p>
-
- <p><code class="directive">AsyncRequestWorkerFactor</code> can take non-integer
- arguments, e.g "1.5".</p>
-
-
</div>
</div>
<div class="bottomlang">
<li><a href="worker.html">Le MPM worker</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="asyncrequestworkerfactor" id="asyncrequestworkerfactor">Directive</a> <a name="AsyncRequestWorkerFactor" id="AsyncRequestWorkerFactor">AsyncRequestWorkerFactor</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limite le nombre de connexions simultanées par thread</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AsyncRequestWorkerFactor <var>facteur</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>2</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>MPM</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>event</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.13</td></tr>
+</table>
+ <p>Le MPM event gère certaines connexions de manière asynchrone ;
+ dans ce cas, les threads traitant la requête sont alloués selon les
+ besoins et pour de courtes périodes. Dans les autres cas, un
+ thread est réservé par
+ connexion. Ceci peut conduire à des situations où tous les threads
+ sont saturés et où aucun thread n'est capable d'effectuer de
+ nouvelles tâches pour les connexions asynchrones établies.</p>
+
+ <p>Pour minimiser les effets de ce problème, le MPM event utilise
+ deux méthodes : tout d'abord, il limite le nombre de connexions
+ simultanées par thread en fonction du nombre de processus
+ inactifs. Ensuite, si tous les processus sont occupés, il ferme des
+ connexions permanentes, même si la limite de durée de la connexion
+ n'a pas été atteinte. Ceci autorise les clients concernés à se
+ reconnecter à un autre processus possèdant encore des threads
+ disponibles.</p>
+
+ <p>Cette directive permet de personnaliser finement la limite du
+ nombre de connexions par thread. Un processus n'acceptera de
+ nouvelles connexions que si le nombre actuel de connexions (sans
+ compter les connexions à l'état "closing") est
+ inférieur à :</p>
+
+ <p class="indent"><strong>
+ <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> +
+ (<code class="directive">AsyncRequestWorkerFactor</code> *
+ <var>nombre de threads inactifs</var>)
+ </strong></p>
+
+ <p>En d'autres termes, le nombre maximum de connexions simultanées
+ sera :</p>
+
+ <p class="indent"><strong>
+ (<code class="directive">AsyncRequestWorkerFactor</code> + 1) *
+ <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
+ </strong></p>
+
+ <p>La directive <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> se nommait
+ <code class="directive">MaxClients</code> avant la version 2.3.13. La valeur
+ ci-dessus montre que cet ancien nom ne correspondait pas à sa
+ signification exacte pour le MPM event.</p>
+
+ <p>La directive <code class="directive">AsyncRequestWorkerFactor</code>
+ accepte des valeurs d'argument de type non entier, comme "1.5".</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="how-it-works" id="how-it-works">Comment tout cela fonctionne</a></h2>
<p>Ce MPM essaie de résoudre le 'problème keep alive' de HTTP.
avec le support pour EPoll.</li>
</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="asyncrequestworkerfactor" id="asyncrequestworkerfactor">Directive</a> <a name="AsyncRequestWorkerFactor" id="AsyncRequestWorkerFactor">AsyncRequestWorkerFactor</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limite le nombre de connexions simultanées par thread</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AsyncRequestWorkerFactor <var>facteur</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>2</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>event</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.13</td></tr>
-</table>
- <p>Le MPM event gère certaines connexions de manière asynchrone ;
- dans ce cas, les threads traitant la requête sont alloués selon les
- besoins et pour de courtes périodes. Dans les autres cas, un
- thread est réservé par
- connexion. Ceci peut conduire à des situations où tous les threads
- sont saturés et où aucun thread n'est capable d'effectuer de
- nouvelles tâches pour les connexions asynchrones établies.</p>
-
- <p>Pour minimiser les effets de ce problème, le MPM event utilise
- deux méthodes : tout d'abord, il limite le nombre de connexions
- simultanées par thread en fonction du nombre de processus
- inactifs. Ensuite, si tous les processus sont occupés, il ferme des
- connexions permanentes, même si la limite de durée de la connexion
- n'a pas été atteinte. Ceci autorise les clients concernés à se
- reconnecter à un autre processus possèdant encore des threads
- disponibles.</p>
-
- <p>Cette directive permet de personnaliser finement la limite du
- nombre de connexions par thread. Un processus n'acceptera de
- nouvelles connexions que si le nombre actuel de connexions (sans
- compter les connexions à l'état "closing") est
- inférieur à :</p>
-
- <p class="indent"><strong>
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> +
- (<code class="directive">AsyncRequestWorkerFactor</code> *
- <var>nombre de threads inactifs</var>)
- </strong></p>
-
- <p>En d'autres termes, le nombre maximum de connexions simultanées
- sera :</p>
-
- <p class="indent"><strong>
- (<code class="directive">AsyncRequestWorkerFactor</code> + 1) *
- <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
- </strong></p>
-
- <p>La directive <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> se nommait
- <code class="directive">MaxClients</code> avant la version 2.3.13. La valeur
- ci-dessus montre que cet ancien nom ne correspondait pas à sa
- signification exacte pour le MPM event.</p>
-
- <p>La directive <code class="directive">AsyncRequestWorkerFactor</code>
- accepte des valeurs d'argument de type non entier, comme "1.5".</p>
-
-
</div>
</div>
<div class="bottomlang">
<li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
<li><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Allow" id="Allow">Allow</a> <a name="allow" id="allow">Directive</a></h2>
<table class="directive">
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_access_compat.html" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
<li><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="allow" id="allow">Directive</a> <a name="Allow" id="Allow">Allow</a></h2>
<table class="directive">
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
<li><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Allow" id="Allow">Allow</a> <a name="allow" id="allow">ディレクティブ</a></h2>
<table class="directive">
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../howto/cgi.html">Dynamische Inhalte mit CGI</a></li>
<li><a href="../handler.html">Die Verwendung von Handlern</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Kommentare</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Action" id="Action">Action</a>-<a name="action" id="action">Direktive</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mod_actions.html" title="Deutsch"> de </a> |
<li><a href="../howto/cgi.html">Dynamic Content with CGI</a></li>
<li><a href="../handler.html">Apache httpd's Handler Use</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Action" id="Action">Action</a> <a name="action" id="action">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><a href="../handler.html">Utilisation des gestionnaires
d'Apache httpd</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="action" id="action">Directive</a> <a name="Action" id="Action">Action</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><a href="../howto/cgi.html">CGI による動的コンテンツ</a></li>
<li><a href="../handler.html">Apache のハンドラの使用</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Action" id="Action">Action</a> <a name="action" id="action">ディレクティブ</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><a href="../howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a></li>
<li><a href="../handler.html">¾ÆÆÄÄ¡¿¡¼ Çڵ鷯 »ç¿ë</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Action" id="Action">Action</a> <a name="action" id="action">Áö½Ã¾î</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><a href="../urlmapping.html">Mapping URLs to the filesystem</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">Order of Processing</a></h2>
-
- <p>Aliases and Redirects occurring in different contexts are processed
- like other directives according to standard <a href="../sections.html#mergin">merging rules</a>. But when multiple
- Aliases or Redirects occur in the same context (for example, in the
- same <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>
- section) they are processed in a particular order.</p>
-
- <p>First, all Redirects are processed before Aliases are processed,
- and therefore a request that matches a <code class="directive"><a href="#redirect">Redirect</a></code> or <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> will never have Aliases
- applied. Second, the Aliases and Redirects are processed in the order
- they appear in the configuration files, with the first match taking
- precedence.</p>
-
- <p>For this reason, when two or more of these directives apply to the
- same sub-path, you must list the most specific path first in order for
- all the directives to have an effect. For example, the following
- configuration will work as expected:</p>
-
- <pre class="prettyprint lang-config">Alias /foo/bar /baz
-Alias /foo /gaq</pre>
-
-
- <p>But if the above two directives were reversed in order, the
- <code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code>
- would always match before the <code>/foo/bar</code> <code class="directive"><a href="#alias">Alias</a></code>, so the latter directive would be
- ignored.</p>
-
- <p>When the <code class="directive"><a href="#alias">Alias</a></code>,
- <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> and
- <code class="directive"><a href="#redirect">Redirect</a></code> directives are used
- within a <code class="directive"><a href="../mod/core.html#location"><Location></a></code>
- or <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>
- section, these directives will take precedence over any globally
- defined <code class="directive"><a href="#alias">Alias</a></code>,
- <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> and
- <code class="directive"><a href="#redirect">Redirect</a></code> directives.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps URLs to filesystem locations</td></tr>
details.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">Order of Processing</a></h2>
+
+ <p>Aliases and Redirects occurring in different contexts are processed
+ like other directives according to standard <a href="../sections.html#mergin">merging rules</a>. But when multiple
+ Aliases or Redirects occur in the same context (for example, in the
+ same <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>
+ section) they are processed in a particular order.</p>
+
+ <p>First, all Redirects are processed before Aliases are processed,
+ and therefore a request that matches a <code class="directive"><a href="#redirect">Redirect</a></code> or <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> will never have Aliases
+ applied. Second, the Aliases and Redirects are processed in the order
+ they appear in the configuration files, with the first match taking
+ precedence.</p>
+
+ <p>For this reason, when two or more of these directives apply to the
+ same sub-path, you must list the most specific path first in order for
+ all the directives to have an effect. For example, the following
+ configuration will work as expected:</p>
+
+ <pre class="prettyprint lang-config">Alias /foo/bar /baz
+Alias /foo /gaq</pre>
+
+
+ <p>But if the above two directives were reversed in order, the
+ <code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code>
+ would always match before the <code>/foo/bar</code> <code class="directive"><a href="#alias">Alias</a></code>, so the latter directive would be
+ ignored.</p>
+
+ <p>When the <code class="directive"><a href="#alias">Alias</a></code>,
+ <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> and
+ <code class="directive"><a href="#redirect">Redirect</a></code> directives are used
+ within a <code class="directive"><a href="../mod/core.html#location"><Location></a></code>
+ or <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>
+ section, these directives will take precedence over any globally
+ defined <code class="directive"><a href="#alias">Alias</a></code>,
+ <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> and
+ <code class="directive"><a href="#redirect">Redirect</a></code> directives.</p>
+
</div>
</div>
<div class="bottomlang">
système de fichiers</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">Chronologie du traitement</a></h2>
-
- <p>Les alias et redirections apparaissant dans différents contextes
- sont traités comme les autres directives en respectant les <a href="../sections.html#mergin">règles de fusion</a> standards. Par
- contre, ils sont traités selon une chronologie particulière
- lorsqu'ils apparaissent dans le même contexte (par exemple, dans la
- même section <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>).</p>
-
- <p>Premièrement, toutes les redirections sont traitées avant les
- alias, et ainsi, une requête qui correspond à une directive
- <code class="directive"><a href="#redirect">Redirect</a></code> ou <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> ne se verra jamais
- appliquer d'alias. Deuxièmement, les alias et redirections sont
- traités selon l'ordre dans lequel ils apparaissent dans le fichier
- de configuration, seule la première correspondance étant prise en
- compte.</p>
-
- <p>Ainsi, lorsqu'une ou plusieurs de ces directives s'appliquent au
- même sous-répertoire, vous devez classer les chemins du plus précis
- au moins précis afin que toutes les directives puissent
- éventuellement s'appliquer, comme dans l'exemple suivant :</p>
-
- <pre class="prettyprint lang-config">Alias /foo/bar /baz
-Alias /foo /gaq</pre>
-
-
- <p>Si l'ordre des directives était inversé, la directive <code class="directive"><a href="#alias">Alias</a></code> ayant pour argument
- <code>/foo</code> serait toujours appliquée avant la directive
- <code class="directive"><a href="#alias">Alias</a></code> ayant pour argument
- <code>/foo/bar</code>, et cette dernière serait toujours
- ignorée.</p>
-
- <p>La définition de directives <code class="directive"><a href="#alias">Alias</a></code>, <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> ou <code class="directive"><a href="#redirect">Redirect</a></code> au sein de sections
- <code class="directive"><a href="../mod/core.html#location"><Location></a></code> ou
- <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>
- l'emporte sur d'autres définitions éventuelles de ces mêmes
- directives au niveau de la configuration générale du serveur.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="alias" id="alias">Directive</a> <a name="Alias" id="Alias">Alias</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Met en correspondance des URLs avec des chemins du système
détails.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">Chronologie du traitement</a></h2>
+
+ <p>Les alias et redirections apparaissant dans différents contextes
+ sont traités comme les autres directives en respectant les <a href="../sections.html#mergin">règles de fusion</a> standards. Par
+ contre, ils sont traités selon une chronologie particulière
+ lorsqu'ils apparaissent dans le même contexte (par exemple, dans la
+ même section <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>).</p>
+
+ <p>Premièrement, toutes les redirections sont traitées avant les
+ alias, et ainsi, une requête qui correspond à une directive
+ <code class="directive"><a href="#redirect">Redirect</a></code> ou <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> ne se verra jamais
+ appliquer d'alias. Deuxièmement, les alias et redirections sont
+ traités selon l'ordre dans lequel ils apparaissent dans le fichier
+ de configuration, seule la première correspondance étant prise en
+ compte.</p>
+
+ <p>Ainsi, lorsqu'une ou plusieurs de ces directives s'appliquent au
+ même sous-répertoire, vous devez classer les chemins du plus précis
+ au moins précis afin que toutes les directives puissent
+ éventuellement s'appliquer, comme dans l'exemple suivant :</p>
+
+ <pre class="prettyprint lang-config">Alias /foo/bar /baz
+Alias /foo /gaq</pre>
+
+
+ <p>Si l'ordre des directives était inversé, la directive <code class="directive"><a href="#alias">Alias</a></code> ayant pour argument
+ <code>/foo</code> serait toujours appliquée avant la directive
+ <code class="directive"><a href="#alias">Alias</a></code> ayant pour argument
+ <code>/foo/bar</code>, et cette dernière serait toujours
+ ignorée.</p>
+
+ <p>La définition de directives <code class="directive"><a href="#alias">Alias</a></code>, <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> ou <code class="directive"><a href="#redirect">Redirect</a></code> au sein de sections
+ <code class="directive"><a href="../mod/core.html#location"><Location></a></code> ou
+ <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>
+ l'emporte sur d'autres définitions éventuelles de ces mêmes
+ directives au niveau de la configuration générale du serveur.</p>
+
</div>
</div>
<div class="bottomlang">
<li><a href="../urlmapping.html">URL からファイルシステム上の位置へのマッピング</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">処理の順番</a></h2>
-
-<p>様々なコンテキスト中での Alias や Redirect は他のディレクティブと
-同じように標準の <a href="../sections.html#mergin">マージ規則</a> に
-従って処理されます。ただし、(例えば <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> セクションの中のように) 複数の Alias や Redirect が
-同じコンテキスト中に現れた場合は決まった順番で処理されます。</p>
-
-<p>まず、Alias の前にすべての Redirect が処理されます。ですから、<code class="directive"><a href="#redirect">Redirect</a></code> か <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> にマッチするリクエストには
-Alias は決して適用されません。次に、Alias と Redirect が設定ファイル中の
-順番に適用され、最初にマッチしたものが優先されます。</p>
-
-<p>ですから、二つ以上のディレクティブが同じパスに適用されるときは、
-すべてのディレクティブの効果を得るためにはより詳しいパスを先に書く
-必要があります。例えば、次の設定は期待通りの動作をします:</p>
-
-<div class="example"><p><code>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</code></p></div>
-
-<p>しかし、上記の二つのディレクティブの順番が逆になると、
-<code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code> が
-常に <code>/foo/bar</code> <code class="directive"><a href="#alias">Alias</a></code> より先にマッチしますので、後者は
-決して適用されることはありません。</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>URL をファイルシステムの位置にマップする</td></tr>
ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
</code></p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">処理の順番</a></h2>
+
+<p>様々なコンテキスト中での Alias や Redirect は他のディレクティブと
+同じように標準の <a href="../sections.html#mergin">マージ規則</a> に
+従って処理されます。ただし、(例えば <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> セクションの中のように) 複数の Alias や Redirect が
+同じコンテキスト中に現れた場合は決まった順番で処理されます。</p>
+
+<p>まず、Alias の前にすべての Redirect が処理されます。ですから、<code class="directive"><a href="#redirect">Redirect</a></code> か <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> にマッチするリクエストには
+Alias は決して適用されません。次に、Alias と Redirect が設定ファイル中の
+順番に適用され、最初にマッチしたものが優先されます。</p>
+
+<p>ですから、二つ以上のディレクティブが同じパスに適用されるときは、
+すべてのディレクティブの効果を得るためにはより詳しいパスを先に書く
+必要があります。例えば、次の設定は期待通りの動作をします:</p>
+
+<div class="example"><p><code>
+Alias /foo/bar /baz<br />
+Alias /foo /gaq
+</code></p></div>
+
+<p>しかし、上記の二つのディレクティブの順番が逆になると、
+<code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code> が
+常に <code>/foo/bar</code> <code class="directive"><a href="#alias">Alias</a></code> より先にマッチしますので、後者は
+決して適用されることはありません。</p>
+
</div>
</div>
<div class="bottomlang">
<li><a href="../urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">ó¸® ¼ø¼</a></h2>
-
-<p>¼·Î ´Ù¸¥ »ç¿ëÀå¼Ò¿¡¼ Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ´Ù¸¥ Áö½Ã¾î¿Í
-°°ÀÌ Ç¥ÁØ <a href="../sections.html#mergin">°áÇÕ ¹æ¹ý</a>¿¡
-µû¶ó ó¸®ÇÑ´Ù. ±×·¯³ª °°Àº »ç¿ëÀå¼Ò¿¡ (¿¹¸¦ µé¾î, °°Àº <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> ¼½¼Ç¿¡)
-Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ¾Æ·¡ ¼ø¼´ë·Î ó¸®ÇÑ´Ù.</p>
-
-<p>¸ÕÀú ¸ðµç Redirect¸¦ ó¸®ÇÑ ÈÄ Alias¸¦ ó¸®ÇÑ´Ù. ±×·¡¼
-<code class="directive"><a href="#redirect">Redirect</a></code>³ª <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code>¿¡ ÇØ´çÇÏ´Â ¿äûÀº
-Àý´ë·Î AliasÇÏÁö ¾Ê´Â´Ù. ±×¸®°í Alias¿Í Redirect´Â ¼³Á¤ÆÄÀÏ¿¡¼
-ù¹ø°·Î ³ª¿À´Â °ÍÀ» »ç¿ëÇÑ´Ù.</p>
-
-<p>±×·¡¼ ¿©·¯ Áö½Ã¾î°¡ µ¿ÀÏÇÑ ÇÏÀ§°æ·Î¿¡ ÇØ´çÇÏ´Â °æ¿ì ¸ðµç
-Áö½Ã¾î¸¦ Àû¿ëÇϱâÀ§Çؼ´Â °¡Àå »ó¼¼ÇÑ °æ·Î¸¦ ¸ÕÀú »ç¿ëÇØ¾ß ÇÑ´Ù.
-¿¹¸¦ µé¾î, ´ÙÀ½ ¼³Á¤Àº ÀǵµÇÑ´ë·Î µ¿ÀÛÇÑ´Ù:</p>
-
-<div class="example"><p><code>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</code></p></div>
-
-<p>±×·¯³ª À§ÀÇ µÎ Áö½Ã¾î ¼ø¼¸¦ ¹Ù²Ù¸é <code>/foo/bar</code>
-<code class="directive"><a href="#alias">Alias</a></code> ÀÌÀü¿¡
-<code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code>¸¦
-Àû¿ëÇϹǷΠÇ×»ó µÎ¹ø° Áö½Ã¾î¸¦ ¹«½ÃÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÑ´Ù</td></tr>
ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
</code></p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">ó¸® ¼ø¼</a></h2>
+
+<p>¼·Î ´Ù¸¥ »ç¿ëÀå¼Ò¿¡¼ Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ´Ù¸¥ Áö½Ã¾î¿Í
+°°ÀÌ Ç¥ÁØ <a href="../sections.html#mergin">°áÇÕ ¹æ¹ý</a>¿¡
+µû¶ó ó¸®ÇÑ´Ù. ±×·¯³ª °°Àº »ç¿ëÀå¼Ò¿¡ (¿¹¸¦ µé¾î, °°Àº <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> ¼½¼Ç¿¡)
+Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ¾Æ·¡ ¼ø¼´ë·Î ó¸®ÇÑ´Ù.</p>
+
+<p>¸ÕÀú ¸ðµç Redirect¸¦ ó¸®ÇÑ ÈÄ Alias¸¦ ó¸®ÇÑ´Ù. ±×·¡¼
+<code class="directive"><a href="#redirect">Redirect</a></code>³ª <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code>¿¡ ÇØ´çÇÏ´Â ¿äûÀº
+Àý´ë·Î AliasÇÏÁö ¾Ê´Â´Ù. ±×¸®°í Alias¿Í Redirect´Â ¼³Á¤ÆÄÀÏ¿¡¼
+ù¹ø°·Î ³ª¿À´Â °ÍÀ» »ç¿ëÇÑ´Ù.</p>
+
+<p>±×·¡¼ ¿©·¯ Áö½Ã¾î°¡ µ¿ÀÏÇÑ ÇÏÀ§°æ·Î¿¡ ÇØ´çÇÏ´Â °æ¿ì ¸ðµç
+Áö½Ã¾î¸¦ Àû¿ëÇϱâÀ§Çؼ´Â °¡Àå »ó¼¼ÇÑ °æ·Î¸¦ ¸ÕÀú »ç¿ëÇØ¾ß ÇÑ´Ù.
+¿¹¸¦ µé¾î, ´ÙÀ½ ¼³Á¤Àº ÀǵµÇÑ´ë·Î µ¿ÀÛÇÑ´Ù:</p>
+
+<div class="example"><p><code>
+Alias /foo/bar /baz<br />
+Alias /foo /gaq
+</code></p></div>
+
+<p>±×·¯³ª À§ÀÇ µÎ Áö½Ã¾î ¼ø¼¸¦ ¹Ù²Ù¸é <code>/foo/bar</code>
+<code class="directive"><a href="#alias">Alias</a></code> ÀÌÀü¿¡
+<code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code>¸¦
+Àû¿ëÇϹǷΠÇ×»ó µÎ¹ø° Áö½Ã¾î¸¦ ¹«½ÃÇÑ´Ù.</p>
+
</div>
</div>
<div class="bottomlang">
</li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">İşlem Sırası</a></h2>
-
- <p>Farklı bağlamlarda bulunan <code class="directive"><a href="#alias">Alias</a></code> ve <code class="directive"><a href="#redirect">Redirect</a></code>
- yönergeleri standart <a href="../sections.html#mergin">katıştırma
- kuralları</a> ile ilgili diğer yönergeler gibi işleme sokulur. Fakat
- aynı bağlam dahilinde (örneğin, aynı <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> bölümünde) çok fazla <code class="directive"><a href="#alias">Alias</a></code> ve <code class="directive"><a href="#redirect">Redirect</a></code> varsa bunlar belli bir
- sıraya göre işleme sokulurlar.</p>
-
- <p>İlk adımda, <code class="directive"><a href="#alias">Alias</a></code>’lardan önce
- bütün <code class="directive"><a href="#redirect">Redirect</a></code> yönergeleri
- işleme sokulur. Bu bakımdan bir <code class="directive"><a href="#redirect">Redirect</a></code> veya <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> ile eşleşen bir istek için
- hiçbir <code class="directive"><a href="#alias">Alias</a></code>
- uygulanmayacaktır. İkinci adımda yapılandırma dosyasında yer aldıkları
- sıraya göre <code class="directive"><a href="#redirect">Redirect</a></code> ve
- <code class="directive"><a href="#alias">Alias</a></code> yönergeleri işleme
- sokulurlar, dolayısıyla ilk eşleşme öncelikli olmuş olur.</p>
-
- <p>İlk eşleşmenin öncelikli olması sebebiyle, bu yönergelerin birden
- fazlası aynı alt yola uygulandığı takdirde, tüm yönergelerin etkili
- olabilmesi için en uzun yolu sıralamada en öne almalısınız. Örneğin
- aşağıdaki yapılandırma beklendiği gibi çalışacaktır:</p>
-
- <div class="example"><p><code>
- Alias /foo/bar /baz<br />
- Alias /foo /gaz
- </code></p></div>
-
- <p>Ama yukarıdaki iki satır ters sırada yerleştirilmiş olsaydı,
- <code>/foo</code> rumuzu daima <code>/foo/bar</code> rumuzundan önce
- eşleşecek, dolayısıyla ikinci yönerge yok sayılacaktı.</p>
-
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">Yönergesi</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>URL’leri dosya sistemi konumlarıyla eşler.</td></tr>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">İşlem Sırası</a></h2>
+
+ <p>Farklı bağlamlarda bulunan <code class="directive"><a href="#alias">Alias</a></code> ve <code class="directive"><a href="#redirect">Redirect</a></code>
+ yönergeleri standart <a href="../sections.html#mergin">katıştırma
+ kuralları</a> ile ilgili diğer yönergeler gibi işleme sokulur. Fakat
+ aynı bağlam dahilinde (örneğin, aynı <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> bölümünde) çok fazla <code class="directive"><a href="#alias">Alias</a></code> ve <code class="directive"><a href="#redirect">Redirect</a></code> varsa bunlar belli bir
+ sıraya göre işleme sokulurlar.</p>
+
+ <p>İlk adımda, <code class="directive"><a href="#alias">Alias</a></code>’lardan önce
+ bütün <code class="directive"><a href="#redirect">Redirect</a></code> yönergeleri
+ işleme sokulur. Bu bakımdan bir <code class="directive"><a href="#redirect">Redirect</a></code> veya <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> ile eşleşen bir istek için
+ hiçbir <code class="directive"><a href="#alias">Alias</a></code>
+ uygulanmayacaktır. İkinci adımda yapılandırma dosyasında yer aldıkları
+ sıraya göre <code class="directive"><a href="#redirect">Redirect</a></code> ve
+ <code class="directive"><a href="#alias">Alias</a></code> yönergeleri işleme
+ sokulurlar, dolayısıyla ilk eşleşme öncelikli olmuş olur.</p>
+
+ <p>İlk eşleşmenin öncelikli olması sebebiyle, bu yönergelerin birden
+ fazlası aynı alt yola uygulandığı takdirde, tüm yönergelerin etkili
+ olabilmesi için en uzun yolu sıralamada en öne almalısınız. Örneğin
+ aşağıdaki yapılandırma beklendiği gibi çalışacaktır:</p>
+
+ <div class="example"><p><code>
+ Alias /foo/bar /baz<br />
+ Alias /foo /gaz
+ </code></p></div>
+
+ <p>Ama yukarıdaki iki satır ters sırada yerleştirilmiş olsaydı,
+ <code>/foo</code> rumuzu daima <code>/foo/bar</code> rumuzundan önce
+ eşleşecek, dolayısıyla ikinci yönerge yok sayılacaktı.</p>
+
+ </div>
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li>
<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AllowHandlers" id="AllowHandlers">AllowHandlers</a> <a name="allowhandlers" id="allowhandlers">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_allowhandlers.html" title="English"> en </a></p>
<li><img alt="" src="../images/down.gif" /> <a href="#allowmethods">AllowMethods</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AllowMethods" id="AllowMethods">AllowMethods</a> <a name="allowmethods" id="allowmethods">Directive</a></h2>
<table class="directive">
<code class="directive"><a href="../mod/core.html#limitexcept">LimitExcept</a></code>.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_allowmethods.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#allowmethods">AllowMethods</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="allowmethods" id="allowmethods">Directive</a> <a name="AllowMethods" id="AllowMethods">AllowMethods</a></h2>
<table class="directive">
remplacer l'implémentation "bricolée" des directives <code class="directive"><a href="../mod/core.html#limit">Limit</a></code> et <code class="directive"><a href="../mod/core.html#limitexcept">LimitExcept</a></code>.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_allowmethods.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
<li><a href="../howto/auth.html">Authentication howto</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthBasicAuthoritative" id="AuthBasicAuthoritative">AuthBasicAuthoritative</a> <a name="authbasicauthoritative" id="authbasicauthoritative">Directive</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_auth_basic.html" title="English"> en </a> |
<li><a href="../howto/auth.html">Mode d'emploi de
l'authentification</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authbasicauthoritative" id="authbasicauthoritative">Directive</a> <a name="AuthBasicAuthoritative" id="AuthBasicAuthoritative">AuthBasicAuthoritative</a></h2>
<table class="directive">
refuser l'accès.</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_auth_basic.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="directive"><a href="../mod/mod_authz_core.html#<satisfyone>"><SatisfyOne></a></code></li>
<li><a href="../howto/auth.html">Authentication howto</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthBasicAuthoritative" id="AuthBasicAuthoritative">AuthBasicAuthoritative</a> <a name="authbasicauthoritative" id="authbasicauthoritative">ディレクティブ</a></h2>
<table class="directive">
</table><p>このディレクティブの解説文書は
まだ翻訳されていません。英語版をご覧ください。
</p></div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_auth_basic.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthBasicAuthoritative" id="AuthBasicAuthoritative">AuthBasicAuthoritative</a> <a name="authbasicauthoritative" id="authbasicauthoritative">Áö½Ã¾î</a></h2>
<table class="directive">
</table><p>The documentation for this directive has
not been translated yet. Please have a look at the English
version.</p></div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_auth_basic.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../howto/auth.html">Authentication howto</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Using Digest Authentication</a></h2>
-
- <p>To use MD5 Digest authentication, simply
- change the normal <code>AuthType Basic</code> and
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
- to <code>AuthType Digest</code> and
- <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code>,
- when setting up authentication, then add a
- <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> directive containing at least the root
- URI(s) for this protection space.</p>
-
- <p>Appropriate user (text) files can be created using the
- <code class="program"><a href="../programs/htdigest.html">htdigest</a></code> tool.</p>
-
- <div class="example"><h3>Example:</h3><pre class="prettyprint lang-config"><Location "/private/">
- AuthType Digest
- AuthName "private area"
- AuthDigestDomain "/private/" "http://mirror.my.dom/private2/"
-
- AuthDigestProvider file
- AuthUserFile "/web/auth/.digest_pw"
- Require valid-user
-</Location></pre>
-</div>
-
- <div class="note"><h3>Note</h3>
- <p>Digest authentication was intended to be more secure than basic
- authentication, but no longer fulfills that design goal. A
- man-in-the-middle attacker can trivially force the browser to downgrade
- to basic authentication. And even a passive eavesdropper can brute-force
- the password using today's graphics hardware, because the hashing
- algorithm used by digest authentication is too fast. Another problem is
- that the storage of the passwords on the server is insecure. The contents
- of a stolen htdigest file can be used directly for digest authentication.
- Therefore using <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> to encrypt the whole connection is
- strongly recommended.</p>
- <p><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> only works properly on platforms
- where APR supports shared memory.</p>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestAlgorithm" id="AuthDigestAlgorithm">AuthDigestAlgorithm</a> <a name="authdigestalgorithm" id="authdigestalgorithm">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Selects the algorithm used to calculate the challenge and
AuthDigestShmemSize 1M</pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="using" id="using">Using Digest Authentication</a></h2>
+
+ <p>To use MD5 Digest authentication, simply
+ change the normal <code>AuthType Basic</code> and
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
+ to <code>AuthType Digest</code> and
+ <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code>,
+ when setting up authentication, then add a
+ <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> directive containing at least the root
+ URI(s) for this protection space.</p>
+
+ <p>Appropriate user (text) files can be created using the
+ <code class="program"><a href="../programs/htdigest.html">htdigest</a></code> tool.</p>
+
+ <div class="example"><h3>Example:</h3><pre class="prettyprint lang-config"><Location "/private/">
+ AuthType Digest
+ AuthName "private area"
+ AuthDigestDomain "/private/" "http://mirror.my.dom/private2/"
+
+ AuthDigestProvider file
+ AuthUserFile "/web/auth/.digest_pw"
+ Require valid-user
+</Location></pre>
+</div>
+
+ <div class="note"><h3>Note</h3>
+ <p>Digest authentication was intended to be more secure than basic
+ authentication, but no longer fulfills that design goal. A
+ man-in-the-middle attacker can trivially force the browser to downgrade
+ to basic authentication. And even a passive eavesdropper can brute-force
+ the password using today's graphics hardware, because the hashing
+ algorithm used by digest authentication is too fast. Another problem is
+ that the storage of the passwords on the server is insecure. The contents
+ of a stolen htdigest file can be used directly for digest authentication.
+ Therefore using <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> to encrypt the whole connection is
+ strongly recommended.</p>
+ <p><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> only works properly on platforms
+ where APR supports shared memory.</p>
+ </div>
</div>
</div>
<div class="bottomlang">
l'authentification</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Utilisation de l'authentification à base de
-condensés</a></h2>
-
- <p>Pour utiliser l'authentification à base de condensés MD5, vous
- devez simplement remplacer <code>AuthType Basic</code> et <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> respectivement
- par <code>AuthType Digest</code> et <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code> lorsque vous
- configurez l'authentification, puis ajouter une directive <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> contenant au
- moins la(les) URI(s) racine(s) de la zone à protéger.</p>
-
- <p>On peut créer les fichiers utilisateur appropriés (au format
- texte) à l'aide de l'outil <code class="program"><a href="../programs/htdigest.html">htdigest</a></code>.</p>
-
- <div class="example"><h3>Exemple :</h3><pre class="prettyprint lang-config"><Location /private/>
- AuthType Digest
- AuthName "private area"
- AuthDigestDomain /private/ http://mirror.my.dom/private2/
-
- AuthDigestProvider file
- AuthUserFile /web/auth/.digest_pw
- Require valid-user
-</Location></pre>
-</div>
-
- <div class="note"><h3>Note</h3>
- <p>L'authentification à base de condensé a été conçue pour améliorer
- la sécurité par rapport à l'authentification basique, mais il
- s'avère que ce but n'a pas été atteint. Un attaquant de type
- "man-in-the-middle" peut facilement forcer le navigateur à revenir à
- une authentification basique. Même une oreille indiscrète passive
- peut retrouver le mot de passe par force brute avec les moyens
- modernes, car l'algorithme de hashage utilisé par l'authentification
- à base de condensé est trop rapide. Autre problème, le stockage des
- mots de passe sur le serveur n'est pas sûr. Le contenu d'un fichier
- htdigest volé peut être utilisé directement pour l'authentification
- à base de condensé. Il est donc fortement recommandé d'utiliser
- <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> pour chiffrer la connexion.</p>
- <p><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> ne fonctionne correctement que
- sur les plates-formes où APR supporte la mémoire partagée.</p>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authdigestalgorithm" id="authdigestalgorithm">Directive</a> <a name="AuthDigestAlgorithm" id="AuthDigestAlgorithm">AuthDigestAlgorithm</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sélectionne l'algorithme utilisé pour calculer les
AuthDigestShmemSize 1M</pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="using" id="using">Utilisation de l'authentification à base de
+condensés</a></h2>
+
+ <p>Pour utiliser l'authentification à base de condensés MD5, vous
+ devez simplement remplacer <code>AuthType Basic</code> et <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> respectivement
+ par <code>AuthType Digest</code> et <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code> lorsque vous
+ configurez l'authentification, puis ajouter une directive <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> contenant au
+ moins la(les) URI(s) racine(s) de la zone à protéger.</p>
+
+ <p>On peut créer les fichiers utilisateur appropriés (au format
+ texte) à l'aide de l'outil <code class="program"><a href="../programs/htdigest.html">htdigest</a></code>.</p>
+
+ <div class="example"><h3>Exemple :</h3><pre class="prettyprint lang-config"><Location /private/>
+ AuthType Digest
+ AuthName "private area"
+ AuthDigestDomain /private/ http://mirror.my.dom/private2/
+
+ AuthDigestProvider file
+ AuthUserFile /web/auth/.digest_pw
+ Require valid-user
+</Location></pre>
+</div>
+
+ <div class="note"><h3>Note</h3>
+ <p>L'authentification à base de condensé a été conçue pour améliorer
+ la sécurité par rapport à l'authentification basique, mais il
+ s'avère que ce but n'a pas été atteint. Un attaquant de type
+ "man-in-the-middle" peut facilement forcer le navigateur à revenir à
+ une authentification basique. Même une oreille indiscrète passive
+ peut retrouver le mot de passe par force brute avec les moyens
+ modernes, car l'algorithme de hashage utilisé par l'authentification
+ à base de condensé est trop rapide. Autre problème, le stockage des
+ mots de passe sur le serveur n'est pas sûr. Le contenu d'un fichier
+ htdigest volé peut être utilisé directement pour l'authentification
+ à base de condensé. Il est donc fortement recommandé d'utiliser
+ <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> pour chiffrer la connexion.</p>
+ <p><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> ne fonctionne correctement que
+ sur les plates-formes où APR supporte la mémoire partagée.</p>
+ </div>
</div>
</div>
<div class="bottomlang">
<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Digest Authentication »ç¿ëÇϱâ</a></h2>
-
- <p>MD5 Digest authenticationÀº ¸Å¿ì ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- <code>AuthType Basic</code>°ú <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ´ë½Å
- <code>AuthType Digest</code>¿Í <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code>¸¦
- »ç¿ëÇÏ¿© °£´ÜÈ÷ ÀÎÁõÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ÃÖ¼ÒÇÑ º¸È£ÇÏ·Á´Â
- ¿µ¿ªÀÇ ±âº» URIÀ» <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> Áö½Ã¾î¿¡ »ç¿ëÇÑ´Ù.</p>
-
- <p><a href="../programs/htdigest.html">htdigest</a> µµ±¸¸¦
- »ç¿ëÇÏ¿© »ç¿ëÀÚ (¹®ÀÚ)ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- <Location /private/><br />
- <span class="indent">
- AuthType Digest<br />
- AuthName "private area"<br />
- AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
- <br />
- AuthDigestProvider file<br />
- AuthUserFile /web/auth/.digest_pw<br />
- Require valid-user<br />
- </span>
- </Location>
- </code></p></div>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p>Digest authenticationÀº Basic authenticationº¸´Ù ´õ
- ¾ÈÀüÇÏÁö¸¸, ºê¶ó¿ìÀú°¡ Áö¿øÇØ¾ß ÇÑ´Ù. 2002³â 11¿ù ÇöÀç digest
- authenticationÀ» Áö¿øÇÏ´Â ºê¶ó¿ìÀú¿¡´Â <a href="http://www.w3.org/Amaya/">Amaya</a>, <a href="http://konqueror.kde.org/">Konqueror</a>, (Windows¿ëÀº
- ÁúÀǹ®ÀÚ¿°ú ÇÔ²² »ç¿ëÇÏ¸é ¾ÈµÇÁö¸¸ - ÇØ°á¹æ¹ýÀº ¾Æ·¡ "<a href="#msie">MS Internet Explorer ¹®Á¦ ÇØ°áÇϱâ</a>"¸¦ Âü°í)
- Mac OS X¿Í Windows¿ë <a href="http://www.microsoft.com/windows/ie/">MS Internet
- Explorer</a>, <a href="http://www.mozilla.org">Mozilla</a>,
- <a href="http://channels.netscape.com/ns/browsers/download.jsp">Netscape</a> ¹öÀü 7, <a href="http://www.opera.com/">Opera</a>,
- <a href="http://www.apple.com/safari/">Safari</a> µîÀÌ ÀÖ´Ù.
- <a href="http://lynx.isc.org/">lynx</a>´Â digest authenticationÀ»
- Áö¿øÇÏÁö <strong>¾Ê´Â´Ù</strong>. digest authenticationÀÌ
- basic authentication ¸¸Å ³Î¸® ±¸ÇöµÇÁö ¾Ê¾Ò±â¶§¹®¿¡ ¸ðµç
- »ç¿ëÀÚ°¡ Áö¿øÇÏ´Â ºê¶ó¿ìÀú¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡¸¸ »ç¿ëÇؾß
- ÇÑ´Ù.</p>
- </div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="msie" id="msie">MS Internet Explorer ¹®Á¦ ÇØ°áÇϱâ</a></h2>
- <p>ÇöÀç Windows¿ë Internet Explorer´Â Digest authentication
- »ç¿ë½Ã ÁúÀǹ®ÀÚ¿ÀÌ ÀÖ´Â <code>GET</code> ¿äûÀ» RFC¿Í ´Ù¸£°Ô
- ó¸®ÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ¸î°¡Áö ¹æ¹ýÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p>
- ù¹ø°´Â ÇÁ·Î±×·¥¿¡ ÀڷḦ ³Ñ°ÜÁÖ±âÀ§ÇØ <code>GET</code>
- ´ë½Å <code>POST</code> ¿äûÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ÀÌ ¹æ¹ýÀÌ
- °¡´ÉÇÏ´Ù¸é °¡Àå °£´ÜÇÑ ÇØ°áÃ¥ÀÌ´Ù.
- </p>
-
- <p>¶Ç, ¾ÆÆÄÄ¡ 2.0.51ºÎÅÍ <code>AuthDigestEnableQueryStringHack</code>
- ȯ°æº¯¼ö¸¦ Á¦°øÇÏ¿© ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. ¿äû¿¡
- <code>AuthDigestEnableQueryStringHack</code>À» ¼³Á¤Çϸé
- ¾ÆÆÄÄ¡´Â MSIE ¹ö±×¸¦ ÇÇÇØ°¥ Á¶Ä¡¸¦ ÃëÇÏ°í ¿äû URI¸¦ digest
- ºñ±³¿¡¼ Á¦¿ÜÇÑ´Ù. ÀÌ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><h3>MSIE¿¡¼ Digest Authentication »ç¿ëÇϱâ:</h3><p><code>
- BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
- </code></p></div>
-
- <p>¼±ÅÃÀûÀΠȯ°æº¯¼ö ¼³Á¤¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code> Áö½Ã¾î¸¦
- Âü°íÇ϶ó.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDigestAlgorithm" id="AuthDigestAlgorithm">AuthDigestAlgorithm</a> <a name="authdigestalgorithm" id="authdigestalgorithm">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>digest authentication¿¡¼ challenge¿Í response
</code></p></div>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="using" id="using">Digest Authentication »ç¿ëÇϱâ</a></h2>
+
+ <p>MD5 Digest authenticationÀº ¸Å¿ì ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
+ <code>AuthType Basic</code>°ú <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ´ë½Å
+ <code>AuthType Digest</code>¿Í <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code>¸¦
+ »ç¿ëÇÏ¿© °£´ÜÈ÷ ÀÎÁõÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ÃÖ¼ÒÇÑ º¸È£ÇÏ·Á´Â
+ ¿µ¿ªÀÇ ±âº» URIÀ» <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> Áö½Ã¾î¿¡ »ç¿ëÇÑ´Ù.</p>
+
+ <p><a href="../programs/htdigest.html">htdigest</a> µµ±¸¸¦
+ »ç¿ëÇÏ¿© »ç¿ëÀÚ (¹®ÀÚ)ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù.</p>
+
+ <div class="example"><h3>¿¹Á¦:</h3><p><code>
+ <Location /private/><br />
+ <span class="indent">
+ AuthType Digest<br />
+ AuthName "private area"<br />
+ AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
+ <br />
+ AuthDigestProvider file<br />
+ AuthUserFile /web/auth/.digest_pw<br />
+ Require valid-user<br />
+ </span>
+ </Location>
+ </code></p></div>
+
+ <div class="note"><h3>ÁÖÀÇ</h3>
+ <p>Digest authenticationÀº Basic authenticationº¸´Ù ´õ
+ ¾ÈÀüÇÏÁö¸¸, ºê¶ó¿ìÀú°¡ Áö¿øÇØ¾ß ÇÑ´Ù. 2002³â 11¿ù ÇöÀç digest
+ authenticationÀ» Áö¿øÇÏ´Â ºê¶ó¿ìÀú¿¡´Â <a href="http://www.w3.org/Amaya/">Amaya</a>, <a href="http://konqueror.kde.org/">Konqueror</a>, (Windows¿ëÀº
+ ÁúÀǹ®ÀÚ¿°ú ÇÔ²² »ç¿ëÇÏ¸é ¾ÈµÇÁö¸¸ - ÇØ°á¹æ¹ýÀº ¾Æ·¡ "<a href="#msie">MS Internet Explorer ¹®Á¦ ÇØ°áÇϱâ</a>"¸¦ Âü°í)
+ Mac OS X¿Í Windows¿ë <a href="http://www.microsoft.com/windows/ie/">MS Internet
+ Explorer</a>, <a href="http://www.mozilla.org">Mozilla</a>,
+ <a href="http://channels.netscape.com/ns/browsers/download.jsp">Netscape</a> ¹öÀü 7, <a href="http://www.opera.com/">Opera</a>,
+ <a href="http://www.apple.com/safari/">Safari</a> µîÀÌ ÀÖ´Ù.
+ <a href="http://lynx.isc.org/">lynx</a>´Â digest authenticationÀ»
+ Áö¿øÇÏÁö <strong>¾Ê´Â´Ù</strong>. digest authenticationÀÌ
+ basic authentication ¸¸Å ³Î¸® ±¸ÇöµÇÁö ¾Ê¾Ò±â¶§¹®¿¡ ¸ðµç
+ »ç¿ëÀÚ°¡ Áö¿øÇÏ´Â ºê¶ó¿ìÀú¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡¸¸ »ç¿ëÇؾß
+ ÇÑ´Ù.</p>
+ </div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="msie" id="msie">MS Internet Explorer ¹®Á¦ ÇØ°áÇϱâ</a></h2>
+ <p>ÇöÀç Windows¿ë Internet Explorer´Â Digest authentication
+ »ç¿ë½Ã ÁúÀǹ®ÀÚ¿ÀÌ ÀÖ´Â <code>GET</code> ¿äûÀ» RFC¿Í ´Ù¸£°Ô
+ ó¸®ÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ¸î°¡Áö ¹æ¹ýÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö
+ ÀÖ´Ù.</p>
+
+ <p>
+ ù¹ø°´Â ÇÁ·Î±×·¥¿¡ ÀڷḦ ³Ñ°ÜÁÖ±âÀ§ÇØ <code>GET</code>
+ ´ë½Å <code>POST</code> ¿äûÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ÀÌ ¹æ¹ýÀÌ
+ °¡´ÉÇÏ´Ù¸é °¡Àå °£´ÜÇÑ ÇØ°áÃ¥ÀÌ´Ù.
+ </p>
+
+ <p>¶Ç, ¾ÆÆÄÄ¡ 2.0.51ºÎÅÍ <code>AuthDigestEnableQueryStringHack</code>
+ ȯ°æº¯¼ö¸¦ Á¦°øÇÏ¿© ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. ¿äû¿¡
+ <code>AuthDigestEnableQueryStringHack</code>À» ¼³Á¤Çϸé
+ ¾ÆÆÄÄ¡´Â MSIE ¹ö±×¸¦ ÇÇÇØ°¥ Á¶Ä¡¸¦ ÃëÇÏ°í ¿äû URI¸¦ digest
+ ºñ±³¿¡¼ Á¦¿ÜÇÑ´Ù. ÀÌ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.</p>
+
+ <div class="example"><h3>MSIE¿¡¼ Digest Authentication »ç¿ëÇϱâ:</h3><p><code>
+ BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
+ </code></p></div>
+
+ <p>¼±ÅÃÀûÀΠȯ°æº¯¼ö ¼³Á¤¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code> Áö½Ã¾î¸¦
+ Âü°íÇ϶ó.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_auth_digest.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../howto/auth.html">Authentication howto</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basicconfig" id="basicconfig">Basic Configuration</a></h2>
-
- <p>To protect a particular URL with <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, you need to
- decide where you will store your <var>session</var>, and you will need to
- decide what method you will use to authenticate. In this simple example, the
- login details will be stored in a session based on
- <code class="module"><a href="../mod/mod_session_cookie.html">mod_session_cookie</a></code>, and authentication will be attempted against
- a file using <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. If authentication is unsuccessful,
- the user will be redirected to the form login page.</p>
-
- <div class="example"><h3>Basic example</h3><pre class="prettyprint lang-config">AuthFormProvider file
-AuthUserFile "conf/passwd"
-AuthType form
-AuthName realm
-AuthFormLoginRequiredLocation "http://example.com/login.html"
-Session On
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- <p>The directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> will enable
- the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> authentication when set to the value <var>form</var>.
- The directives <code class="directive"><a href="#authformprovider">AuthFormProvider</a></code> and
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> specify that usernames
- and passwords should be checked against the chosen file.</p>
-
- <p>The directives <code class="directive"><a href="../mod/mod_session.html#session">Session</a></code>,
- <code class="directive"><a href="../mod/mod_session_cookie.html#sessioncookiename">SessionCookieName</a></code> and
- <code class="directive"><a href="../mod/mod_session_crypto.html#sessioncryptopassphrase">SessionCryptoPassphrase</a></code> create an
- encrypted session stored within an HTTP cookie on the browser. For more information
- on the different options for configuring a session, read the documentation for
- <code class="module"><a href="../mod/mod_session.html">mod_session</a></code>.</p>
-
- <p>In the simple example above, a URL has been protected by
- <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, but the user has yet to be given an opportunity to
- enter their username and password. Options for doing so include providing a
- dedicated standalone login page for this purpose, or for providing the login
- page inline.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="standalone" id="standalone">Standalone Login</a></h2>
-
- <p>The login form can be hosted as a standalone page, or can be provided inline on
- the same page.</p>
-
- <p>When configuring the login as a standalone page, unsuccessful authentication
- attempts should be redirected to a login form created by the website for this purpose,
- using the <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
- directive. Typically this login page will contain an HTML form, asking the user to
- provide their usename and password.</p>
-
- <div class="example"><h3>Example login form</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
-</form></pre>
-</div>
-
- <p>The part that does the actual login is handled by the <var>form-login-handler</var>.
- The action of the form should point at this handler, which is configured within
- Apache httpd as follows:</p>
-
- <div class="example"><h3>Form login handler example</h3><pre class="prettyprint lang-config"><Location "/dologin.html">
- SetHandler form-login-handler
- AuthFormLoginRequiredLocation "http://example.com/login.html"
- AuthFormLoginSuccessLocation "http://example.com/success.html"
- AuthFormProvider file
- AuthUserFile "conf/passwd"
- AuthType form
- AuthName realm
- Session On
- SessionCookieName session path=/
- SessionCryptoPassphrase secret
-</Location></pre>
-</div>
-
- <p>The URLs specified by the
- <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code> directive will typically
- point to a page explaining to the user that their login attempt was unsuccessful, and they
- should try again. The <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code>
- directive specifies the URL the user should be redirected to upon successful login.</p>
-
- <p>Alternatively, the URL to redirect the user to on success can be embedded within the login
- form, as in the example below. As a result, the same <var>form-login-handler</var> can be
- reused for different areas of a website.</p>
-
- <div class="example"><h3>Example login form with location</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
- <input type="hidden" name="httpd_location" value="http://example.com/success.html" />
-</form></pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inline" id="inline">Inline Login</a></h2>
-
- <div class="warning"><h3>Warning</h3>
- <p>A risk exists that under certain circumstances, the login form configured
- using inline login may be submitted more than once, revealing login credentials to
- the application running underneath. The administrator must ensure that the underlying
- application is properly secured to prevent abuse. If in doubt, use the
- standalone login configuration.</p>
- </div>
-
- <p>As an alternative to having a dedicated login page for a website, it is possible to
- configure <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> to authenticate users inline, without being
- redirected to another page. This allows the state of the current page to be preserved
- during the login attempt. This can be useful in a situation where a time limited
- session is in force, and the session times out in the middle of the user request. The
- user can be re-authenticated in place, and they can continue where they left off.</p>
-
- <p>If a non-authenticated user attempts to access a page protected by
- <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> that isn't configured with a
- <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code> directive,
- a <var>HTTP_UNAUTHORIZED</var> status code is returned to the browser indicating to the user
- that they are not authorized to view the page.</p>
-
- <p>To configure inline authentication, the administrator overrides the error document
- returned by the <var>HTTP_UNAUTHORIZED</var> status code with a custom error document
- containing the login form, as follows:</p>
-
- <div class="example"><h3>Basic inline example</h3><pre class="prettyprint lang-config">AuthFormProvider file
-ErrorDocument 401 "/login.shtml"
-AuthUserFile "conf/passwd"
-AuthType form
-AuthName realm
-AuthFormLoginRequiredLocation "http://example.com/login.html"
-Session On
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- <p>The error document page should contain a login form with an empty action property,
- as per the example below. This has the effect of submitting the form to
- the original protected URL, without the page having to know what that
- URL is.</p>
-
- <div class="example"><h3>Example inline login form</h3><pre class="prettyprint lang-html"><form method="POST" <strong>action=""</strong>>
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
-</form></pre>
-</div>
-
- <p>When the end user has filled in their login details, the form will make
- an HTTP POST request to the original password protected URL.
- <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> will intercept this POST request, and if
- HTML fields are found present for the username and password, the user
- will be logged in, and the original password protected URL will be returned
- to the user as a GET request.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inlinepreservebody" id="inlinepreservebody">Inline Login with Body Preservation</a></h2>
-
- <p>A limitation of the inline login technique described above is that should an
- HTML form POST have resulted in the request to authenticate or
- reauthenticate, the
- contents of the original form posted by the browser will be lost. Depending on
- the function of the website, this could present significant inconvenience for the
- end user.</p>
-
- <p><code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> addresses this by allowing the method and body
- of the original request to be embedded in the login form. If authentication
- is successful, the original method and body will be retried by Apache httpd, preserving
- the state of the original request.</p>
-
- <p>To enable body preservation, add three additional fields to the login form as
- per the example below.</p>
-
- <div class="example"><h3>Example with body preservation</h3><pre class="prettyprint lang-html"><form method="POST" action="">
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
- <br /> <strong><input type="hidden" name="httpd_method" value="POST" />
- <input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" />
- <input type="hidden" name="httpd_body" value="name1=value1&name2=value2" /></strong><br />
-</form></pre>
-</div>
-
- <p>How the method, mimetype and body of the original request are embedded within the
- login form will depend on the platform and technology being used within the website.
- </p>
-
- <p>One option is to use the <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> module along with the
- <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code> directive, along with a suitable
- CGI script to embed the variables in the form.</p>
-
- <p>Another option is to render the login form using a CGI script or other dynamic
- technology.</p>
-
- <div class="example"><h3>CGI example</h3><pre class="prettyprint lang-config"> AuthFormProvider file
- ErrorDocument 401 "/cgi-bin/login.cgi"
- ...</pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="loggingout" id="loggingout">Logging Out</a></h2>
-
- <p>To enable a user to log out of a particular session, configure a page to
- be handled by the <var>form-logout-handler</var>. Any attempt to access this
- URL will cause the username and password to be removed from the current
- session, effectively logging the user out.</p>
-
- <p>By setting the
- <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code> directive,
- a URL can be specified that the browser will be redirected to on successful
- logout. This URL might explain to the user that they have been logged out, and
- give the user the option to log in again.</p>
-
- <div class="example"><h3>Basic logout example</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
-AuthName realm
-AuthFormLogoutLocation "http://example.com/loggedout.html"
-Session On
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- <p>Note that logging a user out does not delete the session; it merely removes
- the username and password from the session. If this results in an empty session,
- the net effect will be the removal of that session, but this is not
- guaranteed. If you want to guarantee the removal of a session, set the
- <code class="directive"><a href="../mod/mod_session.html#sessionmaxage">SessionMaxAge</a></code> directive to a small
- value, like 1 (setting the directive to zero would mean no session age limit).
- </p>
-
- <div class="example"><h3>Basic session expiry example</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
-AuthFormLogoutLocation "http://example.com/loggedout.html"
-Session On
-SessionMaxAge 1
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="urlencoding" id="urlencoding">Usernames and Passwords</a></h2>
- <p>Note that form submission involves URLEncoding the form data:
- in this case the username and password. You should therefore
- pick usernames and passwords that avoid characters that are
- URLencoded in form submission, or you may get unexpected results.</p>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthFormAuthoritative" id="AuthFormAuthoritative">AuthFormAuthoritative</a> <a name="authformauthoritative" id="authformauthoritative">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization and authentication are passed to
in.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basicconfig" id="basicconfig">Basic Configuration</a></h2>
+
+ <p>To protect a particular URL with <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, you need to
+ decide where you will store your <var>session</var>, and you will need to
+ decide what method you will use to authenticate. In this simple example, the
+ login details will be stored in a session based on
+ <code class="module"><a href="../mod/mod_session_cookie.html">mod_session_cookie</a></code>, and authentication will be attempted against
+ a file using <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. If authentication is unsuccessful,
+ the user will be redirected to the form login page.</p>
+
+ <div class="example"><h3>Basic example</h3><pre class="prettyprint lang-config">AuthFormProvider file
+AuthUserFile "conf/passwd"
+AuthType form
+AuthName realm
+AuthFormLoginRequiredLocation "http://example.com/login.html"
+Session On
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
+</div>
+
+ <p>The directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> will enable
+ the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> authentication when set to the value <var>form</var>.
+ The directives <code class="directive"><a href="#authformprovider">AuthFormProvider</a></code> and
+ <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> specify that usernames
+ and passwords should be checked against the chosen file.</p>
+
+ <p>The directives <code class="directive"><a href="../mod/mod_session.html#session">Session</a></code>,
+ <code class="directive"><a href="../mod/mod_session_cookie.html#sessioncookiename">SessionCookieName</a></code> and
+ <code class="directive"><a href="../mod/mod_session_crypto.html#sessioncryptopassphrase">SessionCryptoPassphrase</a></code> create an
+ encrypted session stored within an HTTP cookie on the browser. For more information
+ on the different options for configuring a session, read the documentation for
+ <code class="module"><a href="../mod/mod_session.html">mod_session</a></code>.</p>
+
+ <p>In the simple example above, a URL has been protected by
+ <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, but the user has yet to be given an opportunity to
+ enter their username and password. Options for doing so include providing a
+ dedicated standalone login page for this purpose, or for providing the login
+ page inline.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="standalone" id="standalone">Standalone Login</a></h2>
+
+ <p>The login form can be hosted as a standalone page, or can be provided inline on
+ the same page.</p>
+
+ <p>When configuring the login as a standalone page, unsuccessful authentication
+ attempts should be redirected to a login form created by the website for this purpose,
+ using the <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
+ directive. Typically this login page will contain an HTML form, asking the user to
+ provide their usename and password.</p>
+
+ <div class="example"><h3>Example login form</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+</form></pre>
+</div>
+
+ <p>The part that does the actual login is handled by the <var>form-login-handler</var>.
+ The action of the form should point at this handler, which is configured within
+ Apache httpd as follows:</p>
+
+ <div class="example"><h3>Form login handler example</h3><pre class="prettyprint lang-config"><Location "/dologin.html">
+ SetHandler form-login-handler
+ AuthFormLoginRequiredLocation "http://example.com/login.html"
+ AuthFormLoginSuccessLocation "http://example.com/success.html"
+ AuthFormProvider file
+ AuthUserFile "conf/passwd"
+ AuthType form
+ AuthName realm
+ Session On
+ SessionCookieName session path=/
+ SessionCryptoPassphrase secret
+</Location></pre>
+</div>
+
+ <p>The URLs specified by the
+ <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code> directive will typically
+ point to a page explaining to the user that their login attempt was unsuccessful, and they
+ should try again. The <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code>
+ directive specifies the URL the user should be redirected to upon successful login.</p>
+
+ <p>Alternatively, the URL to redirect the user to on success can be embedded within the login
+ form, as in the example below. As a result, the same <var>form-login-handler</var> can be
+ reused for different areas of a website.</p>
+
+ <div class="example"><h3>Example login form with location</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+ <input type="hidden" name="httpd_location" value="http://example.com/success.html" />
+</form></pre>
+</div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="inline" id="inline">Inline Login</a></h2>
+
+ <div class="warning"><h3>Warning</h3>
+ <p>A risk exists that under certain circumstances, the login form configured
+ using inline login may be submitted more than once, revealing login credentials to
+ the application running underneath. The administrator must ensure that the underlying
+ application is properly secured to prevent abuse. If in doubt, use the
+ standalone login configuration.</p>
+ </div>
+
+ <p>As an alternative to having a dedicated login page for a website, it is possible to
+ configure <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> to authenticate users inline, without being
+ redirected to another page. This allows the state of the current page to be preserved
+ during the login attempt. This can be useful in a situation where a time limited
+ session is in force, and the session times out in the middle of the user request. The
+ user can be re-authenticated in place, and they can continue where they left off.</p>
+
+ <p>If a non-authenticated user attempts to access a page protected by
+ <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> that isn't configured with a
+ <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code> directive,
+ a <var>HTTP_UNAUTHORIZED</var> status code is returned to the browser indicating to the user
+ that they are not authorized to view the page.</p>
+
+ <p>To configure inline authentication, the administrator overrides the error document
+ returned by the <var>HTTP_UNAUTHORIZED</var> status code with a custom error document
+ containing the login form, as follows:</p>
+
+ <div class="example"><h3>Basic inline example</h3><pre class="prettyprint lang-config">AuthFormProvider file
+ErrorDocument 401 "/login.shtml"
+AuthUserFile "conf/passwd"
+AuthType form
+AuthName realm
+AuthFormLoginRequiredLocation "http://example.com/login.html"
+Session On
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
+</div>
+
+ <p>The error document page should contain a login form with an empty action property,
+ as per the example below. This has the effect of submitting the form to
+ the original protected URL, without the page having to know what that
+ URL is.</p>
+
+ <div class="example"><h3>Example inline login form</h3><pre class="prettyprint lang-html"><form method="POST" <strong>action=""</strong>>
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+</form></pre>
+</div>
+
+ <p>When the end user has filled in their login details, the form will make
+ an HTTP POST request to the original password protected URL.
+ <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> will intercept this POST request, and if
+ HTML fields are found present for the username and password, the user
+ will be logged in, and the original password protected URL will be returned
+ to the user as a GET request.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="inlinepreservebody" id="inlinepreservebody">Inline Login with Body Preservation</a></h2>
+
+ <p>A limitation of the inline login technique described above is that should an
+ HTML form POST have resulted in the request to authenticate or
+ reauthenticate, the
+ contents of the original form posted by the browser will be lost. Depending on
+ the function of the website, this could present significant inconvenience for the
+ end user.</p>
+
+ <p><code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> addresses this by allowing the method and body
+ of the original request to be embedded in the login form. If authentication
+ is successful, the original method and body will be retried by Apache httpd, preserving
+ the state of the original request.</p>
+
+ <p>To enable body preservation, add three additional fields to the login form as
+ per the example below.</p>
+
+ <div class="example"><h3>Example with body preservation</h3><pre class="prettyprint lang-html"><form method="POST" action="">
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+ <br /> <strong><input type="hidden" name="httpd_method" value="POST" />
+ <input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" />
+ <input type="hidden" name="httpd_body" value="name1=value1&name2=value2" /></strong><br />
+</form></pre>
+</div>
+
+ <p>How the method, mimetype and body of the original request are embedded within the
+ login form will depend on the platform and technology being used within the website.
+ </p>
+
+ <p>One option is to use the <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> module along with the
+ <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code> directive, along with a suitable
+ CGI script to embed the variables in the form.</p>
+
+ <p>Another option is to render the login form using a CGI script or other dynamic
+ technology.</p>
+
+ <div class="example"><h3>CGI example</h3><pre class="prettyprint lang-config"> AuthFormProvider file
+ ErrorDocument 401 "/cgi-bin/login.cgi"
+ ...</pre>
+</div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="loggingout" id="loggingout">Logging Out</a></h2>
+
+ <p>To enable a user to log out of a particular session, configure a page to
+ be handled by the <var>form-logout-handler</var>. Any attempt to access this
+ URL will cause the username and password to be removed from the current
+ session, effectively logging the user out.</p>
+
+ <p>By setting the
+ <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code> directive,
+ a URL can be specified that the browser will be redirected to on successful
+ logout. This URL might explain to the user that they have been logged out, and
+ give the user the option to log in again.</p>
+
+ <div class="example"><h3>Basic logout example</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
+AuthName realm
+AuthFormLogoutLocation "http://example.com/loggedout.html"
+Session On
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
+</div>
+
+ <p>Note that logging a user out does not delete the session; it merely removes
+ the username and password from the session. If this results in an empty session,
+ the net effect will be the removal of that session, but this is not
+ guaranteed. If you want to guarantee the removal of a session, set the
+ <code class="directive"><a href="../mod/mod_session.html#sessionmaxage">SessionMaxAge</a></code> directive to a small
+ value, like 1 (setting the directive to zero would mean no session age limit).
+ </p>
+
+ <div class="example"><h3>Basic session expiry example</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
+AuthFormLogoutLocation "http://example.com/loggedout.html"
+Session On
+SessionMaxAge 1
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
+</div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="urlencoding" id="urlencoding">Usernames and Passwords</a></h2>
+ <p>Note that form submission involves URLEncoding the form data:
+ in this case the username and password. You should therefore
+ pick usernames and passwords that avoid characters that are
+ URLencoded in form submission, or you may get unexpected results.</p>
+ </div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_auth_form.html" title="English"> en </a> |
l'authentification</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basicconfig" id="basicconfig">Configuration de base</a></h2>
-
- <p>Pour protéger une URL particulière avec le module
- <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, vous devez déterminer l'endroit où
- vous allez stocker votre <var>session</var>, ainsi que la méthode
- d'authentification. Dans cet exemple simple, les informations de
- connexion sont stockées dans une session à l'aide du module
- <code class="module"><a href="../mod/mod_session_cookie.html">mod_session_cookie</a></code>, et l'authentification utilise
- un fichier en s'appuyant sur le module
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. Si l'authentification échoue,
- l'utilisateur dera redirigé vers la page du formulaire de
- connexion.</p>
-
- <div class="example"><h3>Exemple simple</h3><pre class="prettyprint lang-config">AuthFormProvider file
-AuthUserFile conf/passwd
-AuthType form
-AuthName realm
-AuthFormLoginRequiredLocation http://example.com/login.html
-Session On
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- <p>L'authentification <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> est activée
- en affectant la valeur <var>form</var> à la directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code>. Les directives
- <code class="directive"><a href="#authformprovider">AuthFormProvider</a></code> et
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- spécifient que les noms d'utilisateurs et mots de passe seront
- vérifiés en utilisant le fichier choisi.</p>
-
- <p>Les directives <code class="directive"><a href="../mod/mod_session.html#session">Session</a></code>, <code class="directive"><a href="../mod/mod_session_cookie.html#sessioncookiename">SessionCookieName</a></code> et
- <code class="directive"><a href="../mod/mod_session_crypto.html#sessioncryptopassphrase">SessionCryptoPassphrase</a></code>
- créent une session chiffrée stockée dans un cookie HTTP au niveau
- du navigateur. Pour plus d'informations à propos des différentes
- options de configuration des sessions, reportez-vous à la
- documentation du module <code class="module"><a href="../mod/mod_session.html">mod_session</a></code>.</p>
-
- <p>Dans l'exemple simple ci-dessus, une URL a été protégée par
- <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, mais on doit maintenant fournir
- à l'utilisateur un moyen d'entrer un nom et un mot de passe. À cet
- effet, on peut soit écrire une page de connexion indépendante
- dédiée, soit inclure le formulaire de connexion dans la page
- courante.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="standalone" id="standalone">Page de connexion dédiée</a></h2>
-
- <p>Le formulaire de connexion peut être contenu dans une page
- indépendante, ou être inclus dans la page courante. </p>
-
- <p>Lorsque la connexion s'effectue à partir d'une page
- indépendante et si la tentative d'authentification échoue,
- l'utilisateur doit être redirigé vers un formulaire de connexion,
- créé à cet effet sur le site web, en utilisant la directive
- <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>.
- En général, la page de connexion contiendra un formulaire HTML
- demandant à l'utilisateur de fournir un nom et un mot de passe.</p>
-
- <div class="example"><h3>Exemple de formulaire de connexion</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
-</form></pre>
-</div>
-
- <p>La partie où s'effectue la connexion proprement dite est
- traitée par le gestionnaire <var>form-login-handler</var>.
- L'action de ce formulaire doit pointer vers ce gestionnaire, ce
- que l'on configure dans Apache httpd comme suit :</p>
-
- <div class="example"><h3>Exemple de configuration du gestionnaire de
- formulaire de connexion</h3><pre class="prettyprint lang-config"><Location /dologin.html>
- SetHandler form-login-handler
- AuthFormLoginRequiredLocation http://example.com/login.html
- AuthFormLoginSuccessLocation http://example.com/success.html
- AuthFormProvider file
- AuthUserFile conf/passwd
- AuthType form
- AuthName realm
- Session On
- SessionCookieName session path=/
- SessionCryptoPassphrase secret
-</Location></pre>
-</div>
-
- <p>L'URL spécifiée par la directive
- <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
- référencera en général une page expliquant à l'utilisateur que sa
- tentative de connexion a échoué, et qu'il doit la renouveler. La
- directive <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code>
- spécifie l'URL vers laquelle l'utilisateur doit être redirigé s'il
- s'est authentifié avec succès.</p>
-
- <p>Alternativement, l'URL vers laquelle doit être redirigé
- l'utilisateur s'il s'est authentifié avec succès peut être
- intégrée dans le formulaire de connexion, comme dans l'exemple
- ci-dessous. Il en découle que le même gestionnaire
- <var>form-login-handler</var> pourra être utilisé pour différentes
- zones du site web.</p>
-
- <div class="example"><h3>Exemple de formulaire d'authentification multizone</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
- <input type="hidden" name="httpd_location" value="http://example.com/success.html" />
-</form></pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inline" id="inline">Connexion à la volée</a></h2>
-
- <div class="warning"><h3>Avertissement</h3>
- <p>Il existe un risque, dans certaines circonstances, que le
- formulaire de connexion configuré pour une connexion à la volée
- soit soumis plusieurs fois, révélant de ce fait les paramètres
- de connexion à l'application sous-jacente. L'administrateur doit
- s'assurer que cette dernière est correctement sécurisée afin
- d'éviter les éventuels abus. En cas de doute, utilisez une page
- de connexion indépendante dédiée.</p>
- </div>
-
- <p>Comme alternative à la page de connexion dédiée pour un site
- web, il est possible de configurer <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>
- pour authentifier les utilisateurs à la volée, sans les rediriger
- vers une autre page, ce qui permet de conserver l'état de la page
- courante au cours de la tentative de connexion. Ceci peut s'avérer
- utile dans le cas d'une session limitée dans le temps, si le délai
- de la session a expiré pendant la requête de l'utilisateur. Ce
- dernier peut alors se réauthentifier à la même place, et
- poursuivre son activité à partir du point où il en était resté.</p>
-
- <p>Si un utilisateur non authentifié tente d'accéder à une page
- protégée par <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, et si ce dernier
- n'est pas configuré avec une directive <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>,
- un code de statut <var>HTTP_UNAUTHORIZED</var> est renvoyé vers le
- navigateur, indiquant à l'utilisateur qu'il n'est pas autorisé à
- accéder à cette page.</p>
-
- <p>Pour configurer l'authentification à la volée, l'administrateur
- remplace le message d'erreur renvoyé par le code de statut
- <var>HTTP_UNAUTHORIZED</var> par un message d'erreur personnalisé
- contenant le formulaire de connexion comme suit :</p>
-
- <div class="example"><h3>Exemple simple d'authentification à la volée</h3><pre class="prettyprint lang-config">AuthFormProvider file
-ErrorDocument 401 /login.shtml
-AuthUserFile conf/passwd
-AuthType form
-AuthName realm
-AuthFormLoginRequiredLocation http://example.com/login.html
-Session On
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- <p>La page du message d'erreur doit contenir un formulaire de
- connexion dont la propriété action est vide, comme dans l'exemple
- ci-dessous. Ceci a pour effet de soumettre le formulaire à l'URL
- protégée originale, cette dernière n'ayant pas besoin d'être
- connue de la page en cours.</p>
-
- <div class="example"><h3>Exemple de formulaire de connexion à la volée</h3><pre class="prettyprint lang-html"><form method="POST" <strong>action=""</strong>>
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
-</form></pre>
-</div>
-
- <p>Lorsque l'utilisateur final a entré ses informations de
- connexion, le formulaire effectue une requête HTTP POST pour l'URL
- originale protégée par mot de passe.
- <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> va alors intercepter cette requête
- POST, et dans le cas où des champs HTML Utilisateur et Mot de
- passe corrects sont présents, l'utilisateur sera connecté, et
- l'URL originale protégée par mot de passe lui sera retournée en
- tant que requête GET.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inlinepreservebody" id="inlinepreservebody">Connexion à la volée avec
- conservation du contenu</a></h2>
-
- <p>Il existe une limite à la technique de connexion à la volée
- décrite ci-dessus ; si un formulaire HTML POST entraîne une
- demande d'authentification ou de réauthentification, le contenu du
- formulaire original envoyé par le navigateur sera perdu. Cela peut
- s'avérer plus ou moins gênant pour l'utilisateur final selon la
- fonction du site web.</p>
-
- <p>Comme solution à ce problème, <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>
- permet d'intégrer la méthode et le contenu de la requête originale
- dans le formulaire de connexion. Si l'authentification réussit,
- Apache httpd pourra refaire une tentative avec la méthode et le contenu
- originaux, tout en conservant l'état de la requête originale.</p>
-
- <p>Pour mettre en oeuvre la conservation du contenu, vous devez
- ajouter trois champs supplémentaires au formulaire de connexion
- comme dans l'exemple suivant :</p>
-
- <div class="example"><h3>Exemple de formulaire avec conservation du
- contenu</h3><pre class="prettyprint lang-html"><form method="POST" action="">
- Username: <input type="text" name="httpd_username" value="" />
- Password: <input type="password" name="httpd_password" value="" />
- <input type="submit" name="login" value="Login" />
- <br /> <strong><input type="hidden" name="httpd_method" value="POST" />
- <input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" />
- <input type="hidden" name="httpd_body" value="name1=value1&name2=value2" /></strong><br />
-</form></pre>
-</div>
-
- <p>La manière dont la méthode, le type MIME et le contenu de la
- requête originale seront intégrés dans le formulaire de connexion
- vont dépendre de la plate-forme et de la technologie utilisées au
- sein du site web.
- </p>
-
- <p>Une option consiste à utiliser le module
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> en association avec la directive
- <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code>, ainsi
- qu'un script CGI adapté pour intégrer les variables dans le
- formulaire.</p>
-
- <p>Une autre option consiste à présenter le formulaire de
- connexion en utilisant un script CGI ou une autre technologie
- dynamique.</p>
-
- <div class="example"><h3>Exemple avec script CGI</h3><pre class="prettyprint lang-config"> AuthFormProvider file
- ErrorDocument 401 /cgi-bin/login.cgi
- ...</pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="loggingout" id="loggingout">Déconnexion</a></h2>
-
- <p>Pour permettre à un utilisateur de se déconnecter d'une session
- particulière, vous devez configurer une page pour qu'elle soit
- traitée par le gestionnaire <var>form-logout-handler</var>. Tout
- accès à cette URL va entraîner la suppression de l'Utilisateur et
- du Mot de passe de la session courante, ce qui aura pour effet de
- déconnecter l'utilisateur.</p>
-
- <p>Vous pouvez spécifier une URL vers laquelle le navigateur sera
- redirigé en cas de déconnection réussie, en définissant la
- directive <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code>. Cette
- URL devra expliquer à l'utilisateur qu'il a été déconnecté, et lui
- donner la possibilité de se connecter à nouveau.</p>
-
- <div class="example"><h3>Exemple simple de configuration de la
- déconnexion</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
-AuthName realm
-AuthFormLogoutLocation http://example.com/loggedout.html
-Session On
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- <p>Notez que la déconnexion d'un utilisateur ne supprime pas la
- session ; elle supprime seulement l'utilisateur et le mot de passe
- de la session. Si la session qui en résulte est vide, elle sera
- probablement supprimée, mais ce n'est pas garanti. Si vous voulez
- être sûr que la session sera supprimée, affectez une valeur faible
- à la directive <code class="directive"><a href="../mod/mod_session.html#sessionmaxage">SessionMaxAge</a></code>, par exemple 1
- (affecter à cette directive la valeur zéro signifie une session
- sans limite d'âge).
- </p>
-
- <div class="example"><h3>Exemple simple avec durée de validité de session
- limitée</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
-AuthFormLogoutLocation http://example.com/loggedout.html
-Session On
-SessionMaxAge 1
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="urlencoding" id="urlencoding">Noms d'utilisateurs et mots de
- passe</a></h2>
- <p>Notez que la soumission d'un formulaire implique l'encodage URL
- (URLEncoding) des données du formulaire, ici le nom d'utilisateur et
- le mot de passe. Vous devez donc choisir des noms d'utilisateurs et
- mots de passe qui ne contiennent pas de caractères susceptibles
- d'être encodés URL lors de la soumission du formulaire, sous peine
- d'obtenir des résultats inattendus.</p>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authformauthoritative" id="authformauthoritative">Directive</a> <a name="AuthFormAuthoritative" id="AuthFormAuthoritative">AuthFormAuthoritative</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Détermine si l'autorisation et l'authentification sont confiés à
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformloginrequiredlocation" id="authformloginrequiredlocation">Directive</a> <a name="AuthFormLoginRequiredLocation" id="AuthFormLoginRequiredLocation">AuthFormLoginRequiredLocation</a></h2>
+<div class="directive-section"><h2><a name="authformloginrequiredlocation" id="authformloginrequiredlocation">Directive</a> <a name="AuthFormLoginRequiredLocation" id="AuthFormLoginRequiredLocation">AuthFormLoginRequiredLocation</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL de la page vers laquelle on doit être redirigé si une
+authentification est requise</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormLoginRequiredLocation <var>url</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP
+Apache. L'interprétation des expressions rationnelles est supportée
+depuis la version 2.4.4.</td></tr>
+</table>
+ <p>La directive <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
+ spécifie l'URL vers laquelle l'utilisateur devra être
+ redirigé s'il n'est pas autorisé à accéder à une page. Sa valeur est
+ interprétée via l'interpréteur <a href="../expr.html">ap_expr</a>
+ avant d'être envoyée au client. Par défaut,
+ si un utilisateur n'est pas autorisé à accéder à une page, le code
+ de réponse HTTP <code>HTTP_UNAUTHORIZED</code> est renvoyé avec la
+ page spécifiée par la directive <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code>. La directive <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
+ permet de remplacer cette valeur par défaut.</p>
+
+ <p>Vous pouvez utiliser cette directive si vous voulez présenter une
+ page de connexion personnalisée à vos utilisateurs.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformloginsuccesslocation" id="authformloginsuccesslocation">Directive</a> <a name="AuthFormLoginSuccessLocation" id="AuthFormLoginSuccessLocation">AuthFormLoginSuccessLocation</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL de la page vers laquelle on doit être redirigé en cas
+de connexion réussie</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormLoginSuccessLocation <var>url</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP
+Apache. L'interprétation des expressions rationnelles est supportée
+depuis la version 2.4.4.</td></tr>
+</table>
+ <p>La directive <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code>
+ spécifie l'URL vers laquelle l'utilisateur doit être
+ redirigé en cas de connexion réussie. Sa valeur est
+ interprétée via l'interpréteur <a href="../expr.html">ap_expr</a>
+ avant d'être envoyée au client. L'effet de cette directive
+ peut être annulé si l'on a défini un champ de formulaire contenant
+ une autre URL à l'aide de la directive <code class="directive"><a href="#authformlocation">AuthFormLocation</a></code>.</p>
+
+ <p>Vous pouvez utiliser cette directive si vous possédez une URL de
+ connexion personnalisée, et si vous n'avez pas intégré la page de
+ destination dans le formulaire de connexion.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformlogoutlocation" id="authformlogoutlocation">Directive</a> <a name="AuthFormLogoutLocation" id="AuthFormLogoutLocation">AuthFormLogoutLocation</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL vers laquelle un utilisateur devra être redirigé
+après s'être déconnecté</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormLogoutLocation <var>uri</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP
+Apache. L'interprétation des expressions rationnelles est supportée
+depuis la version 2.4.4.</td></tr>
+</table>
+ <p>La directive <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code>
+ spécifie l'URL de la page du serveur vers laquelle l'utilisateur
+ devra être redirigé s'il se déconnecte. Sa valeur est
+ interprétée via l'interpréteur <a href="../expr.html">ap_expr</a>
+ avant d'être envoyée au client.</p>
+
+ <p>Lorsqu'un accès est tenté sur un URI traité par le gestionnaire
+ <code>form-logout-handler</code>, la page spécifiée par cette
+ directive sera présentée à l'utilisateur final. Par exemple :</p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Location /logout>
+ SetHandler form-logout-handler
+ AuthFormLogoutLocation http://example.com/loggedout.html
+ Session on
+ #...
+</Location></pre>
+</div>
+
+ <p>Si un utilisateur tente d'accéder à l'URI <var>/logout/</var>, il
+ sera déconnecté, et la page <var>/loggedout.html</var> lui sera
+ présentée. Assurez-vous que la page <var>loggedout.html</var> n'est
+ pas protégée par mot de passe, car dans le cas contraire, elle ne
+ serait pas affichée.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformmethod" id="authformmethod">Directive</a> <a name="AuthFormMethod" id="AuthFormMethod">AuthFormMethod</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire contenant la méthode de la
+requête à effectuer en cas de connexion réussie</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormMethod <var>nom du champ</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_method</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
+</table>
+ <p>La directive <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>
+ spécifie le nom du champ HTML qui, s'il existe, contiendra le type
+ MIME de la requête à effectuer en cas de connexion réussie.</p>
+
+ <p>En ajoutant au formulaire les champs décrits dans <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>, <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> et <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, un site web sera en
+ mesure de relancer une requête qui a été éventuellement interrompue
+ par l'écran de connexion, ou par l'expiration d'un délai de
+ session.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformmimetype" id="authformmimetype">Directive</a> <a name="AuthFormMimetype" id="AuthFormMimetype">AuthFormMimetype</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire contenant le type MIME du
+corps de la requête à effectuer en cas de connexion
+réussie</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormMimetype <var>nom du champ</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_mimetype</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
+</table>
+ <p>La directive <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code>
+ spécifie le nom du champ HTML qui, s'il existe, contiendra le type
+ MIME de la requête à effectuer en cas de connexion réussie.</p>
+
+ <p>En ajoutant au formulaire les champs décrits dans <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>, <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> et <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, un site web sera en
+ mesure de relancer une requête qui a été éventuellement interrompue
+ par l'écran de connexion, ou par l'expiration d'un délai de
+ session.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformpassword" id="authformpassword">Directive</a> <a name="AuthFormPassword" id="AuthFormPassword">AuthFormPassword</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire qui contient le mot de passe
+de connexion</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormPassword <var>nom du champ</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_password</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
+</table>
+ <p>La directive <code class="directive"><a href="#authformpassword">AuthFormPassword</a></code> permet de
+ spécifier le nom du champ HTML qui, s'il existe, contiendra le mot
+ de passe qui sera utilisé pour la connexion.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformprovider" id="authformprovider">Directive</a> <a name="AuthFormProvider" id="AuthFormProvider">AuthFormProvider</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le(s) fournisseur(s) d'authentification pour la
+zone concernée</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormProvider <var>nom fournisseur</var>
+[<var>nom fournisseur</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthFormProvider file</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+</table>
+ <p>La directive <code class="directive">AuthFormProvider</code> permet de
+ définir quel fournisseur sera utilisé pour authentifier les
+ utilisateurs pour la zone concernée. Le fournisseur par défaut
+ <code>file</code> est implémenté par le module
+ <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. Assurez-vous que le fournisseur
+ choisi soit bien présent dans le serveur.</p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Location /secure>
+ AuthType form
+ AuthName "private area"
+ AuthFormProvider dbm
+ AuthDBMType SDBM
+ AuthDBMUserFile /www/etc/dbmpasswd
+ Require valid-user
+ #...
+</Location></pre>
+</div>
+
+ <p>Les différents fournisseurs sont implémentés par les modules
+ <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>, <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>,
+ <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> et
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformsitepassphrase" id="authformsitepassphrase">Directive</a> <a name="AuthFormSitePassphrase" id="AuthFormSitePassphrase">AuthFormSitePassphrase</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Court-circuite l'authentification pour les sites à fort
+trafic</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormSitePassphrase <var>secret</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
+</table>
+ <p>La directive <code class="directive"><a href="#authformsitepassphrase">AuthFormSitePassphrase</a></code>
+ spécifie un mot de passe qui, s'il est présent dans la session
+ utilisateur, indique à Apache httpd de court-circuiter l'authentification
+ pour l'URL considérée. On peut l'utiliser dans le cas de sites web à
+ fort trafic afin de réduire la charge induite sur l'infrastructure
+ d'authentification.</p>
+
+ <p>On peut insérer le mot de passe dans une session utilisateur en
+ ajoutant cette directive à la configuration concernant le
+ gestionnaire <var>form-login-handler</var>. Le gestionnaire
+ <var>form-login-handler</var>, quant à lui, effectuera toujours les
+ vérifications d'authentification, qu'un mot de passe soit spécifié
+ ou non.</p>
+
+ <div class="warning"><h3>Avertissement</h3>
+ <p>Si la session est présentée à l'utilisateur à l'aide du module
+ <code class="module"><a href="../mod/mod_session_cookie.html">mod_session_cookie</a></code>, et si la session n'est pas
+ protégée par le module <code class="module"><a href="../mod/mod_session_crypto.html">mod_session_crypto</a></code>, le mot
+ de passe peut faire l'objet d'une attaque de type dictionnaire.
+ Quelle que soit la configuration de la session, assurez-vous que
+ cette directive n'est pas utilisée dans un espace d'URLs contenant
+ des données privées, ou à partir desquelles des transactions
+ sensibles pourraient être menées. En tout état de cause, vous
+ devez être conscient des risques encourus avant de l'utiliser.</p>
+ </div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authformsize" id="authformsize">Directive</a> <a name="AuthFormSize" id="AuthFormSize">AuthFormSize</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL de la page vers laquelle on doit être redirigé si une
-authentification est requise</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormLoginRequiredLocation <var>url</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>La taille maximale en octets du formulaire dont seront
+extraites les informations de connexion</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormSize <var>taille</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>8192</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP
-Apache. L'interprétation des expressions rationnelles est supportée
-depuis la version 2.4.4.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
</table>
- <p>La directive <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
- spécifie l'URL vers laquelle l'utilisateur devra être
- redirigé s'il n'est pas autorisé à accéder à une page. Sa valeur est
- interprétée via l'interpréteur <a href="../expr.html">ap_expr</a>
- avant d'être envoyée au client. Par défaut,
- si un utilisateur n'est pas autorisé à accéder à une page, le code
- de réponse HTTP <code>HTTP_UNAUTHORIZED</code> est renvoyé avec la
- page spécifiée par la directive <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code>. La directive <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
- permet de remplacer cette valeur par défaut.</p>
+ <p>La directive <code class="directive"><a href="#authformsize">AuthFormSize</a></code> spécifie
+ la taille maximale du corps de la requête qui sera utilisée pour
+ trouver le formulaire de connexion.</p>
- <p>Vous pouvez utiliser cette directive si vous voulez présenter une
- page de connexion personnalisée à vos utilisateurs.</p>
+ <p>Si une requête de connexion entrante possède une taille
+ supérieure à cette valeur, elle sera rejetée avec le code de réponse
+ HTTP <code>HTTP_REQUEST_TOO_LARGE</code>.</p>
+
+ <p>Si vous avez ajouté au formulaire des champs décrits dans <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>, <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> et <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, il est recommandé
+ de définir cette directive à une valeur similaire à celle de la
+ directive <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformloginsuccesslocation" id="authformloginsuccesslocation">Directive</a> <a name="AuthFormLoginSuccessLocation" id="AuthFormLoginSuccessLocation">AuthFormLoginSuccessLocation</a></h2>
+<div class="directive-section"><h2><a name="authformusername" id="authformusername">Directive</a> <a name="AuthFormUsername" id="AuthFormUsername">AuthFormUsername</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL de la page vers laquelle on doit être redirigé en cas
-de connexion réussie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormLoginSuccessLocation <var>url</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire qui contient le nom de
+connexion</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormUsername <var>nom du champ</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_username</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP
-Apache. L'interprétation des expressions rationnelles est supportée
-depuis la version 2.4.4.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP Apache</td></tr>
</table>
- <p>La directive <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code>
- spécifie l'URL vers laquelle l'utilisateur doit être
- redirigé en cas de connexion réussie. Sa valeur est
- interprétée via l'interpréteur <a href="../expr.html">ap_expr</a>
- avant d'être envoyée au client. L'effet de cette directive
- peut être annulé si l'on a défini un champ de formulaire contenant
- une autre URL à l'aide de la directive <code class="directive"><a href="#authformlocation">AuthFormLocation</a></code>.</p>
+ <p>La directive <code class="directive"><a href="#authformusername">AuthFormUsername</a></code> permet de
+ spécifier le nom du champ HTML qui, s'il existe, contiendra le nom
+ d'utilisateur qui sera utilisé pour la connexion.</p>
- <p>Vous pouvez utiliser cette directive si vous possédez une URL de
- connexion personnalisée, et si vous n'avez pas intégré la page de
- destination dans le formulaire de connexion.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basicconfig" id="basicconfig">Configuration de base</a></h2>
+ <p>Pour protéger une URL particulière avec le module
+ <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, vous devez déterminer l'endroit où
+ vous allez stocker votre <var>session</var>, ainsi que la méthode
+ d'authentification. Dans cet exemple simple, les informations de
+ connexion sont stockées dans une session à l'aide du module
+ <code class="module"><a href="../mod/mod_session_cookie.html">mod_session_cookie</a></code>, et l'authentification utilise
+ un fichier en s'appuyant sur le module
+ <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. Si l'authentification échoue,
+ l'utilisateur dera redirigé vers la page du formulaire de
+ connexion.</p>
+ <div class="example"><h3>Exemple simple</h3><pre class="prettyprint lang-config">AuthFormProvider file
+AuthUserFile conf/passwd
+AuthType form
+AuthName realm
+AuthFormLoginRequiredLocation http://example.com/login.html
+Session On
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformlogoutlocation" id="authformlogoutlocation">Directive</a> <a name="AuthFormLogoutLocation" id="AuthFormLogoutLocation">AuthFormLogoutLocation</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL vers laquelle un utilisateur devra être redirigé
-après s'être déconnecté</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormLogoutLocation <var>uri</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP
-Apache. L'interprétation des expressions rationnelles est supportée
-depuis la version 2.4.4.</td></tr>
-</table>
- <p>La directive <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code>
- spécifie l'URL de la page du serveur vers laquelle l'utilisateur
- devra être redirigé s'il se déconnecte. Sa valeur est
- interprétée via l'interpréteur <a href="../expr.html">ap_expr</a>
- avant d'être envoyée au client.</p>
- <p>Lorsqu'un accès est tenté sur un URI traité par le gestionnaire
- <code>form-logout-handler</code>, la page spécifiée par cette
- directive sera présentée à l'utilisateur final. Par exemple :</p>
+ <p>L'authentification <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> est activée
+ en affectant la valeur <var>form</var> à la directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code>. Les directives
+ <code class="directive"><a href="#authformprovider">AuthFormProvider</a></code> et
+ <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
+ spécifient que les noms d'utilisateurs et mots de passe seront
+ vérifiés en utilisant le fichier choisi.</p>
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Location /logout>
- SetHandler form-logout-handler
- AuthFormLogoutLocation http://example.com/loggedout.html
- Session on
- #...
+ <p>Les directives <code class="directive"><a href="../mod/mod_session.html#session">Session</a></code>, <code class="directive"><a href="../mod/mod_session_cookie.html#sessioncookiename">SessionCookieName</a></code> et
+ <code class="directive"><a href="../mod/mod_session_crypto.html#sessioncryptopassphrase">SessionCryptoPassphrase</a></code>
+ créent une session chiffrée stockée dans un cookie HTTP au niveau
+ du navigateur. Pour plus d'informations à propos des différentes
+ options de configuration des sessions, reportez-vous à la
+ documentation du module <code class="module"><a href="../mod/mod_session.html">mod_session</a></code>.</p>
+
+ <p>Dans l'exemple simple ci-dessus, une URL a été protégée par
+ <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, mais on doit maintenant fournir
+ à l'utilisateur un moyen d'entrer un nom et un mot de passe. À cet
+ effet, on peut soit écrire une page de connexion indépendante
+ dédiée, soit inclure le formulaire de connexion dans la page
+ courante.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="standalone" id="standalone">Page de connexion dédiée</a></h2>
+
+ <p>Le formulaire de connexion peut être contenu dans une page
+ indépendante, ou être inclus dans la page courante. </p>
+
+ <p>Lorsque la connexion s'effectue à partir d'une page
+ indépendante et si la tentative d'authentification échoue,
+ l'utilisateur doit être redirigé vers un formulaire de connexion,
+ créé à cet effet sur le site web, en utilisant la directive
+ <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>.
+ En général, la page de connexion contiendra un formulaire HTML
+ demandant à l'utilisateur de fournir un nom et un mot de passe.</p>
+
+ <div class="example"><h3>Exemple de formulaire de connexion</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+</form></pre>
+</div>
+
+ <p>La partie où s'effectue la connexion proprement dite est
+ traitée par le gestionnaire <var>form-login-handler</var>.
+ L'action de ce formulaire doit pointer vers ce gestionnaire, ce
+ que l'on configure dans Apache httpd comme suit :</p>
+
+ <div class="example"><h3>Exemple de configuration du gestionnaire de
+ formulaire de connexion</h3><pre class="prettyprint lang-config"><Location /dologin.html>
+ SetHandler form-login-handler
+ AuthFormLoginRequiredLocation http://example.com/login.html
+ AuthFormLoginSuccessLocation http://example.com/success.html
+ AuthFormProvider file
+ AuthUserFile conf/passwd
+ AuthType form
+ AuthName realm
+ Session On
+ SessionCookieName session path=/
+ SessionCryptoPassphrase secret
</Location></pre>
</div>
- <p>Si un utilisateur tente d'accéder à l'URI <var>/logout/</var>, il
- sera déconnecté, et la page <var>/loggedout.html</var> lui sera
- présentée. Assurez-vous que la page <var>loggedout.html</var> n'est
- pas protégée par mot de passe, car dans le cas contraire, elle ne
- serait pas affichée.</p>
+ <p>L'URL spécifiée par la directive
+ <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
+ référencera en général une page expliquant à l'utilisateur que sa
+ tentative de connexion a échoué, et qu'il doit la renouveler. La
+ directive <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code>
+ spécifie l'URL vers laquelle l'utilisateur doit être redirigé s'il
+ s'est authentifié avec succès.</p>
+
+ <p>Alternativement, l'URL vers laquelle doit être redirigé
+ l'utilisateur s'il s'est authentifié avec succès peut être
+ intégrée dans le formulaire de connexion, comme dans l'exemple
+ ci-dessous. Il en découle que le même gestionnaire
+ <var>form-login-handler</var> pourra être utilisé pour différentes
+ zones du site web.</p>
+
+ <div class="example"><h3>Exemple de formulaire d'authentification multizone</h3><pre class="prettyprint lang-html"><form method="POST" action="/dologin.html">
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+ <input type="hidden" name="httpd_location" value="http://example.com/success.html" />
+</form></pre>
+</div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="inline" id="inline">Connexion à la volée</a></h2>
+
+ <div class="warning"><h3>Avertissement</h3>
+ <p>Il existe un risque, dans certaines circonstances, que le
+ formulaire de connexion configuré pour une connexion à la volée
+ soit soumis plusieurs fois, révélant de ce fait les paramètres
+ de connexion à l'application sous-jacente. L'administrateur doit
+ s'assurer que cette dernière est correctement sécurisée afin
+ d'éviter les éventuels abus. En cas de doute, utilisez une page
+ de connexion indépendante dédiée.</p>
+ </div>
+
+ <p>Comme alternative à la page de connexion dédiée pour un site
+ web, il est possible de configurer <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>
+ pour authentifier les utilisateurs à la volée, sans les rediriger
+ vers une autre page, ce qui permet de conserver l'état de la page
+ courante au cours de la tentative de connexion. Ceci peut s'avérer
+ utile dans le cas d'une session limitée dans le temps, si le délai
+ de la session a expiré pendant la requête de l'utilisateur. Ce
+ dernier peut alors se réauthentifier à la même place, et
+ poursuivre son activité à partir du point où il en était resté.</p>
+
+ <p>Si un utilisateur non authentifié tente d'accéder à une page
+ protégée par <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>, et si ce dernier
+ n'est pas configuré avec une directive <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>,
+ un code de statut <var>HTTP_UNAUTHORIZED</var> est renvoyé vers le
+ navigateur, indiquant à l'utilisateur qu'il n'est pas autorisé à
+ accéder à cette page.</p>
+ <p>Pour configurer l'authentification à la volée, l'administrateur
+ remplace le message d'erreur renvoyé par le code de statut
+ <var>HTTP_UNAUTHORIZED</var> par un message d'erreur personnalisé
+ contenant le formulaire de connexion comme suit :</p>
+ <div class="example"><h3>Exemple simple d'authentification à la volée</h3><pre class="prettyprint lang-config">AuthFormProvider file
+ErrorDocument 401 /login.shtml
+AuthUserFile conf/passwd
+AuthType form
+AuthName realm
+AuthFormLoginRequiredLocation http://example.com/login.html
+Session On
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformmethod" id="authformmethod">Directive</a> <a name="AuthFormMethod" id="AuthFormMethod">AuthFormMethod</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire contenant la méthode de la
-requête à effectuer en cas de connexion réussie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormMethod <var>nom du champ</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_method</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
-</table>
- <p>La directive <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>
- spécifie le nom du champ HTML qui, s'il existe, contiendra le type
- MIME de la requête à effectuer en cas de connexion réussie.</p>
- <p>En ajoutant au formulaire les champs décrits dans <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>, <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> et <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, un site web sera en
- mesure de relancer une requête qui a été éventuellement interrompue
- par l'écran de connexion, ou par l'expiration d'un délai de
- session.</p>
+ <p>La page du message d'erreur doit contenir un formulaire de
+ connexion dont la propriété action est vide, comme dans l'exemple
+ ci-dessous. Ceci a pour effet de soumettre le formulaire à l'URL
+ protégée originale, cette dernière n'ayant pas besoin d'être
+ connue de la page en cours.</p>
+ <div class="example"><h3>Exemple de formulaire de connexion à la volée</h3><pre class="prettyprint lang-html"><form method="POST" <strong>action=""</strong>>
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+</form></pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformmimetype" id="authformmimetype">Directive</a> <a name="AuthFormMimetype" id="AuthFormMimetype">AuthFormMimetype</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire contenant le type MIME du
-corps de la requête à effectuer en cas de connexion
-réussie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormMimetype <var>nom du champ</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_mimetype</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
-</table>
- <p>La directive <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code>
- spécifie le nom du champ HTML qui, s'il existe, contiendra le type
- MIME de la requête à effectuer en cas de connexion réussie.</p>
- <p>En ajoutant au formulaire les champs décrits dans <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>, <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> et <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, un site web sera en
- mesure de relancer une requête qui a été éventuellement interrompue
- par l'écran de connexion, ou par l'expiration d'un délai de
- session.</p>
+ <p>Lorsque l'utilisateur final a entré ses informations de
+ connexion, le formulaire effectue une requête HTTP POST pour l'URL
+ originale protégée par mot de passe.
+ <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> va alors intercepter cette requête
+ POST, et dans le cas où des champs HTML Utilisateur et Mot de
+ passe corrects sont présents, l'utilisateur sera connecté, et
+ l'URL originale protégée par mot de passe lui sera retournée en
+ tant que requête GET.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformpassword" id="authformpassword">Directive</a> <a name="AuthFormPassword" id="AuthFormPassword">AuthFormPassword</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire qui contient le mot de passe
-de connexion</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormPassword <var>nom du champ</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_password</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
-</table>
- <p>La directive <code class="directive"><a href="#authformpassword">AuthFormPassword</a></code> permet de
- spécifier le nom du champ HTML qui, s'il existe, contiendra le mot
- de passe qui sera utilisé pour la connexion.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="inlinepreservebody" id="inlinepreservebody">Connexion à la volée avec
+ conservation du contenu</a></h2>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformprovider" id="authformprovider">Directive</a> <a name="AuthFormProvider" id="AuthFormProvider">AuthFormProvider</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le(s) fournisseur(s) d'authentification pour la
-zone concernée</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormProvider <var>nom fournisseur</var>
-[<var>nom fournisseur</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthFormProvider file</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-</table>
- <p>La directive <code class="directive">AuthFormProvider</code> permet de
- définir quel fournisseur sera utilisé pour authentifier les
- utilisateurs pour la zone concernée. Le fournisseur par défaut
- <code>file</code> est implémenté par le module
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. Assurez-vous que le fournisseur
- choisi soit bien présent dans le serveur.</p>
+ <p>Il existe une limite à la technique de connexion à la volée
+ décrite ci-dessus ; si un formulaire HTML POST entraîne une
+ demande d'authentification ou de réauthentification, le contenu du
+ formulaire original envoyé par le navigateur sera perdu. Cela peut
+ s'avérer plus ou moins gênant pour l'utilisateur final selon la
+ fonction du site web.</p>
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Location /secure>
- AuthType form
- AuthName "private area"
- AuthFormProvider dbm
- AuthDBMType SDBM
- AuthDBMUserFile /www/etc/dbmpasswd
- Require valid-user
- #...
-</Location></pre>
-</div>
+ <p>Comme solution à ce problème, <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>
+ permet d'intégrer la méthode et le contenu de la requête originale
+ dans le formulaire de connexion. Si l'authentification réussit,
+ Apache httpd pourra refaire une tentative avec la méthode et le contenu
+ originaux, tout en conservant l'état de la requête originale.</p>
- <p>Les différents fournisseurs sont implémentés par les modules
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>, <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>,
- <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> et
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>.</p>
+ <p>Pour mettre en oeuvre la conservation du contenu, vous devez
+ ajouter trois champs supplémentaires au formulaire de connexion
+ comme dans l'exemple suivant :</p>
+ <div class="example"><h3>Exemple de formulaire avec conservation du
+ contenu</h3><pre class="prettyprint lang-html"><form method="POST" action="">
+ Username: <input type="text" name="httpd_username" value="" />
+ Password: <input type="password" name="httpd_password" value="" />
+ <input type="submit" name="login" value="Login" />
+ <br /> <strong><input type="hidden" name="httpd_method" value="POST" />
+ <input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" />
+ <input type="hidden" name="httpd_body" value="name1=value1&name2=value2" /></strong><br />
+</form></pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformsitepassphrase" id="authformsitepassphrase">Directive</a> <a name="AuthFormSitePassphrase" id="AuthFormSitePassphrase">AuthFormSitePassphrase</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Court-circuite l'authentification pour les sites à fort
-trafic</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormSitePassphrase <var>secret</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
-</table>
- <p>La directive <code class="directive"><a href="#authformsitepassphrase">AuthFormSitePassphrase</a></code>
- spécifie un mot de passe qui, s'il est présent dans la session
- utilisateur, indique à Apache httpd de court-circuiter l'authentification
- pour l'URL considérée. On peut l'utiliser dans le cas de sites web à
- fort trafic afin de réduire la charge induite sur l'infrastructure
- d'authentification.</p>
- <p>On peut insérer le mot de passe dans une session utilisateur en
- ajoutant cette directive à la configuration concernant le
- gestionnaire <var>form-login-handler</var>. Le gestionnaire
- <var>form-login-handler</var>, quant à lui, effectuera toujours les
- vérifications d'authentification, qu'un mot de passe soit spécifié
- ou non.</p>
+ <p>La manière dont la méthode, le type MIME et le contenu de la
+ requête originale seront intégrés dans le formulaire de connexion
+ vont dépendre de la plate-forme et de la technologie utilisées au
+ sein du site web.
+ </p>
- <div class="warning"><h3>Avertissement</h3>
- <p>Si la session est présentée à l'utilisateur à l'aide du module
- <code class="module"><a href="../mod/mod_session_cookie.html">mod_session_cookie</a></code>, et si la session n'est pas
- protégée par le module <code class="module"><a href="../mod/mod_session_crypto.html">mod_session_crypto</a></code>, le mot
- de passe peut faire l'objet d'une attaque de type dictionnaire.
- Quelle que soit la configuration de la session, assurez-vous que
- cette directive n'est pas utilisée dans un espace d'URLs contenant
- des données privées, ou à partir desquelles des transactions
- sensibles pourraient être menées. En tout état de cause, vous
- devez être conscient des risques encourus avant de l'utiliser.</p>
- </div>
+ <p>Une option consiste à utiliser le module
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> en association avec la directive
+ <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code>, ainsi
+ qu'un script CGI adapté pour intégrer les variables dans le
+ formulaire.</p>
+ <p>Une autre option consiste à présenter le formulaire de
+ connexion en utilisant un script CGI ou une autre technologie
+ dynamique.</p>
+ <div class="example"><h3>Exemple avec script CGI</h3><pre class="prettyprint lang-config"> AuthFormProvider file
+ ErrorDocument 401 /cgi-bin/login.cgi
+ ...</pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformsize" id="authformsize">Directive</a> <a name="AuthFormSize" id="AuthFormSize">AuthFormSize</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>La taille maximale en octets du formulaire dont seront
-extraites les informations de connexion</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormSize <var>taille</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>8192</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.0 du serveur HTTP Apache</td></tr>
-</table>
- <p>La directive <code class="directive"><a href="#authformsize">AuthFormSize</a></code> spécifie
- la taille maximale du corps de la requête qui sera utilisée pour
- trouver le formulaire de connexion.</p>
- <p>Si une requête de connexion entrante possède une taille
- supérieure à cette valeur, elle sera rejetée avec le code de réponse
- HTTP <code>HTTP_REQUEST_TOO_LARGE</code>.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="loggingout" id="loggingout">Déconnexion</a></h2>
- <p>Si vous avez ajouté au formulaire des champs décrits dans <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>, <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> et <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, il est recommandé
- de définir cette directive à une valeur similaire à celle de la
- directive <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code>.</p>
+ <p>Pour permettre à un utilisateur de se déconnecter d'une session
+ particulière, vous devez configurer une page pour qu'elle soit
+ traitée par le gestionnaire <var>form-logout-handler</var>. Tout
+ accès à cette URL va entraîner la suppression de l'Utilisateur et
+ du Mot de passe de la session courante, ce qui aura pour effet de
+ déconnecter l'utilisateur.</p>
+ <p>Vous pouvez spécifier une URL vers laquelle le navigateur sera
+ redirigé en cas de déconnection réussie, en définissant la
+ directive <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code>. Cette
+ URL devra expliquer à l'utilisateur qu'il a été déconnecté, et lui
+ donner la possibilité de se connecter à nouveau.</p>
+ <div class="example"><h3>Exemple simple de configuration de la
+ déconnexion</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
+AuthName realm
+AuthFormLogoutLocation http://example.com/loggedout.html
+Session On
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authformusername" id="authformusername">Directive</a> <a name="AuthFormUsername" id="AuthFormUsername">AuthFormUsername</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nom du champ de formulaire qui contient le nom de
-connexion</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthFormUsername <var>nom du champ</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>httpd_username</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP Apache</td></tr>
-</table>
- <p>La directive <code class="directive"><a href="#authformusername">AuthFormUsername</a></code> permet de
- spécifier le nom du champ HTML qui, s'il existe, contiendra le nom
- d'utilisateur qui sera utilisé pour la connexion.</p>
+ <p>Notez que la déconnexion d'un utilisateur ne supprime pas la
+ session ; elle supprime seulement l'utilisateur et le mot de passe
+ de la session. Si la session qui en résulte est vide, elle sera
+ probablement supprimée, mais ce n'est pas garanti. Si vous voulez
+ être sûr que la session sera supprimée, affectez une valeur faible
+ à la directive <code class="directive"><a href="../mod/mod_session.html#sessionmaxage">SessionMaxAge</a></code>, par exemple 1
+ (affecter à cette directive la valeur zéro signifie une session
+ sans limite d'âge).
+ </p>
+
+ <div class="example"><h3>Exemple simple avec durée de validité de session
+ limitée</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
+AuthFormLogoutLocation http://example.com/loggedout.html
+Session On
+SessionMaxAge 1
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
</div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="urlencoding" id="urlencoding">Noms d'utilisateurs et mots de
+ passe</a></h2>
+ <p>Notez que la soumission d'un formulaire implique l'encodage URL
+ (URLEncoding) des données du formulaire, ici le nom d'utilisateur et
+ le mot de passe. Vous devez donc choisir des noms d'utilisateurs et
+ mots de passe qui ne contiennent pas de caractères susceptibles
+ d'être encodés URL lors de la soumission du formulaire, sous peine
+ d'obtenir des résultats inattendus.</p>
+ </div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_auth_form.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#example">Example</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Example</a></h2>
- <p>The example below is combined with "normal" htpasswd-file based
- authentication and allows users in additionally as 'guests' with the
- following properties:</p>
-
- <ul>
- <li>It insists that the user enters a userID.
- (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
-
- <li>It insists that the user enters a password.
- (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
-
- <li>The password entered must be a valid email address, <em>i.e.</em>
- contain at least one '@' and a '.'.
- (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
-
- <li>The userID must be one of <code>anonymous guest www test
- welcome</code> and comparison is <strong>not</strong> case
- sensitive. (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
-
- <li>And the Email addresses entered in the passwd field are
- logged to the error log file.
- (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
- </ul>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config"><Directory "/var/www/html/private">
- AuthName "Use 'anonymous' & Email address for guest entry"
- AuthType Basic
- AuthBasicProvider file anon
- AuthUserFile "/path/to/your/.htpasswd"
-
- Anonymous_NoUserID off
- Anonymous_MustGiveEmail on
- Anonymous_VerifyEmail on
- Anonymous_LogEmail on
- Anonymous anonymous guest www test welcome
-
- Require valid-user
-</Directory></pre>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Anonymous" id="Anonymous">Anonymous</a> <a name="anonymous" id="anonymous">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies userIDs that are allowed access without
at least one '@' and a '.' to encourage users to enter valid email
addresses (see the above <code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>).</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="example" id="example">Example</a></h2>
+ <p>The example below is combined with "normal" htpasswd-file based
+ authentication and allows users in additionally as 'guests' with the
+ following properties:</p>
+
+ <ul>
+ <li>It insists that the user enters a userID.
+ (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
+
+ <li>It insists that the user enters a password.
+ (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
+
+ <li>The password entered must be a valid email address, <em>i.e.</em>
+ contain at least one '@' and a '.'.
+ (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
+
+ <li>The userID must be one of <code>anonymous guest www test
+ welcome</code> and comparison is <strong>not</strong> case
+ sensitive. (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
+
+ <li>And the Email addresses entered in the passwd field are
+ logged to the error log file.
+ (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
+ </ul>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config"><Directory "/var/www/html/private">
+ AuthName "Use 'anonymous' & Email address for guest entry"
+ AuthType Basic
+ AuthBasicProvider file anon
+ AuthUserFile "/path/to/your/.htpasswd"
+
+ Anonymous_NoUserID off
+ Anonymous_MustGiveEmail on
+ Anonymous_VerifyEmail on
+ Anonymous_LogEmail on
+ Anonymous anonymous guest www test welcome
+
+ Require valid-user
+</Directory></pre>
+</div>
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#example">Exemple</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Exemple</a></h2>
- <p>L'exemple ci-dessous présente un exemple de combinaison avec
- l'authentification à base de fichier htpasswd "normale", et permet
- la connexion d'utilisateurs en tant qu'invités avec les propriétés
- suivantes :</p>
-
- <ul>
- <li>Il incite l'utilisateur à fournir un identifiant.
- (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
-
- <li>Il incite l'utilisateur à fournir un mot de passe.
- (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
-
- <li>Le mot de passe fourni doit être une adresse email valide,
- c'est à dire contenant au moins un '@' et un '.'.
- (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
-
- <li>Les valeurs possibles pour l'identifiant utilisateur sont
- <code>anonymous, guest, www, test ou welcome</code>, et la
- vérification n'est <strong>pas</strong> sensible à la casse.
- (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
-
- <li>Les adresses email entrées dans le champ passwd sont
- enregistrées dans le fichier journal des erreurs.
- (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
- </ul>
-
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Directory /var/www/html/private>
- AuthName "Use 'anonymous' & Email address for guest entry"
- AuthType Basic
- AuthBasicProvider file anon
- AuthUserFile /path/to/your/.htpasswd
-
- Anonymous_NoUserID off
- Anonymous_MustGiveEmail on
- Anonymous_VerifyEmail on
- Anonymous_LogEmail on
- Anonymous anonymous guest www test welcome
-
- Require valid-user
-</Directory></pre>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="anonymous" id="anonymous">Directive</a> <a name="Anonymous" id="Anonymous">Anonymous</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit la liste des identifiants utilisateur autorisés à
'.' afin d'inciter les utilisateurs à fournir des adresses email
valides (voir ci-dessus la directive <code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>).</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="example" id="example">Exemple</a></h2>
+ <p>L'exemple ci-dessous présente un exemple de combinaison avec
+ l'authentification à base de fichier htpasswd "normale", et permet
+ la connexion d'utilisateurs en tant qu'invités avec les propriétés
+ suivantes :</p>
+
+ <ul>
+ <li>Il incite l'utilisateur à fournir un identifiant.
+ (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
+
+ <li>Il incite l'utilisateur à fournir un mot de passe.
+ (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
+
+ <li>Le mot de passe fourni doit être une adresse email valide,
+ c'est à dire contenant au moins un '@' et un '.'.
+ (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
+
+ <li>Les valeurs possibles pour l'identifiant utilisateur sont
+ <code>anonymous, guest, www, test ou welcome</code>, et la
+ vérification n'est <strong>pas</strong> sensible à la casse.
+ (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
+
+ <li>Les adresses email entrées dans le champ passwd sont
+ enregistrées dans le fichier journal des erreurs.
+ (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
+ </ul>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Directory /var/www/html/private>
+ AuthName "Use 'anonymous' & Email address for guest entry"
+ AuthType Basic
+ AuthBasicProvider file anon
+ AuthUserFile /path/to/your/.htpasswd
+
+ Anonymous_NoUserID off
+ Anonymous_MustGiveEmail on
+ Anonymous_VerifyEmail on
+ Anonymous_LogEmail on
+ Anonymous anonymous guest www test welcome
+
+ Require valid-user
+</Directory></pre>
+</div>
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#example">例</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">例</a></h2>
- <p>以下の例は「普通」の htpasswd ファイルに基づいた認証と組み合わされて
- おり、以下の要件を見たすユーザを「ゲスト」として許可します:</p>
-
- <ul>
- <li>ユーザは userID を入力しなければなりません。
- (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
-
- <li>ユーザはパスワードを入力しなければなりません。
- (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
-
- <li>入力されたパスワードは有効な電子メールアドレスでなければ
- なりません。<em>すなわち</em>、少くとも一つの '@' と '.' が
- 含まれている必要があります。
- (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
-
- <li>userID は <code>anonymous guest www test
- welcome</code> のどれかでなければなりません。
- ユーザ名の比較は大文字小文字を区別<strong>しません。</strong></li>
-
- <li>パスワード欄に入力された電子メールアドレスはエラーログファイルに
- ロギングされます。
- (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
- </ul>
-
- <div class="example"><h3>例</h3><pre class="prettyprint lang-config"><Directory /var/www/html/private>
- AuthName "Use 'anonymous' & Email address for guest entry"
- AuthType Basic
- AuthBasicProvider file anon
- AuthUserFile /path/to/your/.htpasswd
-
- Anonymous_NoUserID off
- Anonymous_MustGiveEmail on
- Anonymous_VerifyEmail on
- Anonymous_LogEmail on
- Anonymous anonymous guest www test welcome
-
- Require valid-user
-</Directory></pre>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Anonymous" id="Anonymous">Anonymous</a> <a name="anonymous" id="anonymous">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>パスワードの検査無しでアクセスを許可する userID を指定する
少なくとも一つの '@' と '.' を含んでいるかどうかを調べます
(上の <code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code> 参照)。</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="example" id="example">例</a></h2>
+ <p>以下の例は「普通」の htpasswd ファイルに基づいた認証と組み合わされて
+ おり、以下の要件を見たすユーザを「ゲスト」として許可します:</p>
+
+ <ul>
+ <li>ユーザは userID を入力しなければなりません。
+ (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
+
+ <li>ユーザはパスワードを入力しなければなりません。
+ (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
+
+ <li>入力されたパスワードは有効な電子メールアドレスでなければ
+ なりません。<em>すなわち</em>、少くとも一つの '@' と '.' が
+ 含まれている必要があります。
+ (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
+
+ <li>userID は <code>anonymous guest www test
+ welcome</code> のどれかでなければなりません。
+ ユーザ名の比較は大文字小文字を区別<strong>しません。</strong></li>
+
+ <li>パスワード欄に入力された電子メールアドレスはエラーログファイルに
+ ロギングされます。
+ (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
+ </ul>
+
+ <div class="example"><h3>例</h3><pre class="prettyprint lang-config"><Directory /var/www/html/private>
+ AuthName "Use 'anonymous' & Email address for guest entry"
+ AuthType Basic
+ AuthBasicProvider file anon
+ AuthUserFile /path/to/your/.htpasswd
+
+ Anonymous_NoUserID off
+ Anonymous_MustGiveEmail on
+ Anonymous_VerifyEmail on
+ Anonymous_LogEmail on
+ Anonymous anonymous guest www test welcome
+
+ Require valid-user
+</Directory></pre>
+</div>
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#example">¿¹Á¦</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">¿¹Á¦</a></h2>
- <p>´ÙÀ½ ¿¹´Â "ÀϹÝÀûÀÎ" htpasswd-ÆÄÀϱâ¹Ý ÀÎÁõ¿¡ Ãß°¡·Î
- »ç¿ëÀÚ°¡ ´ÙÀ½ Á¶°ÇÀ» ¸¸Á·ÇÑ´Ù¸é '¼Õ´Ô(guest)'À¸·Î Á¢±ÙÇÒ
- ¼ö ÀÖµµ·Ï ÇÑ´Ù:</p>
-
- <ul>
- <li>»ç¿ëÀÚ´Â »ç¿ëÀÚ ¾ÆÀ̵𸦠ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
-
- <li>»ç¿ëÀÚ´Â ¾ÏÈ£¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
-
- <li>¾ÏÈ£·Î À¯È¿ÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. <em>¿¹¸¦
- µé¾î</em> ÃÖ¼ÒÇÑ '@'¿Í '.' ÇÑ°³¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
-
- <li>»ç¿ëÀÚ ¾ÆÀ̵ð´Â <code>anonymous guest www test
- welcome</code> Áß ÇϳªÀ̸ç, ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö
- <strong>¾Ê´Â´Ù</strong>. (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
-
- <li>±×¸®°í ¾ÏÈ£·Î ÀÔ·ÂÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ¿À·ù·Î±×ÆÄÀÏ¿¡
- ±â·ÏÇÑ´Ù. (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
- </ul>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- <Directory /foo>
- <span class="indent">
- AuthName "¼Õ´ÔÀ¸·Î ¹æ¹®ÇÏ·Á¸é 'anonymous'¿Í ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó"<br />
- AuthType Basic<br />
- AuthBasicProvider file anon<br />
- AuthUserFile /path/to/your/.htpasswd<br />
- <br />
- Anonymous_NoUserID off<br />
- Anonymous_MustGiveEmail on<br />
- Anonymous_VerifyEmail on<br />
- Anonymous_LogEmail on<br />
- Anonymous anonymous guest www test welcome<br />
- <br />
- Order Deny,Allow<br />
- Allow from all<br />
- <br />
- Require valid-user<br />
- </span>
- </Directory>
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Anonymous" id="Anonymous">Anonymous</a> <a name="anonymous" id="anonymous">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÏÈ£°Ë»ç¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÒ »ç¿ëÀÚ ¾ÆÀ̵ðµéÀ»
Æ÷ÇÔÇÏ´ÂÁö °Ë»çÇÑ´Ù (À§ÀÇ <code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code> Âü°í).</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="example" id="example">¿¹Á¦</a></h2>
+ <p>´ÙÀ½ ¿¹´Â "ÀϹÝÀûÀÎ" htpasswd-ÆÄÀϱâ¹Ý ÀÎÁõ¿¡ Ãß°¡·Î
+ »ç¿ëÀÚ°¡ ´ÙÀ½ Á¶°ÇÀ» ¸¸Á·ÇÑ´Ù¸é '¼Õ´Ô(guest)'À¸·Î Á¢±ÙÇÒ
+ ¼ö ÀÖµµ·Ï ÇÑ´Ù:</p>
+
+ <ul>
+ <li>»ç¿ëÀÚ´Â »ç¿ëÀÚ ¾ÆÀ̵𸦠ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
+
+ <li>»ç¿ëÀÚ´Â ¾ÏÈ£¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
+
+ <li>¾ÏÈ£·Î À¯È¿ÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. <em>¿¹¸¦
+ µé¾î</em> ÃÖ¼ÒÇÑ '@'¿Í '.' ÇÑ°³¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
+
+ <li>»ç¿ëÀÚ ¾ÆÀ̵ð´Â <code>anonymous guest www test
+ welcome</code> Áß ÇϳªÀ̸ç, ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö
+ <strong>¾Ê´Â´Ù</strong>. (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
+
+ <li>±×¸®°í ¾ÏÈ£·Î ÀÔ·ÂÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ¿À·ù·Î±×ÆÄÀÏ¿¡
+ ±â·ÏÇÑ´Ù. (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
+ </ul>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ <Directory /foo>
+ <span class="indent">
+ AuthName "¼Õ´ÔÀ¸·Î ¹æ¹®ÇÏ·Á¸é 'anonymous'¿Í ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó"<br />
+ AuthType Basic<br />
+ AuthBasicProvider file anon<br />
+ AuthUserFile /path/to/your/.htpasswd<br />
+ <br />
+ Anonymous_NoUserID off<br />
+ Anonymous_MustGiveEmail on<br />
+ Anonymous_VerifyEmail on<br />
+ Anonymous_LogEmail on<br />
+ Anonymous anonymous guest www test welcome<br />
+ <br />
+ Order Deny,Allow<br />
+ Allow from all<br />
+ <br />
+ Require valid-user<br />
+ </span>
+ </Directory>
+ </code></p></div>
+</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_anon.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#authnalias">Creating Authentication Provider Aliases</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="authnalias" id="authnalias">Creating Authentication Provider Aliases</a></h2>
-
- <p>Extended authentication providers can be created
- within the configuration file and assigned an alias name. The alias
- providers can then be referenced through the directives
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> or
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> in
- the same way as a base authentication provider. Besides the ability
- to create and alias an extended provider, it also allows the same
- extended authentication provider to be reference by multiple
- locations.</p>
-
- <h3><a name="example" id="example">Examples</a></h3>
-
- <p>This example checks for passwords in two different text
- files.</p>
-
- <div class="example"><h3>Checking multiple text password files</h3><pre class="prettyprint lang-config"># Check here first
-<AuthnProviderAlias file file1>
- AuthUserFile "/www/conf/passwords1"
-</AuthnProviderAlias>
-
-# Then check here
-<AuthnProviderAlias file file2>
- AuthUserFile "/www/conf/passwords2"
-</AuthnProviderAlias>
-
-<Directory "/var/web/pages/secure">
- AuthBasicProvider file1 file2
-
- AuthType Basic
- AuthName "Protected Area"
- Require valid-user
-</Directory></pre>
-</div>
-
- <p>The example below creates two different ldap authentication
- provider aliases based on the ldap provider. This allows
- a single authenticated location to be serviced by multiple ldap
- hosts:</p>
-
- <div class="example"><h3>Checking multiple LDAP servers</h3><pre class="prettyprint lang-config"><AuthnProviderAlias ldap ldap-alias1>
- AuthLDAPBindDN "cn=youruser,o=ctx"
- AuthLDAPBindPassword yourpassword
- AuthLDAPURL "ldap://ldap.host/o=ctx"
-</AuthnProviderAlias>
-<AuthnProviderAlias ldap ldap-other-alias>
- AuthLDAPBindDN "cn=yourotheruser,o=dev"
- AuthLDAPBindPassword yourotherpassword
- AuthLDAPURL "ldap://other.ldap.host/o=dev?cn"
-</AuthnProviderAlias>
-
-Alias "/secure" "/webpages/secure"
-<Directory "/webpages/secure">
- Order deny,allow
- Allow from all
-
- AuthBasicProvider ldap-other-alias ldap-alias1
-
- AuthType Basic
- AuthName "LDAP Protected Place"
- Require valid-user
- # Note that Require ldap-* would not work here, since the
- # AuthnProviderAlias does not provide the config to authorization providers
- # that are implemented in the same module as the authentication provider.
-</Directory></pre>
-</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthName" id="AuthName">AuthName</a> <a name="authname" id="authname">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Authorization realm for use in HTTP
<li><a href="../howto/auth.html">Authentication, Authorization,
and Access Control</a></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="authnalias" id="authnalias">Creating Authentication Provider Aliases</a></h2>
+
+ <p>Extended authentication providers can be created
+ within the configuration file and assigned an alias name. The alias
+ providers can then be referenced through the directives
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> or
+ <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> in
+ the same way as a base authentication provider. Besides the ability
+ to create and alias an extended provider, it also allows the same
+ extended authentication provider to be reference by multiple
+ locations.</p>
+
+ <h3><a name="example" id="example">Examples</a></h3>
+
+ <p>This example checks for passwords in two different text
+ files.</p>
+
+ <div class="example"><h3>Checking multiple text password files</h3><pre class="prettyprint lang-config"># Check here first
+<AuthnProviderAlias file file1>
+ AuthUserFile "/www/conf/passwords1"
+</AuthnProviderAlias>
+
+# Then check here
+<AuthnProviderAlias file file2>
+ AuthUserFile "/www/conf/passwords2"
+</AuthnProviderAlias>
+
+<Directory "/var/web/pages/secure">
+ AuthBasicProvider file1 file2
+
+ AuthType Basic
+ AuthName "Protected Area"
+ Require valid-user
+</Directory></pre>
+</div>
+
+ <p>The example below creates two different ldap authentication
+ provider aliases based on the ldap provider. This allows
+ a single authenticated location to be serviced by multiple ldap
+ hosts:</p>
+
+ <div class="example"><h3>Checking multiple LDAP servers</h3><pre class="prettyprint lang-config"><AuthnProviderAlias ldap ldap-alias1>
+ AuthLDAPBindDN "cn=youruser,o=ctx"
+ AuthLDAPBindPassword yourpassword
+ AuthLDAPURL "ldap://ldap.host/o=ctx"
+</AuthnProviderAlias>
+<AuthnProviderAlias ldap ldap-other-alias>
+ AuthLDAPBindDN "cn=yourotheruser,o=dev"
+ AuthLDAPBindPassword yourotherpassword
+ AuthLDAPURL "ldap://other.ldap.host/o=dev?cn"
+</AuthnProviderAlias>
+
+Alias "/secure" "/webpages/secure"
+<Directory "/webpages/secure">
+ Order deny,allow
+ Allow from all
+
+ AuthBasicProvider ldap-other-alias ldap-alias1
+
+ AuthType Basic
+ AuthName "LDAP Protected Place"
+ Require valid-user
+ # Note that Require ldap-* would not work here, since the
+ # AuthnProviderAlias does not provide the config to authorization providers
+ # that are implemented in the same module as the authentication provider.
+</Directory></pre>
+</div>
+
+
</div>
</div>
<div class="bottomlang">
d'authentification</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="authnalias" id="authnalias">Création d'alias de fournisseurs
-d'authentification</a></h2>
-
- <p>Il est possible de créer des fournisseurs d'authentification
- étendus dans le fichier de configuration et de leur assigner un
- alias. Le fournisseur ainsi nommé peut alors être référencé à l'aide
- des directives <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ou <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> tout comme
- un fournisseur d'authentification de base. Outre la possibilité de
- créer et attribuer un alias à un fournisseur étendu, le même
- fournisseur d'authentification peut aussi être référencé par
- plusieurs sections relatives à une zone du site web.</p>
-
- <h3><a name="example" id="example">Exemples</a></h3>
-
- <p>Cet exemple vérifie les mots de passe dans deux fichiers
- textes différents.</p>
-
- <div class="example"><h3>Vérification dans plusieurs fichiers de mots de
- passe au format texte</h3><pre class="prettyprint lang-config"># Première vérification
-<AuthnProviderAlias file file1>
- AuthUserFile /www/conf/passwords1
-</AuthnProviderAlias>
-
-# Vérification suivante
-<AuthnProviderAlias file file2>
- AuthUserFile /www/conf/passwords2
-</AuthnProviderAlias>
-
-<Directory /var/web/pages/secure>
- AuthBasicProvider file1 file2
-
- AuthType Basic
- AuthName "Protected Area"
- Require valid-user
-</Directory></pre>
-</div>
-
-
-
- <p>Dans l'exemple ci-dessous, deux fournisseurs
- d'authentification ldap sont créés à partir du fournisseur ldap
- de base, et se voient attribuer un alias. L'authentification
- d'une même zone peut alors être traitée par plusieurs serveurs
- ldap :</p>
-
- <div class="example"><h3>Vérification auprès de plusieurs serveurs
- LDAP</h3><pre class="prettyprint lang-config"><AuthnProviderAlias ldap ldap-alias1>
- AuthLDAPBindDN cn=youruser,o=ctx
- AuthLDAPBindPassword yourpassword
- AuthLDAPURL ldap://ldap.host/o=ctx
- </AuthnProviderAlias>
- <AuthnProviderAlias ldap ldap-other-alias>
- AuthLDAPBindDN cn=yourotheruser,o=dev
- AuthLDAPBindPassword yourotherpassword
- AuthLDAPURL ldap://other.ldap.host/o=dev?cn
-</AuthnProviderAlias>
-
-Alias /secure /webpages/secure
-<Directory /webpages/secure>
- Order deny,allow
- Allow from all
-
- AuthBasicProvider ldap-other-alias ldap-alias1
-
- AuthType Basic
- AuthName LDAP_Protected Place
- Require valid-user
- # Notez que Require ldap-* ne fonctionnerait pas ici, car
- # AuthnProviderAlias ne fournit pas de configuration pour les
- # fournisseurs d'autorisation implémentés dans le même module que le
- # fournisseur d'authentification.
-</Directory></pre>
-</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authname" id="authname">Directive</a> <a name="AuthName" id="AuthName">AuthName</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'identifiant de l'autorisation à utiliser avec
<li><a href="../howto/auth.html">Authentification, autorisation et contrôle
d'accès</a></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="authnalias" id="authnalias">Création d'alias de fournisseurs
+d'authentification</a></h2>
+
+ <p>Il est possible de créer des fournisseurs d'authentification
+ étendus dans le fichier de configuration et de leur assigner un
+ alias. Le fournisseur ainsi nommé peut alors être référencé à l'aide
+ des directives <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ou <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> tout comme
+ un fournisseur d'authentification de base. Outre la possibilité de
+ créer et attribuer un alias à un fournisseur étendu, le même
+ fournisseur d'authentification peut aussi être référencé par
+ plusieurs sections relatives à une zone du site web.</p>
+
+ <h3><a name="example" id="example">Exemples</a></h3>
+
+ <p>Cet exemple vérifie les mots de passe dans deux fichiers
+ textes différents.</p>
+
+ <div class="example"><h3>Vérification dans plusieurs fichiers de mots de
+ passe au format texte</h3><pre class="prettyprint lang-config"># Première vérification
+<AuthnProviderAlias file file1>
+ AuthUserFile /www/conf/passwords1
+</AuthnProviderAlias>
+
+# Vérification suivante
+<AuthnProviderAlias file file2>
+ AuthUserFile /www/conf/passwords2
+</AuthnProviderAlias>
+
+<Directory /var/web/pages/secure>
+ AuthBasicProvider file1 file2
+
+ AuthType Basic
+ AuthName "Protected Area"
+ Require valid-user
+</Directory></pre>
+</div>
+
+
+
+ <p>Dans l'exemple ci-dessous, deux fournisseurs
+ d'authentification ldap sont créés à partir du fournisseur ldap
+ de base, et se voient attribuer un alias. L'authentification
+ d'une même zone peut alors être traitée par plusieurs serveurs
+ ldap :</p>
+
+ <div class="example"><h3>Vérification auprès de plusieurs serveurs
+ LDAP</h3><pre class="prettyprint lang-config"><AuthnProviderAlias ldap ldap-alias1>
+ AuthLDAPBindDN cn=youruser,o=ctx
+ AuthLDAPBindPassword yourpassword
+ AuthLDAPURL ldap://ldap.host/o=ctx
+ </AuthnProviderAlias>
+ <AuthnProviderAlias ldap ldap-other-alias>
+ AuthLDAPBindDN cn=yourotheruser,o=dev
+ AuthLDAPBindPassword yourotherpassword
+ AuthLDAPURL ldap://other.ldap.host/o=dev?cn
+</AuthnProviderAlias>
+
+Alias /secure /webpages/secure
+<Directory /webpages/secure>
+ Order deny,allow
+ Allow from all
+
+ AuthBasicProvider ldap-other-alias ldap-alias1
+
+ AuthType Basic
+ AuthName LDAP_Protected Place
+ Require valid-user
+ # Notez que Require ldap-* ne fonctionnerait pas ici, car
+ # AuthnProviderAlias ne fournit pas de configuration pour les
+ # fournisseurs d'autorisation implémentés dans le même module que le
+ # fournisseur d'authentification.
+</Directory></pre>
+</div>
+
+
</div>
</div>
<div class="bottomlang">
<li><a href="../misc/password_encryptions.html">Password Formats</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthDBDUserPWQuery" id="AuthDBDUserPWQuery">AuthDBDUserPWQuery</a> <a name="authdbduserpwquery" id="authdbduserpwquery">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>SQL query to look up a password for a user</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDBDUserPWQuery <var>query</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
+</table>
+ <p>The <code class="directive">AuthDBDUserPWQuery</code> specifies an
+ SQL query to look up a password for a specified user. The user's ID
+ will be passed as a single string parameter when the SQL query is
+ executed. It may be referenced within the query statement using
+ a <code>%s</code> format specifier.</p>
+ <pre class="prettyprint lang-config">AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"</pre>
+
+ <p>The first column value of the first row returned by the query
+ statement should be a string containing the encrypted password.
+ Subsequent rows will be ignored. If no rows are returned, the user
+ will not be authenticated through <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
+ <p>If httpd was built against <a class="glossarylink" href="../glossary.html#apr" title="see glossary">APR</a> version 1.3.0
+ or higher, any additional column values in the first row returned by
+ the query statement will be stored as environment variables with
+ names of the form <code>AUTHENTICATE_<var>COLUMN</var></code>.
+ </p>
+ <p>The encrypted password format depends on which authentication
+ frontend (e.g. <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> or
+ <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>) is being used. See <a href="../misc/password_encryptions.html">Password Formats</a> for
+ more information.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthDBDUserRealmQuery" id="AuthDBDUserRealmQuery">AuthDBDUserRealmQuery</a> <a name="authdbduserrealmquery" id="authdbduserrealmquery">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>SQL query to look up a password hash for a user and realm.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDBDUserRealmQuery <var>query</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
+</table>
+ <p>The <code class="directive">AuthDBDUserRealmQuery</code> specifies an
+ SQL query to look up a password for a specified user and realm in a
+ digest authentication process.
+ The user's ID and the realm, in that order, will be passed as string
+ parameters when the SQL query is executed. They may be referenced
+ within the query statement using <code>%s</code> format specifiers.</p>
+ <pre class="prettyprint lang-config">AuthDBDUserRealmQuery "SELECT password FROM authn WHERE user = %s AND realm = %s"</pre>
+
+ <p>The first column value of the first row returned by the query
+ statement should be a string containing the encrypted password.
+ Subsequent rows will be ignored. If no rows are returned, the user
+ will not be authenticated through <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
+ <p>If httpd was built against <a class="glossarylink" href="../glossary.html#apr" title="see glossary">APR</a> version 1.3.0
+ or higher, any additional column values in the first row returned by
+ the query statement will be stored as environment variables with
+ names of the form <code>AUTHENTICATE_<var>COLUMN</var></code>.
+ </p>
+ <p>The encrypted password format depends on which authentication
+ frontend (e.g. <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> or
+ <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>) is being used. See <a href="../misc/password_encryptions.html">Password Formats</a> for
+ more information.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="socache" id="socache">Performance and Cacheing</a></h2>
<p>Please read <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> documentation for more information
about security on this scope.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBDUserPWQuery" id="AuthDBDUserPWQuery">AuthDBDUserPWQuery</a> <a name="authdbduserpwquery" id="authdbduserpwquery">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>SQL query to look up a password for a user</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDBDUserPWQuery <var>query</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
-</table>
- <p>The <code class="directive">AuthDBDUserPWQuery</code> specifies an
- SQL query to look up a password for a specified user. The user's ID
- will be passed as a single string parameter when the SQL query is
- executed. It may be referenced within the query statement using
- a <code>%s</code> format specifier.</p>
- <pre class="prettyprint lang-config">AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"</pre>
-
- <p>The first column value of the first row returned by the query
- statement should be a string containing the encrypted password.
- Subsequent rows will be ignored. If no rows are returned, the user
- will not be authenticated through <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
- <p>If httpd was built against <a class="glossarylink" href="../glossary.html#apr" title="see glossary">APR</a> version 1.3.0
- or higher, any additional column values in the first row returned by
- the query statement will be stored as environment variables with
- names of the form <code>AUTHENTICATE_<var>COLUMN</var></code>.
- </p>
- <p>The encrypted password format depends on which authentication
- frontend (e.g. <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> or
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>) is being used. See <a href="../misc/password_encryptions.html">Password Formats</a> for
- more information.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBDUserRealmQuery" id="AuthDBDUserRealmQuery">AuthDBDUserRealmQuery</a> <a name="authdbduserrealmquery" id="authdbduserrealmquery">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>SQL query to look up a password hash for a user and realm.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDBDUserRealmQuery <var>query</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
-</table>
- <p>The <code class="directive">AuthDBDUserRealmQuery</code> specifies an
- SQL query to look up a password for a specified user and realm in a
- digest authentication process.
- The user's ID and the realm, in that order, will be passed as string
- parameters when the SQL query is executed. They may be referenced
- within the query statement using <code>%s</code> format specifiers.</p>
- <pre class="prettyprint lang-config">AuthDBDUserRealmQuery "SELECT password FROM authn WHERE user = %s AND realm = %s"</pre>
-
- <p>The first column value of the first row returned by the query
- statement should be a string containing the encrypted password.
- Subsequent rows will be ignored. If no rows are returned, the user
- will not be authenticated through <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
- <p>If httpd was built against <a class="glossarylink" href="../glossary.html#apr" title="see glossary">APR</a> version 1.3.0
- or higher, any additional column values in the first row returned by
- the query statement will be stored as environment variables with
- names of the form <code>AUTHENTICATE_<var>COLUMN</var></code>.
- </p>
- <p>The encrypted password format depends on which authentication
- frontend (e.g. <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> or
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>) is being used. See <a href="../misc/password_encryptions.html">Password Formats</a> for
- more information.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_authn_dbd.html" title="English"> en </a> |
passe</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authdbduserpwquery" id="authdbduserpwquery">Directive</a> <a name="AuthDBDUserPWQuery" id="AuthDBDUserPWQuery">AuthDBDUserPWQuery</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Requête SQL servant à vérifier le mot de passe d'un
+utilisateur</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthDBDUserPWQuery <var>requête</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
+</table>
+ <p>La directive <code class="directive">AuthDBDUserPWQuery</code> permet de
+ spécifier une requête servant à vérifier le mot de passe d'un
+ utilisateur donné. L'identifiant utilisateur sera transmis comme
+ paramètre sous forme d'une seule chaîne de caractères lorsque la
+ requête sera exécutée. Cet identifiant est référencé dans la requête
+ en utilisant le spécificateur de format <code>%s</code>.</p>
+ <pre class="prettyprint lang-config">AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"</pre>
+
+ <p>La première colonne du premier enregistrement renvoyé par la
+ requête se présentera sous la forme d'une chaîne de caractères
+ contenant le mot de passe chiffré. Les enregistrements suivants sont
+ ignorés. Si aucun enregistrement n'est renvoyé, l'utilisateur ne
+ sera pas authentifié par <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
+ <p>Si httpd a été compilé avec la version 1.3.0 ou supérieure de
+ l'<a class="glossarylink" href="../glossary.html#apr" title="voir glossaire">APR</a>, toute valeur de colonne supplémentaire
+ du premier enregistrement renvoyé par la requête sera stockée dans
+ une variable d'environnement dont le nom aura la forme
+ <code>AUTHENTICATE_<var>valeur-colonne</var></code>.
+ </p>
+ <p>Le format du mot de passe chiffré dépend du frontal
+ d'authentification utilisé (par exemple
+ <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ou
+ <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>). Voir la documentation sur les <a href="../misc/password_encryptions.html">Formats de mots de passe</a> pour
+ plus de détails.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authdbduserrealmquery" id="authdbduserrealmquery">Directive</a> <a name="AuthDBDUserRealmQuery" id="AuthDBDUserRealmQuery">AuthDBDUserRealmQuery</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Requête SQL servant à vérifier une empreinte de mot de
+passe pour un utilisateur et un identifiant d'authentification.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthDBDUserRealmQuery <var>requête</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
+</table>
+ <p>La directive <code class="directive">AuthDBDUserRealmQuery</code> spécifie
+ une requête SQL servant à vérifier une empreinte de mot
+ de passe pour un utilisateur et un identifiant d'authentification
+ donnés au cours d'un processus d'authentification digest. Les
+ identifiants de l'utilisateur et de l'authentification
+ sont passés dans cet ordre comme paramètres à l'exécution de la
+ requête. Ils sont référencés dans la chaîne de la requête en
+ utilisant des spécificateurs de format <code>%s</code>.</p>
+ <pre class="prettyprint lang-config">AuthDBDUserRealmQuery "SELECT password FROM authn WHERE user = %s AND realm = %s"</pre>
+
+ <p>La première colonne du premier enregistrement renvoyé par la
+ requête se présentera sous la forme d'une chaîne de caractères
+ contenant le mot de passe chiffré. Les enregistrements suivants
+ seront ignorés. Si aucun enregistrement n'est renvoyé, l'utilisateur
+ ne sera pas authentifié par <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
+ <p>Si httpd a été compilé avec une version 1.3.0 ou supérieure de
+ l'<a class="glossarylink" href="../glossary.html#apr" title="voir glossaire">APR</a>, toute valeur de colonne supplémentaire
+ du premier enregistrement renvoyé par la requête sera stockée dans
+ une variable d'environnement avec un nom de la forme
+ <code>AUTHENTICATE_<var>COLONNE</var></code>.
+ </p>
+ <p>Le format du mot de passe chiffré dépend du frontal
+ d'authentification utilisé (par exemple
+ <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ou
+ <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>). Voir la documentation sur les <a href="../misc/password_encryptions.html">Formats de mots de passe</a> pour
+ plus de détails.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="socache" id="socache">Performances et mise en cache</a></h2>
<code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> pour plus d'informations à propos de la
sécurité dans ce domaine.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authdbduserpwquery" id="authdbduserpwquery">Directive</a> <a name="AuthDBDUserPWQuery" id="AuthDBDUserPWQuery">AuthDBDUserPWQuery</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Requête SQL servant à vérifier le mot de passe d'un
-utilisateur</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthDBDUserPWQuery <var>requête</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
-</table>
- <p>La directive <code class="directive">AuthDBDUserPWQuery</code> permet de
- spécifier une requête servant à vérifier le mot de passe d'un
- utilisateur donné. L'identifiant utilisateur sera transmis comme
- paramètre sous forme d'une seule chaîne de caractères lorsque la
- requête sera exécutée. Cet identifiant est référencé dans la requête
- en utilisant le spécificateur de format <code>%s</code>.</p>
- <pre class="prettyprint lang-config">AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"</pre>
-
- <p>La première colonne du premier enregistrement renvoyé par la
- requête se présentera sous la forme d'une chaîne de caractères
- contenant le mot de passe chiffré. Les enregistrements suivants sont
- ignorés. Si aucun enregistrement n'est renvoyé, l'utilisateur ne
- sera pas authentifié par <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
- <p>Si httpd a été compilé avec la version 1.3.0 ou supérieure de
- l'<a class="glossarylink" href="../glossary.html#apr" title="voir glossaire">APR</a>, toute valeur de colonne supplémentaire
- du premier enregistrement renvoyé par la requête sera stockée dans
- une variable d'environnement dont le nom aura la forme
- <code>AUTHENTICATE_<var>valeur-colonne</var></code>.
- </p>
- <p>Le format du mot de passe chiffré dépend du frontal
- d'authentification utilisé (par exemple
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ou
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>). Voir la documentation sur les <a href="../misc/password_encryptions.html">Formats de mots de passe</a> pour
- plus de détails.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authdbduserrealmquery" id="authdbduserrealmquery">Directive</a> <a name="AuthDBDUserRealmQuery" id="AuthDBDUserRealmQuery">AuthDBDUserRealmQuery</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Requête SQL servant à vérifier une empreinte de mot de
-passe pour un utilisateur et un identifiant d'authentification.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthDBDUserRealmQuery <var>requête</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbd</td></tr>
-</table>
- <p>La directive <code class="directive">AuthDBDUserRealmQuery</code> spécifie
- une requête SQL servant à vérifier une empreinte de mot
- de passe pour un utilisateur et un identifiant d'authentification
- donnés au cours d'un processus d'authentification digest. Les
- identifiants de l'utilisateur et de l'authentification
- sont passés dans cet ordre comme paramètres à l'exécution de la
- requête. Ils sont référencés dans la chaîne de la requête en
- utilisant des spécificateurs de format <code>%s</code>.</p>
- <pre class="prettyprint lang-config">AuthDBDUserRealmQuery "SELECT password FROM authn WHERE user = %s AND realm = %s"</pre>
-
- <p>La première colonne du premier enregistrement renvoyé par la
- requête se présentera sous la forme d'une chaîne de caractères
- contenant le mot de passe chiffré. Les enregistrements suivants
- seront ignorés. Si aucun enregistrement n'est renvoyé, l'utilisateur
- ne sera pas authentifié par <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
- <p>Si httpd a été compilé avec une version 1.3.0 ou supérieure de
- l'<a class="glossarylink" href="../glossary.html#apr" title="voir glossaire">APR</a>, toute valeur de colonne supplémentaire
- du premier enregistrement renvoyé par la requête sera stockée dans
- une variable d'environnement avec un nom de la forme
- <code>AUTHENTICATE_<var>COLONNE</var></code>.
- </p>
- <p>Le format du mot de passe chiffré dépend du frontal
- d'authentification utilisé (par exemple
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ou
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>). Voir la documentation sur les <a href="../misc/password_encryptions.html">Formats de mots de passe</a> pour
- plus de détails.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_authn_dbd.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="program"><a href="../programs/htdbm.html">htdbm</a></code></li>
<li><a href="../misc/password_encryptions.html">Password Formats</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDBMType" id="AuthDBMType">AuthDBMType</a> <a name="authdbmtype" id="authdbmtype">Directive</a></h2>
<table class="directive">
<code class="program"><a href="../programs/htdbm.html">htdbm</a></code>.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_authn_dbm.html" title="English"> en </a> |
<li><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code></li>
<li><code class="program"><a href="../programs/htdbm.html">htdbm</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authdbmtype" id="authdbmtype">Directive</a> <a name="AuthDBMType" id="AuthDBMType">AuthDBMType</a></h2>
<table class="directive">
utilitaire permettant de maintenir les fichiers DBM.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_authn_dbm.html" hreflang="en" rel="alternate" title="English"> en </a> |
<code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
</li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDBMType" id="AuthDBMType">AuthDBMType</a> <a name="authdbmtype" id="authdbmtype">ディレクティブ</a></h2>
<table class="directive">
更新したりすることができます。</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_authn_dbm.html" hreflang="en" rel="alternate" title="English"> en </a> |
<code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
</li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDBMType" id="AuthDBMType">AuthDBMType</a> <a name="authdbmtype" id="authdbmtype">Áö½Ã¾î</a></h2>
<table class="directive">
DBMÇü½Ä ¾ÏÈ£ÆÄÀÏÀ» ¸¸µé°í ¼öÁ¤ÇÑ´Ù.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_dbm.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="program"><a href="../programs/htdigest.html">htdigest</a></code></li>
<li><a href="../misc/password_encryptions.html">Password Formats</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthUserFile" id="AuthUserFile">AuthUserFile</a> <a name="authuserfile" id="authuserfile">Directive</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_authn_file.html" title="English"> en </a> |
<li><a href="../misc/password_encryptions.html">Formats de mots de
passe</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authuserfile" id="authuserfile">Directive</a> <a name="AuthUserFile" id="AuthUserFile">AuthUserFile</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_authn_file.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code></li>
<li><code class="program"><a href="../programs/htdigest.html">htdigest</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthUserFile" id="AuthUserFile">AuthUserFile</a> <a name="authuserfile" id="authuserfile">ディレクティブ</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_authn_file.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../programs/htpasswd.html">htpasswd</a></li>
<li><a href="../programs/htdigest.html">htdigest</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthUserFile" id="AuthUserFile">AuthUserFile</a> <a name="authuserfile" id="authuserfile">Áö½Ã¾î</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_file.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#dev">Cacheing with custom modules</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intro" id="intro">Authentication Cacheing</a></h2>
- <p>Some users of more heavyweight authentication such as SQL database
- lookups (<code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>) have reported it putting an
- unacceptable load on their authentication provider. A typical case
- in point is where an HTML page contains hundreds of objects
- (images, scripts, stylesheets, media, etc), and a request to the page
- generates hundreds of effectively-immediate requests for authenticated
- additional contents.</p>
- <p>mod_authn_socache provides a solution to this problem by
- maintaining a cache of authentication credentials.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">Usage</a></h2>
- <p>The authentication cache should be used where authentication
- lookups impose a significant load on the server, or a backend or
- network. Authentication by file (<code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>)
- or dbm (<code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>) are unlikely to benefit,
- as these are fast and lightweight in their own right (though in some
- cases, such as a network-mounted file, cacheing may be worthwhile).
- Other providers such as SQL or LDAP based authentication are more
- likely to benefit, particularly where there is an observed
- performance issue. Amongst the standard modules, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> manages its own cache, so only
- <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> will usually benefit from this cache.</p>
- <p>The basic rules to cache for a provider are:</p>
- <ol><li>Include the provider you're cacheing for in an
- <code class="directive">AuthnCacheProvideFor</code> directive.</li>
- <li>List <var>socache</var> ahead of the provider you're
- cacheing for in your <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> or <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> directive.</li>
- </ol>
- <p>A simple usage example to accelerate <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
- using dbm as a cache engine:</p>
- <pre class="prettyprint lang-config">#AuthnCacheSOCache is optional. If specified, it is server-wide
-AuthnCacheSOCache dbm
-<Directory /usr/www/myhost/private>
- AuthType Basic
- AuthName "Cached Authentication Example"
- AuthBasicProvider socache dbd
- AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
- AuthnCacheProvideFor dbd
- Require valid-user
- #Optional
- AuthnCacheContext dbd-authn-example
-</Directory></pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dev" id="dev">Cacheing with custom modules</a></h2>
- <p>Module developers should note that their modules must be enabled
- for cacheing with mod_authn_socache. A single optional API function
- <var>ap_authn_cache_store</var> is provided to cache credentials
- a provider has just looked up or generated. Usage examples are
- available in <a href="http://svn.eu.apache.org/viewvc?view=revision&revision=957072">r957072</a>, in which three authn providers are enabled for cacheing.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthnCacheContext" id="AuthnCacheContext">AuthnCacheContext</a> <a name="authncachecontext" id="authncachecontext">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify a context string for use in the cache key</td></tr>
your timeout.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="intro" id="intro">Authentication Cacheing</a></h2>
+ <p>Some users of more heavyweight authentication such as SQL database
+ lookups (<code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>) have reported it putting an
+ unacceptable load on their authentication provider. A typical case
+ in point is where an HTML page contains hundreds of objects
+ (images, scripts, stylesheets, media, etc), and a request to the page
+ generates hundreds of effectively-immediate requests for authenticated
+ additional contents.</p>
+ <p>mod_authn_socache provides a solution to this problem by
+ maintaining a cache of authentication credentials.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usage" id="usage">Usage</a></h2>
+ <p>The authentication cache should be used where authentication
+ lookups impose a significant load on the server, or a backend or
+ network. Authentication by file (<code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>)
+ or dbm (<code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>) are unlikely to benefit,
+ as these are fast and lightweight in their own right (though in some
+ cases, such as a network-mounted file, cacheing may be worthwhile).
+ Other providers such as SQL or LDAP based authentication are more
+ likely to benefit, particularly where there is an observed
+ performance issue. Amongst the standard modules, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> manages its own cache, so only
+ <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> will usually benefit from this cache.</p>
+ <p>The basic rules to cache for a provider are:</p>
+ <ol><li>Include the provider you're cacheing for in an
+ <code class="directive">AuthnCacheProvideFor</code> directive.</li>
+ <li>List <var>socache</var> ahead of the provider you're
+ cacheing for in your <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> or <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> directive.</li>
+ </ol>
+ <p>A simple usage example to accelerate <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
+ using dbm as a cache engine:</p>
+ <pre class="prettyprint lang-config">#AuthnCacheSOCache is optional. If specified, it is server-wide
+AuthnCacheSOCache dbm
+<Directory /usr/www/myhost/private>
+ AuthType Basic
+ AuthName "Cached Authentication Example"
+ AuthBasicProvider socache dbd
+ AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
+ AuthnCacheProvideFor dbd
+ Require valid-user
+ #Optional
+ AuthnCacheContext dbd-authn-example
+</Directory></pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="dev" id="dev">Cacheing with custom modules</a></h2>
+ <p>Module developers should note that their modules must be enabled
+ for cacheing with mod_authn_socache. A single optional API function
+ <var>ap_authn_cache_store</var> is provided to cache credentials
+ a provider has just looked up or generated. Usage examples are
+ available in <a href="http://svn.eu.apache.org/viewvc?view=revision&revision=957072">r957072</a>, in which three authn providers are enabled for cacheing.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_authn_socache.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#dev">La mise en cache avec les modules tiers</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intro" id="intro">Mise en cache des données d'authentification</a></h2>
- <p>Certains utilisateurs qui mettent oeuvre une authentification
- lourde s'appuyant par exemple sur des requêtes SQL
- (<code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>) ont signalé une charge induite
- inacceptable sur leur fournisseur d'authentification. Cela se
- produit typiquement dans le cas où une page HTML contient des
- centaines d'objets (images, scripts, pages de styles, media,
- etc...), et où une requête pour cette page génère des centaines de
- sous-requêtes à effet immédiat pour des contenus supplémentaires
- authentifiés.</p>
- <p>Pour résoudre ce problème, mod_authn_socache fournit une solution
- qui permet de maintenir un cache des données d'authentification.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">Utilisation</a></h2>
- <p>Le cache d'authentification doit être utilisé lorsque les
- requêtes d'authentification induisent une charge significative sur le
- serveur, le serveur d'arrière-plan ou le réseau. Cette mise en cache
- n'apportera probablement aucune amélioration dans le cas d'une
- authentification à base de fichier (<code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>)
- ou de base de données dbm (<code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>) car ces
- méthodes sont de par leur conception rapides et légères (la mise en
- cache peut cependant s'avérer utile dans le cas où le fichier est
- situé sur un montage réseau). Les fournisseurs d'authentification
- basés sur SQL ou LDAP ont plus de chances de tirer parti de cette
- mise en cache, en particulier lorsqu'un problème de performances est
- détecté. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> gérant son propre cache,
- seul <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> est concerné par notre sujet.</p>
- <p>Les principales règles à appliquer pour la mise en cache sont :</p>
- <ol><li>Inclure le fournisseur pour lequel vous voulez effectuer une
- mise en cache dans une directive
- <code class="directive">AuthnCacheProvideFor</code>.</li>
- <li>Mettre <var>socache</var> avant le fournisseur pour lequel
- vous voulez effectuer une mise en cache dans votre directive
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
- ou <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>.</li>
- </ol>
- <p>Voici un exemple simple permettant d'accélérer
- <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> et utilisant dbm comme moteur de la
- mise en cache :</p>
- <pre class="prettyprint lang-config"> #AuthnCacheSOCache est optionnel. S'il est défini, il l'est pour
- #l'ensemble du serveur
-AuthnCacheSOCache dbm
-<Directory /usr/www/myhost/private>
- AuthType Basic
- AuthName "Cached Authentication Example"
- AuthBasicProvider socache dbd
- AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
- AuthnCacheProvideFor dbd
- Require valid-user
- #Optionnel
- AuthnCacheContext dbd-authn-example
-</Directory></pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dev" id="dev">La mise en cache avec les modules tiers</a></h2>
- <p>Les développeurs de modules doivent savoir que la mise en cache
- avec mod_authn_socache doit être activée dans leurs modules. La
- fonction de l'API <var>ap_authn_cache_store</var> permet de
- mettre en cache les données d'authentification qu'un fournisseur
- vient de rechercher ou de générer. Vous trouverez des exemples
- d'utilisation à <a href="http://svn.eu.apache.org/viewvc?view=revision&revision=957072">r957072</a>, où trois fournisseurs authn sont activés pour la mise
- en cache.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authncachecontext" id="authncachecontext">Directive</a> <a name="AuthnCacheContext" id="AuthnCacheContext">AuthnCacheContext</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie une chaîne de contexte à utiliser dans la clé du
définissez la durée de vie.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="intro" id="intro">Mise en cache des données d'authentification</a></h2>
+ <p>Certains utilisateurs qui mettent oeuvre une authentification
+ lourde s'appuyant par exemple sur des requêtes SQL
+ (<code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>) ont signalé une charge induite
+ inacceptable sur leur fournisseur d'authentification. Cela se
+ produit typiquement dans le cas où une page HTML contient des
+ centaines d'objets (images, scripts, pages de styles, media,
+ etc...), et où une requête pour cette page génère des centaines de
+ sous-requêtes à effet immédiat pour des contenus supplémentaires
+ authentifiés.</p>
+ <p>Pour résoudre ce problème, mod_authn_socache fournit une solution
+ qui permet de maintenir un cache des données d'authentification.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usage" id="usage">Utilisation</a></h2>
+ <p>Le cache d'authentification doit être utilisé lorsque les
+ requêtes d'authentification induisent une charge significative sur le
+ serveur, le serveur d'arrière-plan ou le réseau. Cette mise en cache
+ n'apportera probablement aucune amélioration dans le cas d'une
+ authentification à base de fichier (<code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>)
+ ou de base de données dbm (<code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>) car ces
+ méthodes sont de par leur conception rapides et légères (la mise en
+ cache peut cependant s'avérer utile dans le cas où le fichier est
+ situé sur un montage réseau). Les fournisseurs d'authentification
+ basés sur SQL ou LDAP ont plus de chances de tirer parti de cette
+ mise en cache, en particulier lorsqu'un problème de performances est
+ détecté. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> gérant son propre cache,
+ seul <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> est concerné par notre sujet.</p>
+ <p>Les principales règles à appliquer pour la mise en cache sont :</p>
+ <ol><li>Inclure le fournisseur pour lequel vous voulez effectuer une
+ mise en cache dans une directive
+ <code class="directive">AuthnCacheProvideFor</code>.</li>
+ <li>Mettre <var>socache</var> avant le fournisseur pour lequel
+ vous voulez effectuer une mise en cache dans votre directive
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
+ ou <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>.</li>
+ </ol>
+ <p>Voici un exemple simple permettant d'accélérer
+ <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> et utilisant dbm comme moteur de la
+ mise en cache :</p>
+ <pre class="prettyprint lang-config"> #AuthnCacheSOCache est optionnel. S'il est défini, il l'est pour
+ #l'ensemble du serveur
+AuthnCacheSOCache dbm
+<Directory /usr/www/myhost/private>
+ AuthType Basic
+ AuthName "Cached Authentication Example"
+ AuthBasicProvider socache dbd
+ AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
+ AuthnCacheProvideFor dbd
+ Require valid-user
+ #Optionnel
+ AuthnCacheContext dbd-authn-example
+</Directory></pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="dev" id="dev">La mise en cache avec les modules tiers</a></h2>
+ <p>Les développeurs de modules doivent savoir que la mise en cache
+ avec mod_authn_socache doit être activée dans leurs modules. La
+ fonction de l'API <var>ap_authn_cache_store</var> permet de
+ mettre en cache les données d'authentification qu'un fournisseur
+ vient de rechercher ou de générer. Vous trouverez des exemples
+ d'utilisation à <a href="http://svn.eu.apache.org/viewvc?view=revision&revision=957072">r957072</a>, où trois fournisseurs authn sont activés pour la mise
+ en cache.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_authn_socache.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthnzFcgiCheckAuthnProvider" id="AuthnzFcgiCheckAuthnProvider">AuthnzFcgiCheckAuthnProvider</a> <a name="authnzfcgicheckauthnprovider" id="authnzfcgicheckauthnprovider">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_fcgi</td></tr>
+</table>
+ <p>This directive is used to enable a FastCGI authorizer to
+ handle a specific processing phase of authentication or
+ authorization.</p>
+
+ <p>Some capabilities of FastCGI authorizers require enablement
+ using this directive instead of
+ <code class="directive">AuthBasicProvider</code>:</p>
+
+ <ul>
+ <li>Non-Basic authentication; generally, determining the user
+ id of the client and returning it from the authorizer; see the
+ <code>UserExpr</code> option below</li>
+ <li>Selecting a custom response code; for a non-200 response
+ from the authorizer, the code from the authorizer will be the
+ status of the response</li>
+ <li>Setting the body of a non-200 response; if the authorizer
+ provides a response body with a non-200 response, that body
+ will be returned to the client; up to 8192 bytes of text are
+ supported</li>
+ </ul>
+
+ <dl>
+ <dt><em>provider-name</em></dt>
+ <dd>This is the name of a provider defined with <code class="directive">
+ AuthnzFcgiDefineProvider</code>.</dd>
+
+ <dt><code>None</code></dt>
+ <dd>Specify <code>None</code> to disable a provider enabled
+ with this directive in an outer scope, such as in a parent
+ directory.</dd>
+
+ <dt><em>option</em></dt>
+ <dd>The following options are supported:
+
+ <dl>
+ <dt>Authoritative On|Off (default On)</dt>
+ <dd>This controls whether or not other modules are allowed
+ to run when this module has a FastCGI authorizer configured
+ and it fails the request.</dd>
+
+ <dt>DefaultUser <em>userid</em></dt>
+ <dd>When the authorizer returns success and <code>UserExpr</code>
+ is configured and evaluates to an empty string (e.g., authorizer
+ didn't return a variable), this value will be used as the user
+ id. This is typically used when the authorizer has a concept of
+ guest, or unauthenticated, users and guest users are mapped to
+ some specific user id for logging and other purposes.</dd>
+
+ <dt>RequireBasicAuth On|Off (default Off)</dt>
+ <dd>This controls whether or not Basic auth is required
+ before passing the request to the authorizer. If required,
+ the authorizer won't be invoked without a user id and
+ password; 401 will be returned for a request without that.</dd>
+
+ <dt>UserExpr <em>expr</em> (no default)</dt>
+ <dd>When Basic authentication isn't provided by the client
+ and the authorizer determines the user, this expression,
+ evaluated after calling the authorizer, determines the
+ user. The expression follows <a href="../expr.html">
+ ap_expr syntax</a> and must resolve to a string. A typical
+ use is to reference a <code>Variable-<em>XXX</em></code>
+ setting returned by the authorizer using an option like
+ <code>UserExpr "%{reqenv:<em>XXX</em>}"</code>. If
+ this option is specified and the user id can't be retrieved
+ using the expression after a successful authentication, the
+ request will be rejected with a 500 error.</dd>
+
+ </dl>
+ </dd>
+ </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthnzFcgiDefineProvider" id="AuthnzFcgiDefineProvider">AuthnzFcgiDefineProvider</a> <a name="authnzfcgidefineprovider" id="authnzfcgidefineprovider">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_fcgi</td></tr>
+</table>
+ <p>This directive is used to define a FastCGI application as
+ a provider for a particular phase of authentication or
+ authorization.</p>
+
+ <dl>
+ <dt><em>type</em></dt>
+ <dd>This must be set to <em>authn</em> for authentication,
+ <em>authz</em> for authorization, or <em>authnz</em> for
+ a generic FastCGI authorizer which performs both checks.</dd>
+
+ <dt><em>provider-name</em></dt>
+ <dd>This is used to assign a name to the provider which is
+ used in other directives such as
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
+ and
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</dd>
+
+ <dt><em>backend-address</em></dt>
+ <dd>This specifies the address of the application, in the form
+ <em>fcgi://hostname:port/</em>. The application process(es)
+ must be managed independently, such as with
+ <code class="program"><a href="../programs/fcgistarter.html">fcgistarter</a></code>.</dd>
+ </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="invocations" id="invocations">Invocation modes</a></h2>
<pre class="prettyprint lang-config">LogLevel info authnz_fcgi:trace8</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthnzFcgiCheckAuthnProvider" id="AuthnzFcgiCheckAuthnProvider">AuthnzFcgiCheckAuthnProvider</a> <a name="authnzfcgicheckauthnprovider" id="authnzfcgicheckauthnprovider">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables a FastCGI application to handle the check_authn
-authentication hook.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
-<em>option</em> ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_fcgi</td></tr>
-</table>
- <p>This directive is used to enable a FastCGI authorizer to
- handle a specific processing phase of authentication or
- authorization.</p>
-
- <p>Some capabilities of FastCGI authorizers require enablement
- using this directive instead of
- <code class="directive">AuthBasicProvider</code>:</p>
-
- <ul>
- <li>Non-Basic authentication; generally, determining the user
- id of the client and returning it from the authorizer; see the
- <code>UserExpr</code> option below</li>
- <li>Selecting a custom response code; for a non-200 response
- from the authorizer, the code from the authorizer will be the
- status of the response</li>
- <li>Setting the body of a non-200 response; if the authorizer
- provides a response body with a non-200 response, that body
- will be returned to the client; up to 8192 bytes of text are
- supported</li>
- </ul>
-
- <dl>
- <dt><em>provider-name</em></dt>
- <dd>This is the name of a provider defined with <code class="directive">
- AuthnzFcgiDefineProvider</code>.</dd>
-
- <dt><code>None</code></dt>
- <dd>Specify <code>None</code> to disable a provider enabled
- with this directive in an outer scope, such as in a parent
- directory.</dd>
-
- <dt><em>option</em></dt>
- <dd>The following options are supported:
-
- <dl>
- <dt>Authoritative On|Off (default On)</dt>
- <dd>This controls whether or not other modules are allowed
- to run when this module has a FastCGI authorizer configured
- and it fails the request.</dd>
-
- <dt>DefaultUser <em>userid</em></dt>
- <dd>When the authorizer returns success and <code>UserExpr</code>
- is configured and evaluates to an empty string (e.g., authorizer
- didn't return a variable), this value will be used as the user
- id. This is typically used when the authorizer has a concept of
- guest, or unauthenticated, users and guest users are mapped to
- some specific user id for logging and other purposes.</dd>
-
- <dt>RequireBasicAuth On|Off (default Off)</dt>
- <dd>This controls whether or not Basic auth is required
- before passing the request to the authorizer. If required,
- the authorizer won't be invoked without a user id and
- password; 401 will be returned for a request without that.</dd>
-
- <dt>UserExpr <em>expr</em> (no default)</dt>
- <dd>When Basic authentication isn't provided by the client
- and the authorizer determines the user, this expression,
- evaluated after calling the authorizer, determines the
- user. The expression follows <a href="../expr.html">
- ap_expr syntax</a> and must resolve to a string. A typical
- use is to reference a <code>Variable-<em>XXX</em></code>
- setting returned by the authorizer using an option like
- <code>UserExpr "%{reqenv:<em>XXX</em>}"</code>. If
- this option is specified and the user id can't be retrieved
- using the expression after a successful authentication, the
- request will be rejected with a 500 error.</dd>
-
- </dl>
- </dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthnzFcgiDefineProvider" id="AuthnzFcgiDefineProvider">AuthnzFcgiDefineProvider</a> <a name="authnzfcgidefineprovider" id="authnzfcgidefineprovider">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a FastCGI application as a provider for
-authentication and/or authorization</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
-<em>backend-address</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_fcgi</td></tr>
-</table>
- <p>This directive is used to define a FastCGI application as
- a provider for a particular phase of authentication or
- authorization.</p>
-
- <dl>
- <dt><em>type</em></dt>
- <dd>This must be set to <em>authn</em> for authentication,
- <em>authz</em> for authorization, or <em>authnz</em> for
- a generic FastCGI authorizer which performs both checks.</dd>
-
- <dt><em>provider-name</em></dt>
- <dd>This is used to assign a name to the provider which is
- used in other directives such as
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
- and
- <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</dd>
-
- <dt><em>backend-address</em></dt>
- <dd>This specifies the address of the application, in the form
- <em>fcgi://hostname:port/</em>. The application process(es)
- must be managed independently, such as with
- <code class="program"><a href="../programs/fcgistarter.html">fcgistarter</a></code>.</dd>
- </dl>
-
</div>
</div>
<div class="bottomlang">
<li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="contents" id="contents">Contents</a></h2>
-
- <ul>
- <li>
- <a href="#operation">Operation</a>
-
- <ul>
- <li><a href="#authenphase">The Authentication
- Phase</a></li>
-
- <li><a href="#authorphase">The Authorization
- Phase</a></li>
- </ul>
- </li>
+<div class="directive-section"><h2><a name="AuthLDAPAuthorizePrefix" id="AuthLDAPAuthorizePrefix">AuthLDAPAuthorizePrefix</a> <a name="authldapauthorizeprefix" id="authldapauthorizeprefix">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the prefix for environment variables set during
+authorization</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPAuthorizePrefix <em>prefix</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPAuthorizePrefix AUTHORIZE_</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
+</table>
+ <p>This directive allows you to override the prefix used for environment
+ variables set during LDAP authorization. If <em>AUTHENTICATE_</em> is
+ specified, consumers of these environment variables see the same information
+ whether LDAP has performed authentication, authorization, or both.</p>
- <li>
- <a href="#requiredirectives">The Require Directives</a>
+ <div class="note"><h3>Note</h3>
+ No authorization variables are set when a user is authorized on the basis of
+ <code>Require valid-user</code>.
+ </div>
- <ul>
- <li><a href="#requser">Require ldap-user</a></li>
- <li><a href="#reqgroup">Require ldap-group</a></li>
- <li><a href="#reqdn">Require ldap-dn</a></li>
- <li><a href="#reqattribute">Require ldap-attribute</a></li>
- <li><a href="#reqfilter">Require ldap-filter</a></li>
- <li><a href="#reqsearch">Require ldap-search</a></li>
- </ul>
- </li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPBindAuthoritative" id="AuthLDAPBindAuthoritative">AuthLDAPBindAuthoritative</a> <a name="authldapbindauthoritative" id="authldapbindauthoritative">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines if other authentication providers are used when a user can be mapped to a DN but the server cannot successfully bind with the user's credentials.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindAuthoritative<em>off|on</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPBindAuthoritative on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>By default, subsequent authentication providers are only queried if a
+ user cannot be mapped to a DN, but not if the user can be mapped to a DN and their
+ password cannot be verified with an LDAP bind.
+ If <code class="directive"><a href="#authldapbindauthoritative">AuthLDAPBindAuthoritative</a></code>
+ is set to <em>off</em>, other configured authentication modules will have
+ a chance to validate the user if the LDAP bind (with the current user's credentials)
+ fails for any reason.</p>
+ <p> This allows users present in both LDAP and
+ <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> to authenticate
+ when the LDAP server is available but the user's account is locked or password
+ is otherwise unusable.</p>
- <li><a href="#examples">Examples</a></li>
- <li><a href="#usingtls">Using TLS</a></li>
- <li><a href="#usingssl">Using SSL</a></li>
- <li><a href="#exposed">Exposing Login Information</a></li>
- <li><a href="#activedirectory">Using Active Directory</a></li>
- <li>
- <a href="#frontpage">Using Microsoft FrontPage with
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></a>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li>
+<li><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPBindDN" id="AuthLDAPBindDN">AuthLDAPBindDN</a> <a name="authldapbinddn" id="authldapbinddn">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Optional DN to use in binding to the LDAP server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindDN <em>distinguished-name</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>An optional DN used to bind to the server when searching for
+ entries. If not provided, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will use
+ an anonymous bind.</p>
- <ul>
- <li><a href="#howitworks">How It Works</a></li>
- <li><a href="#fpcaveats">Caveats</a></li>
- </ul>
- </li>
- </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="operation" id="operation">Operation</a></h2>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPBindPassword" id="AuthLDAPBindPassword">AuthLDAPBindPassword</a> <a name="authldapbindpassword" id="authldapbindpassword">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Password used in conjuction with the bind DN</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindPassword <em>password</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td><em>exec:</em> was added in 2.4.5.</td></tr>
+</table>
+ <p>A bind password to use in conjunction with the bind DN. Note
+ that the bind password is probably sensitive data, and should be
+ properly protected. You should only use the <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code> and <code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code> if you
+ absolutely need them to search the directory.</p>
- <p>There are two phases in granting access to a user. The first
- phase is authentication, in which the <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
- authentication provider verifies that the user's credentials are valid.
- This is also called the <em>search/bind</em> phase. The second phase is
- authorization, in which <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> determines
- if the authenticated user is allowed access to the resource in
- question. This is also known as the <em>compare</em>
- phase.</p>
+ <p>If the value begins with exec: the resulting command will be
+ executed and the first line returned to standard output by the
+ program will be used as the password.</p>
+<pre class="prettyprint lang-config">#Password used as-is
+AuthLDAPBindPassword secret
- <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> registers both an authn_ldap authentication
- provider and an authz_ldap authorization handler. The authn_ldap
- authentication provider can be enabled through the
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> directive
- using the <code>ldap</code> value. The authz_ldap handler extends the
- <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive's authorization types
- by adding <code>ldap-user</code>, <code>ldap-dn</code> and <code>ldap-group</code>
- values.</p>
+#Run /path/to/program to get my password
+AuthLDAPBindPassword exec:/path/to/program
-<h3><a name="authenphase" id="authenphase">The Authentication
- Phase</a></h3>
+#Run /path/to/otherProgram and provide arguments
+AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"</pre>
- <p>During the authentication phase, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
- searches for an entry in the directory that matches the username
- that the HTTP client passes. If a single unique match is found,
- then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> attempts to bind to the
- directory server using the DN of the entry plus the password
- provided by the HTTP client. Because it does a search, then a
- bind, it is often referred to as the search/bind phase. Here are
- the steps taken during the search/bind phase.</p>
- <ol>
- <li>Generate a search filter by combining the attribute and
- filter provided in the <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> directive with
- the username passed by the HTTP client.</li>
- <li>Search the directory using the generated filter. If the
- search does not return exactly one entry, deny or decline
- access.</li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPCharsetConfig" id="AuthLDAPCharsetConfig">AuthLDAPCharsetConfig</a> <a name="authldapcharsetconfig" id="authldapcharsetconfig">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Language to charset conversion configuration file</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCharsetConfig <em>file-path</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>The <code class="directive">AuthLDAPCharsetConfig</code> directive sets the location
+ of the language to charset conversion configuration file. <var>File-path</var> is relative
+ to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. This file specifies
+ the list of language extensions to character sets.
+ Most administrators use the provided <code>charset.conv</code>
+ file, which associates common language extensions to character sets.</p>
- <li>Fetch the distinguished name of the entry retrieved from
- the search and attempt to bind to the LDAP server using that
- DN and the password passed by the HTTP client. If the bind is
- unsuccessful, deny or decline access.</li>
- </ol>
+ <p>The file contains lines in the following format:</p>
- <p>The following directives are used during the search/bind
- phase</p>
+ <div class="example"><p><code>
+ <var>Language-Extension</var> <var>charset</var> [<var>Language-String</var>] ...
+ </code></p></div>
- <table>
-
- <tr>
- <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code></td>
+ <p>The case of the extension does not matter. Blank lines, and lines
+ beginning with a hash character (<code>#</code>) are ignored.</p>
- <td>Specifies the LDAP server, the
- base DN, the attribute to use in the search, as well as the
- extra search filter to use.</td>
- </tr>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPCompareAsUser" id="AuthLDAPCompareAsUser">AuthLDAPCompareAsUser</a> <a name="authldapcompareasuser" id="authldapcompareasuser">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the authenticated user's credentials to perform authorization comparisons</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCompareAsUser on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPCompareAsUser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
+</table>
+ <p>When set, and <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has authenticated the
+ user, LDAP comparisons for authorization use the queried distinguished name (DN)
+ and HTTP basic authentication password of the authenticated user instead of
+ the servers configured credentials.</p>
- <tr>
- <td><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></td>
+ <p> The <em>ldap-attribute</em>, <em>ldap-user</em>, and <em>ldap-group</em> (single-level only)
+ authorization checks use comparisons.</p>
- <td>An optional DN to bind with
- during the search phase.</td>
- </tr>
+ <p>This directive only has effect on the comparisons performed during
+ nested group processing when <code class="directive"><a href="#authldapsearchasuser">
+ AuthLDAPSearchAsUser</a></code> is also enabled.</p>
- <tr>
- <td><code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code></td>
+ <p> This directive should only be used when your LDAP server doesn't
+ accept anonymous comparisons and you cannot use a dedicated
+ <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <td>An optional password to bind
- with during the search phase.</td>
- </tr>
- </table>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
+<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPCompareDNOnServer" id="AuthLDAPCompareDNOnServer">AuthLDAPCompareDNOnServer</a> <a name="authldapcomparednonserver" id="authldapcomparednonserver">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the LDAP server to compare the DNs</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCompareDNOnServer on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPCompareDNOnServer on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>When set, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will use the LDAP
+ server to compare the DNs. This is the only foolproof way to
+ compare DNs. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will search the
+ directory for the DN specified with the <a href="#reqdn"><code>Require dn</code></a> directive, then,
+ retrieve the DN and compare it with the DN retrieved from the user
+ entry. If this directive is not set,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> simply does a string comparison. It
+ is possible to get false negatives with this approach, but it is
+ much faster. Note the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache can speed up
+ DN comparison in most situations.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPDereferenceAliases" id="AuthLDAPDereferenceAliases">AuthLDAPDereferenceAliases</a> <a name="authldapdereferencealiases" id="authldapdereferencealiases">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>When will the module de-reference aliases</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPDereferenceAliases never|searching|finding|always</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPDereferenceAliases always</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>This directive specifies when <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will
+ de-reference aliases during LDAP operations. The default is
+ <code>always</code>.</p>
-<h3><a name="authorphase" id="authorphase">The Authorization Phase</a></h3>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPGroupAttribute" id="AuthLDAPGroupAttribute">AuthLDAPGroupAttribute</a> <a name="authldapgroupattribute" id="authldapgroupattribute">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>LDAP attributes used to identify the user members of
+groups.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPGroupAttribute <em>attribute</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPGroupAttribute member uniquemember</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>This directive specifies which LDAP attributes are used to
+ check for user members within groups. Multiple attributes can be used
+ by specifying this directive multiple times. If not specified,
+ then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the <code>member</code> and
+ <code>uniquemember</code> attributes.</p>
- <p>During the authorization phase, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
- attempts to determine if the user is authorized to access the
- resource. Many of these checks require
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> to do a compare operation on the
- LDAP server. This is why this phase is often referred to as the
- compare phase. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> accepts the
- following <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
- directives to determine if the credentials are acceptable:</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPGroupAttributeIsDN" id="AuthLDAPGroupAttributeIsDN">AuthLDAPGroupAttributeIsDN</a> <a name="authldapgroupattributeisdn" id="authldapgroupattributeisdn">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the DN of the client username when checking for
+group membership</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPGroupAttributeIsDN on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPGroupAttributeIsDN on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>When set <code>on</code>, this directive says to use the
+ distinguished name of the client username when checking for group
+ membership. Otherwise, the username will be used. For example,
+ assume that the client sent the username <code>bjenson</code>,
+ which corresponds to the LDAP DN <code>cn=Babs Jenson,
+ o=Example</code>. If this directive is set,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will check if the group has
+ <code>cn=Babs Jenson, o=Example</code> as a member. If this
+ directive is not set, then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will
+ check if the group has <code>bjenson</code> as a member.</p>
- <ul>
- <li>Grant access if there is a <a href="#reqgroup"><code>Require ldap-user</code></a> directive, and the
- username in the directive matches the username passed by the
- client.</li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPInitialBindAsUser" id="AuthLDAPInitialBindAsUser">AuthLDAPInitialBindAsUser</a> <a name="authldapinitialbindasuser" id="authldapinitialbindasuser">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines if the server does the initial DN lookup using the basic authentication users'
+own username, instead of anonymously or with hard-coded credentials for the server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPInitialBindAsUser <em>off|on</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPInitialBindAsUser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
+</table>
+ <p>By default, the server either anonymously, or with a dedicated user and
+ password, converts the basic authentication username into an LDAP
+ distinguished name (DN). This directive forces the server to use the verbatim username
+ and password provided by the incoming user to perform the initial DN
+ search.</p>
- <li>Grant access if there is a <a href="#reqdn"><code>Require
- ldap-dn</code></a> directive, and the DN in the directive matches
- the DN fetched from the LDAP directory.</li>
+ <p> If the verbatim username can't directly bind, but needs some
+ cosmetic transformation, see <code class="directive"><a href="#authldapinitialbindpattern">
+ AuthLDAPInitialBindPattern</a></code>.</p>
- <li>Grant access if there is a <a href="#reqgroup"><code>Require ldap-group</code></a> directive, and
- the DN fetched from the LDAP directory (or the username
- passed by the client) occurs in the LDAP group or, potentially, in
- one of its sub-groups.</li>
+ <p> This directive should only be used when your LDAP server doesn't
+ accept anonymous searches and you cannot use a dedicated
+ <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <li>Grant access if there is a <a href="#reqattribute">
- <code>Require ldap-attribute</code></a>
- directive, and the attribute fetched from the LDAP directory
- matches the given value.</li>
+ <div class="note"><h3>Not available with authorization-only</h3>
+ This directive can only be used if this module authenticates the user, and
+ has no effect when this module is used exclusively for authorization.
+ </div>
- <li>Grant access if there is a <a href="#reqfilter">
- <code>Require ldap-filter</code></a>
- directive, and the search filter successfully finds a single user
- object that matches the dn of the authenticated user.</li>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#authldapinitialbindpattern">AuthLDAPInitialBindPattern</a></code></li>
+<li><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></li>
+<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
+<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPInitialBindPattern" id="AuthLDAPInitialBindPattern">AuthLDAPInitialBindPattern</a> <a name="authldapinitialbindpattern" id="authldapinitialbindpattern">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the transformation of the basic authentication username to be used when binding to the LDAP server
+to perform a DN lookup</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPInitialBindPattern<em><var>regex</var> <var>substitution</var></em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPInitialBindPattern (.*) $1 (remote username used verbatim)</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
+</table>
+ <p>If <code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code> is set to
+ <em>ON</em>, the basic authentication username will be transformed according to the
+ regular expression and substituion arguments.</p>
- <li>Grant access if there is a <a href="#reqsearch">
- <code>Require ldap-search</code></a>
- directive, and the search filter successfully returns a single
- matching object with any distinguished name.</li>
+ <p> The regular expression argument is compared against the current basic authentication username.
+ The substitution argument may contain backreferences, but has no other variable interpolation.</p>
- <li>otherwise, deny or decline access</li>
- </ul>
+ <p> This directive should only be used when your LDAP server doesn't
+ accept anonymous searches and you cannot use a dedicated
+ <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <p>Other <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> values may also
- be used which may require loading additional authorization modules.</p>
+ <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) $1@example.com</pre>
- <ul>
- <li>Grant access to all successfully authenticated users if
- there is a <a href="#requser"><code>Require valid-user</code></a>
- directive. (requires <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code>)</li>
+ <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com</pre>
- <li>Grant access if there is a <a href="#reqgroup"><code>Require group</code></a> directive, and
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> has been loaded with the
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
- directive set.</li>
- <li>others...</li>
- </ul>
+ <div class="note"><h3>Not available with authorization-only</h3>
+ This directive can only be used if this module authenticates the user, and
+ has no effect when this module is used exclusively for authorization.
+ </div>
+ <div class="note"><h3>debugging</h3>
+ The substituted DN is recorded in the environment variable
+ <em>LDAP_BINDASUSER</em>. If the regular expression does not match the input,
+ the verbatim username is used.
+ </div>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
+<li><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPMaxSubGroupDepth" id="AuthLDAPMaxSubGroupDepth">AuthLDAPMaxSubGroupDepth</a> <a name="authldapmaxsubgroupdepth" id="authldapmaxsubgroupdepth">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the maximum sub-group nesting depth that will be
+evaluated before the user search is discontinued.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPMaxSubGroupDepth <var>Number</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPMaxSubGroupDepth 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.0 and later, defaulted to 10 in 2.4.x and early 2.5</td></tr>
+</table>
+ <p>When this directive is set to a non-zero value <code>X</code>
+ combined with use of the <code>Require ldap-group someGroupDN</code>
+ directive, the provided user credentials will be searched for
+ as a member of the <code>someGroupDN</code> directory object or of
+ any group member of the current group up to the maximum nesting
+ level <code>X</code> specified by this directive.</p>
+ <p>See the <a href="#reqgroup"><code>Require ldap-group</code></a>
+ section for a more detailed example.</p>
- <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the following directives during the
- compare phase:</p>
+ <div class="note"><h3>Nested groups performance</h3>
+ <p> When <code class="directive">AuthLDAPSubGroupAttribute</code> overlaps with
+ <code class="directive">AuthLDAPGroupAttribute</code> (as it does by default and
+ as required by common LDAP schemas), uncached searching for subgroups in
+ large groups can be very slow. If you use large, non-nested groups, keep
+ <code class="directive">AuthLDAPMaxSubGroupDepth</code> set to zero.</p>
+ </div>
- <table>
-
- <tr>
- <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> </td>
- <td>The attribute specified in the
- URL is used in compare operations for the <code>Require
- ldap-user</code> operation.</td>
- </tr>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPRemoteUserAttribute" id="AuthLDAPRemoteUserAttribute">AuthLDAPRemoteUserAttribute</a> <a name="authldapremoteuserattribute" id="authldapremoteuserattribute">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the value of the attribute returned during the user
+query to set the REMOTE_USER environment variable</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPRemoteUserAttribute uid</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>If this directive is set, the value of the
+ <code>REMOTE_USER</code> environment variable will be set to the
+ value of the attribute specified. Make sure that this attribute is
+ included in the list of attributes in the AuthLDAPUrl definition,
+ otherwise this directive will have no effect. This directive, if
+ present, takes precedence over <code class="directive"><a href="#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></code>. This
+ directive is useful should you want people to log into a website
+ using an email address, but a backend application expects the
+ username as a userid.</p>
+ <p> This directive only has effect when this module is used for
+ authentication.</p>
- <tr>
- <td><code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code></td>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPRemoteUserIsDN" id="AuthLDAPRemoteUserIsDN">AuthLDAPRemoteUserIsDN</a> <a name="authldapremoteuserisdn" id="authldapremoteuserisdn">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the DN of the client username to set the REMOTE_USER
+environment variable</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPRemoteUserIsDN on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPRemoteUserIsDN off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>If this directive is set to on, the value of the
+ <code>REMOTE_USER</code> environment variable will be set to the full
+ distinguished name of the authenticated user, rather than just
+ the username that was passed by the client. It is turned off by
+ default.</p>
+ <p> This directive only has effect when this module is used for
+ authentication.</p>
- <td>Determines the behavior of the
- <code>Require ldap-dn</code> directive.</td>
- </tr>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPSearchAsUser" id="AuthLDAPSearchAsUser">AuthLDAPSearchAsUser</a> <a name="authldapsearchasuser" id="authldapsearchasuser">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the authenticated user's credentials to perform authorization searches</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPSearchAsUser on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPSearchAsUser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
+</table>
+ <p>When set, and <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has authenticated the
+ user, LDAP searches for authorization use the queried distinguished name (DN)
+ and HTTP basic authentication password of the authenticated user instead of
+ the servers configured credentials.</p>
- <tr>
- <td><code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code></td>
+ <p> The <em>ldap-filter</em> and <em>ldap-dn</em> authorization
+ checks use searches.</p>
- <td>Determines the attribute to
- use for comparisons in the <code>Require ldap-group</code>
- directive.</td>
- </tr>
+ <p>This directive only has effect on the comparisons performed during
+ nested group processing when <code class="directive"><a href="#authldapcompareasuser">
+ AuthLDAPCompareAsUser</a></code> is also enabled.</p>
- <tr>
- <td><code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code></td>
+ <p> This directive should only be used when your LDAP server doesn't
+ accept anonymous searches and you cannot use a dedicated
+ <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <td>Specifies whether to use the
- user DN or the username when doing comparisons for the
- <code>Require ldap-group</code> directive.</td>
- </tr>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
+<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPSubGroupAttribute" id="AuthLDAPSubGroupAttribute">AuthLDAPSubGroupAttribute</a> <a name="authldapsubgroupattribute" id="authldapsubgroupattribute">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the attribute labels, one value per
+directive line, used to distinguish the members of the current group that
+are groups.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPSubGroupAttribute <em>attribute</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPSubgroupAttribute member uniquemember</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.0 and later</td></tr>
+</table>
+ <p>An LDAP group object may contain members that are users and
+ members that are groups (called nested or sub groups). The
+ <code>AuthLDAPSubGroupAttribute</code> directive identifies the
+ labels of group members and the <code>AuthLDAPGroupAttribute</code>
+ directive identifies the labels of the user members. Multiple
+ attributes can be used by specifying this directive multiple times.
+ If not specified, then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the
+ <code>member</code> and <code>uniqueMember</code> attributes.</p>
- <tr>
- <td><code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code></td>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPSubGroupClass" id="AuthLDAPSubGroupClass">AuthLDAPSubGroupClass</a> <a name="authldapsubgroupclass" id="authldapsubgroupclass">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies which LDAP objectClass values identify directory
+objects that are groups during sub-group processing.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPSubGroupClass <em>LdapObjectClass</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.0 and later</td></tr>
+</table>
+ <p>An LDAP group object may contain members that are users and
+ members that are groups (called nested or sub groups). The
+ <code>AuthLDAPSubGroupAttribute</code> directive identifies the
+ labels of members that may be sub-groups of the current group
+ (as opposed to user members). The <code>AuthLDAPSubGroupClass</code>
+ directive specifies the LDAP objectClass values used in verifying that
+ these potential sub-groups are in fact group objects. Verified sub-groups
+ can then be searched for more user or sub-group members. Multiple
+ attributes can be used by specifying this directive multiple times.
+ If not specified, then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the
+ <code>groupOfNames</code> and <code>groupOfUniqueNames</code> values.</p>
- <td>Determines the maximum depth of sub-groups that will be evaluated
- during comparisons in the <code>Require ldap-group</code> directive.</td>
- </tr>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthLDAPUrl" id="AuthLDAPUrl">AuthLDAPUrl</a> <a name="authldapurl" id="authldapurl">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>URL specifying the LDAP search parameters</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPUrl <em>url [NONE|SSL|TLS|STARTTLS]</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>An RFC 2255 URL which specifies the LDAP search parameters
+ to use. The syntax of the URL is</p>
+<div class="example"><p><code>ldap://host:port/basedn?attribute?scope?filter</code></p></div>
+ <p>If you want to specify more than one LDAP URL that Apache should try in turn, the syntax is:</p>
+<pre class="prettyprint lang-config">AuthLDAPUrl "ldap://ldap1.example.com ldap2.example.com/dc=..."</pre>
- <tr>
- <td><code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code></td>
+<p><em><strong>Caveat: </strong>If you specify multiple servers, you need to enclose the entire URL string in quotes;
+otherwise you will get an error: "AuthLDAPURL takes one argument, URL to define LDAP connection.." </em>
+You can of course use search parameters on each of these.</p>
- <td>Determines the attribute to use when obtaining sub-group members
- of the current group during comparisons in the <code>Require ldap-group</code>
- directive.</td>
- </tr>
+<dl>
+<dt>ldap</dt>
- <tr>
- <td><code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code></td>
+ <dd>For regular ldap, use the
+ string <code>ldap</code>. For secure LDAP, use <code>ldaps</code>
+ instead. Secure LDAP is only available if Apache was linked
+ to an LDAP library with SSL support.</dd>
- <td>Specifies the LDAP objectClass values used to identify if queried directory
- objects really are group objects (as opposed to user objects) during the
- <code>Require ldap-group</code> directive's sub-group processing.</td>
- </tr>
- </table>
+<dt>host:port</dt>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
+ <dd>
+ <p>The name/port of the ldap server (defaults to
+ <code>localhost:389</code> for <code>ldap</code>, and
+ <code>localhost:636</code> for <code>ldaps</code>). To
+ specify multiple, redundant LDAP servers, just list all
+ servers, separated by spaces. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
+ will try connecting to each server in turn, until it makes a
+ successful connection. If multiple ldap servers are specified,
+ then entire LDAP URL must be encapsulated in double quotes.</p>
- <p>Apache's <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
- directives are used during the authorization phase to ensure that
- a user is allowed to access a resource. mod_authnz_ldap extends the
- authorization types with <code>ldap-user</code>, <code>ldap-dn</code>,
- <code>ldap-group</code>, <code>ldap-attribute</code> and
- <code>ldap-filter</code>. Other authorization types may also be
- used but may require that additional authorization modules be loaded.</p>
+ <p>Once a connection has been made to a server, that
+ connection remains active for the life of the
+ <code class="program"><a href="../programs/httpd.html">httpd</a></code> process, or until the LDAP server goes
+ down.</p>
- <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
- within the LDAP require directives.</p>
+ <p>If the LDAP server goes down and breaks an existing
+ connection, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will attempt to
+ re-connect, starting with the primary server, and trying
+ each redundant server in turn. Note that this is different
+ than a true round-robin search.</p>
+ </dd>
-<h3><a name="requser" id="requser">Require ldap-user</a></h3>
+<dt>basedn</dt>
- <p>The <code>Require ldap-user</code> directive specifies what
- usernames can access the resource. Once
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has retrieved a unique DN from the
- directory, it does an LDAP compare operation using the username
- specified in the <code>Require ldap-user</code> to see if that username
- is part of the just-fetched LDAP entry. Multiple users can be
- granted access by putting multiple usernames on the line,
- separated with spaces. If a username has a space in it, then it
- must be surrounded with double quotes. Multiple users can also be
- granted access by using multiple <code>Require ldap-user</code>
- directives, with one user per line. For example, with a <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> of
- <code>ldap://ldap/o=Example?cn</code> (i.e., <code>cn</code> is
- used for searches), the following Require directives could be used
- to restrict access:</p>
-<pre class="prettyprint lang-config">Require ldap-user "Barbara Jenson"
-Require ldap-user "Fred User"
-Require ldap-user "Joe Manager"</pre>
+ <dd>The DN of the branch of the
+ directory where all searches should start from. At the very
+ least, this must be the top of your directory tree, but
+ could also specify a subtree in the directory.</dd>
+<dt>attribute</dt>
- <p>Because of the way that <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> handles this
- directive, Barbara Jenson could sign on as <em>Barbara
- Jenson</em>, <em>Babs Jenson</em> or any other <code>cn</code> that
- she has in her LDAP entry. Only the single <code>Require
- ldap-user</code> line is needed to support all values of the attribute
- in the user's entry.</p>
+ <dd>The attribute to search for.
+ Although RFC 2255 allows a comma-separated list of
+ attributes, only the first attribute will be used, no
+ matter how many are provided. If no attributes are
+ provided, the default is to use <code>uid</code>. It's a good
+ idea to choose an attribute that will be unique across all
+ entries in the subtree you will be using. All attributes
+ listed will be put into the environment with an AUTHENTICATE_ prefix
+ for use by other modules.</dd>
- <p>If the <code>uid</code> attribute was used instead of the
- <code>cn</code> attribute in the URL above, the above three lines
- could be condensed to</p>
-<pre class="prettyprint lang-config">Require ldap-user bjenson fuser jmanager</pre>
+<dt>scope</dt>
+ <dd>The scope of the search. Can be either <code>one</code> or
+ <code>sub</code>. Note that a scope of <code>base</code> is
+ also supported by RFC 2255, but is not supported by this
+ module. If the scope is not provided, or if <code>base</code> scope
+ is specified, the default is to use a scope of
+ <code>sub</code>.</dd>
+<dt>filter</dt>
-<h3><a name="reqgroup" id="reqgroup">Require ldap-group</a></h3>
+ <dd>A valid LDAP search filter. If
+ not provided, defaults to <code>(objectClass=*)</code>, which
+ will search for all objects in the tree. Filters are
+ limited to approximately 8000 characters (the definition of
+ <code>MAX_STRING_LEN</code> in the Apache source code). This
+ should be more than sufficient for any application. The keyword
+ <code>none</code> disables the use of a filter; this is required
+ by some primitive LDAP servers.</dd>
+</dl>
- <p>This directive specifies an LDAP group whose members are
- allowed access. It takes the distinguished name of the LDAP
- group. Note: Do not surround the group name with quotes.
- For example, assume that the following entry existed in
- the LDAP directory:</p>
-<div class="example"><pre>dn: cn=Administrators, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Barbara Jenson, o=Example
-uniqueMember: cn=Fred User, o=Example</pre></div>
+ <p>When doing searches, the attribute, filter and username passed
+ by the HTTP client are combined to create a search filter that
+ looks like
+ <code>(&(<em>filter</em>)(<em>attribute</em>=<em>username</em>))</code>.</p>
- <p>The following directive would grant access to both Fred and
- Barbara:</p>
-<pre class="prettyprint lang-config">Require ldap-group cn=Administrators, o=Example</pre>
+ <p>For example, consider an URL of
+ <code>ldap://ldap.example.com/o=Example?cn?sub?(posixid=*)</code>. When
+ a client attempts to connect using a username of <code>Babs
+ Jenson</code>, the resulting search filter will be
+ <code>(&(posixid=*)(cn=Babs Jenson))</code>.</p>
+ <p>An optional parameter can be added to allow the LDAP Url to override
+ the connection type. This parameter can be one of the following:</p>
- <p>Members can also be found within sub-groups of a specified LDAP group
- if <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code>
- is set to a value greater than 0. For example, assume the following entries
- exist in the LDAP directory:</p>
-<div class="example"><pre>dn: cn=Employees, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Managers, o=Example
-uniqueMember: cn=Administrators, o=Example
-uniqueMember: cn=Users, o=Example
+<dl>
+ <dt>NONE</dt>
+ <dd>Establish an unsecure connection on the default LDAP port. This
+ is the same as <code>ldap://</code> on port 389.</dd>
+ <dt>SSL</dt>
+ <dd>Establish a secure connection on the default secure LDAP port.
+ This is the same as <code>ldaps://</code></dd>
+ <dt>TLS | STARTTLS</dt>
+ <dd>Establish an upgraded secure connection on the default LDAP port.
+ This connection will be initiated on port 389 by default and then
+ upgraded to a secure connection on the same port.</dd>
+</dl>
-dn: cn=Managers, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Bob Ellis, o=Example
-uniqueMember: cn=Tom Jackson, o=Example
+ <p>See above for examples of <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> URLs.</p>
-dn: cn=Administrators, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Barbara Jenson, o=Example
-uniqueMember: cn=Fred User, o=Example
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="contents" id="contents">Contents</a></h2>
-dn: cn=Users, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Allan Jefferson, o=Example
-uniqueMember: cn=Paul Tilley, o=Example
-uniqueMember: cn=Temporary Employees, o=Example
+ <ul>
+ <li>
+ <a href="#operation">Operation</a>
-dn: cn=Temporary Employees, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Jim Swenson, o=Example
-uniqueMember: cn=Elliot Rhodes, o=Example</pre></div>
+ <ul>
+ <li><a href="#authenphase">The Authentication
+ Phase</a></li>
- <p>The following directives would allow access for Bob Ellis, Tom Jackson,
- Barbara Jenson, Fred User, Allan Jefferson, and Paul Tilley but would not
- allow access for Jim Swenson, or Elliot Rhodes (since they are at a
- sub-group depth of 2):</p>
-<pre class="prettyprint lang-config">Require ldap-group cn=Employees, o=Example
-AuthLDAPMaxSubGroupDepth 1</pre>
+ <li><a href="#authorphase">The Authorization
+ Phase</a></li>
+ </ul>
+ </li>
+ <li>
+ <a href="#requiredirectives">The Require Directives</a>
- <p>Behavior of this directive is modified by the <code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code>, <code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code>, <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code>, <code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code>, and <code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code>
- directives.</p>
+ <ul>
+ <li><a href="#requser">Require ldap-user</a></li>
+ <li><a href="#reqgroup">Require ldap-group</a></li>
+ <li><a href="#reqdn">Require ldap-dn</a></li>
+ <li><a href="#reqattribute">Require ldap-attribute</a></li>
+ <li><a href="#reqfilter">Require ldap-filter</a></li>
+ <li><a href="#reqsearch">Require ldap-search</a></li>
+ </ul>
+ </li>
+ <li><a href="#examples">Examples</a></li>
+ <li><a href="#usingtls">Using TLS</a></li>
+ <li><a href="#usingssl">Using SSL</a></li>
+ <li><a href="#exposed">Exposing Login Information</a></li>
+ <li><a href="#activedirectory">Using Active Directory</a></li>
+ <li>
+ <a href="#frontpage">Using Microsoft FrontPage with
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></a>
-<h3><a name="reqdn" id="reqdn">Require ldap-dn</a></h3>
+ <ul>
+ <li><a href="#howitworks">How It Works</a></li>
+ <li><a href="#fpcaveats">Caveats</a></li>
+ </ul>
+ </li>
+ </ul>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="operation" id="operation">Operation</a></h2>
- <p>The <code>Require ldap-dn</code> directive allows the administrator
- to grant access based on distinguished names. It specifies a DN
- that must match for access to be granted. If the distinguished
- name that was retrieved from the directory server matches the
- distinguished name in the <code>Require ldap-dn</code>, then
- authorization is granted. Note: do not surround the distinguished
- name with quotes.</p>
+ <p>There are two phases in granting access to a user. The first
+ phase is authentication, in which the <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
+ authentication provider verifies that the user's credentials are valid.
+ This is also called the <em>search/bind</em> phase. The second phase is
+ authorization, in which <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> determines
+ if the authenticated user is allowed access to the resource in
+ question. This is also known as the <em>compare</em>
+ phase.</p>
- <p>The following directive would grant access to a specific
- DN:</p>
-<pre class="prettyprint lang-config">Require ldap-dn cn=Barbara Jenson, o=Example</pre>
+ <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> registers both an authn_ldap authentication
+ provider and an authz_ldap authorization handler. The authn_ldap
+ authentication provider can be enabled through the
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> directive
+ using the <code>ldap</code> value. The authz_ldap handler extends the
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive's authorization types
+ by adding <code>ldap-user</code>, <code>ldap-dn</code> and <code>ldap-group</code>
+ values.</p>
+<h3><a name="authenphase" id="authenphase">The Authentication
+ Phase</a></h3>
- <p>Behavior of this directive is modified by the <code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code>
- directive.</p>
+ <p>During the authentication phase, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
+ searches for an entry in the directory that matches the username
+ that the HTTP client passes. If a single unique match is found,
+ then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> attempts to bind to the
+ directory server using the DN of the entry plus the password
+ provided by the HTTP client. Because it does a search, then a
+ bind, it is often referred to as the search/bind phase. Here are
+ the steps taken during the search/bind phase.</p>
+ <ol>
+ <li>Generate a search filter by combining the attribute and
+ filter provided in the <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> directive with
+ the username passed by the HTTP client.</li>
-<h3><a name="reqattribute" id="reqattribute">Require ldap-attribute</a></h3>
+ <li>Search the directory using the generated filter. If the
+ search does not return exactly one entry, deny or decline
+ access.</li>
- <p>The <code>Require ldap-attribute</code> directive allows the
- administrator to grant access based on attributes of the authenticated
- user in the LDAP directory. If the attribute in the directory
- matches the value given in the configuration, access is granted.</p>
+ <li>Fetch the distinguished name of the entry retrieved from
+ the search and attempt to bind to the LDAP server using that
+ DN and the password passed by the HTTP client. If the bind is
+ unsuccessful, deny or decline access.</li>
+ </ol>
- <p>The following directive would grant access to anyone with
- the attribute employeeType = active</p>
+ <p>The following directives are used during the search/bind
+ phase</p>
- <pre class="prettyprint lang-config">Require ldap-attribute "employeeType=active"</pre>
+ <table>
+
+ <tr>
+ <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code></td>
+ <td>Specifies the LDAP server, the
+ base DN, the attribute to use in the search, as well as the
+ extra search filter to use.</td>
+ </tr>
- <p>Multiple attribute/value pairs can be specified on the same line
- separated by spaces or they can be specified in multiple
- <code>Require ldap-attribute</code> directives. The effect of listing
- multiple attribute/values pairs is an OR operation. Access will be
- granted if any of the listed attribute values match the value of the
- corresponding attribute in the user object. If the value of the
- attribute contains a space, only the value must be within double quotes.</p>
+ <tr>
+ <td><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></td>
- <p>The following directive would grant access to anyone with
- the city attribute equal to "San Jose" or status equal to "Active"</p>
+ <td>An optional DN to bind with
+ during the search phase.</td>
+ </tr>
- <pre class="prettyprint lang-config">Require ldap-attribute city="San Jose" "status=active"</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code></td>
+ <td>An optional password to bind
+ with during the search phase.</td>
+ </tr>
+ </table>
+<h3><a name="authorphase" id="authorphase">The Authorization Phase</a></h3>
-<h3><a name="reqfilter" id="reqfilter">Require ldap-filter</a></h3>
+ <p>During the authorization phase, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
+ attempts to determine if the user is authorized to access the
+ resource. Many of these checks require
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> to do a compare operation on the
+ LDAP server. This is why this phase is often referred to as the
+ compare phase. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> accepts the
+ following <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ directives to determine if the credentials are acceptable:</p>
- <p>The <code>Require ldap-filter</code> directive allows the
- administrator to grant access based on a complex LDAP search filter.
- If the dn returned by the filter search matches the authenticated user
- dn, access is granted.</p>
+ <ul>
+ <li>Grant access if there is a <a href="#reqgroup"><code>Require ldap-user</code></a> directive, and the
+ username in the directive matches the username passed by the
+ client.</li>
- <p>The following directive would grant access to anyone having a cell phone
- and is in the marketing department</p>
+ <li>Grant access if there is a <a href="#reqdn"><code>Require
+ ldap-dn</code></a> directive, and the DN in the directive matches
+ the DN fetched from the LDAP directory.</li>
- <pre class="prettyprint lang-config">Require ldap-filter "&(cell=*)(department=marketing)"</pre>
+ <li>Grant access if there is a <a href="#reqgroup"><code>Require ldap-group</code></a> directive, and
+ the DN fetched from the LDAP directory (or the username
+ passed by the client) occurs in the LDAP group or, potentially, in
+ one of its sub-groups.</li>
+ <li>Grant access if there is a <a href="#reqattribute">
+ <code>Require ldap-attribute</code></a>
+ directive, and the attribute fetched from the LDAP directory
+ matches the given value.</li>
- <p>The difference between the <code>Require ldap-filter</code> directive and the
- <code>Require ldap-attribute</code> directive is that <code>ldap-filter</code>
- performs a search operation on the LDAP directory using the specified search
- filter rather than a simple attribute comparison. If a simple attribute
- comparison is all that is required, the comparison operation performed by
- <code>ldap-attribute</code> will be faster than the search operation
- used by <code>ldap-filter</code> especially within a large directory.</p>
+ <li>Grant access if there is a <a href="#reqfilter">
+ <code>Require ldap-filter</code></a>
+ directive, and the search filter successfully finds a single user
+ object that matches the dn of the authenticated user.</li>
- <p>When using an <a href="../expr.html">expression</a> within the filter, care
- must be taken to ensure that LDAP filters are escaped correctly to guard against
- LDAP injection. The ldap function can be used for this purpose.</p>
+ <li>Grant access if there is a <a href="#reqsearch">
+ <code>Require ldap-search</code></a>
+ directive, and the search filter successfully returns a single
+ matching object with any distinguished name.</li>
-<pre class="prettyprint lang-config"><LocationMatch "^/dav/(?<SITENAME>[^/]+)/">
- Require ldap-filter "(memberOf=cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}},ou=Websites,o=Example)"
-</LocationMatch></pre>
+ <li>otherwise, deny or decline access</li>
+ </ul>
+ <p>Other <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> values may also
+ be used which may require loading additional authorization modules.</p>
+ <ul>
+ <li>Grant access to all successfully authenticated users if
+ there is a <a href="#requser"><code>Require valid-user</code></a>
+ directive. (requires <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code>)</li>
+ <li>Grant access if there is a <a href="#reqgroup"><code>Require group</code></a> directive, and
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> has been loaded with the
+ <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
+ directive set.</li>
-<h3><a name="reqsearch" id="reqsearch">Require ldap-search</a></h3>
+ <li>others...</li>
+ </ul>
- <p>The <code>Require ldap-search</code> directive allows the
- administrator to grant access based on a generic LDAP search filter using an
- <a href="../expr.html">expression</a>. If there is exactly one match to the search filter,
- regardless of the distinguished name, access is granted.</p>
- <p>The following directive would grant access to URLs that match the given objects in the
- LDAP server:</p>
+ <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the following directives during the
+ compare phase:</p>
-<pre class="prettyprint lang-config"><LocationMatch "^/dav/(?<SITENAME>[^/]+)/">
-Require ldap-search "(cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}} Website)"
-</LocationMatch></pre>
+ <table>
+
+ <tr>
+ <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> </td>
+ <td>The attribute specified in the
+ URL is used in compare operations for the <code>Require
+ ldap-user</code> operation.</td>
+ </tr>
- <p>Note: care must be taken to ensure that any expressions are properly escaped to guard
- against LDAP injection. The <strong>ldap</strong> function can be used as per the example
- above.</p>
+ <tr>
+ <td><code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code></td>
+ <td>Determines the behavior of the
+ <code>Require ldap-dn</code> directive.</td>
+ </tr>
+ <tr>
+ <td><code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code></td>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
+ <td>Determines the attribute to
+ use for comparisons in the <code>Require ldap-group</code>
+ directive.</td>
+ </tr>
- <ul>
- <li>
- Grant access to anyone who exists in the LDAP directory,
- using their UID for searches.
-<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)"
-Require valid-user</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code></td>
- </li>
+ <td>Specifies whether to use the
+ user DN or the username when doing comparisons for the
+ <code>Require ldap-group</code> directive.</td>
+ </tr>
- <li>
- The next example is the same as above; but with the fields
- that have useful defaults omitted. Also, note the use of a
- redundant LDAP server.
-<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example"
-Require valid-user</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code></td>
- </li>
+ <td>Determines the maximum depth of sub-groups that will be evaluated
+ during comparisons in the <code>Require ldap-group</code> directive.</td>
+ </tr>
- <li>
- The next example is similar to the previous one, but it
- uses the common name instead of the UID. Note that this
- could be problematical if multiple people in the directory
- share the same <code>cn</code>, because a search on <code>cn</code>
- <strong>must</strong> return exactly one entry. That's why
- this approach is not recommended: it's a better idea to
- choose an attribute that is guaranteed unique in your
- directory, such as <code>uid</code>.
-<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn"
-Require valid-user</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code></td>
- </li>
+ <td>Determines the attribute to use when obtaining sub-group members
+ of the current group during comparisons in the <code>Require ldap-group</code>
+ directive.</td>
+ </tr>
- <li>
- Grant access to anybody in the Administrators group. The
- users must authenticate using their UID.
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
-Require ldap-group cn=Administrators, o=Example</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code></td>
- </li>
+ <td>Specifies the LDAP objectClass values used to identify if queried directory
+ objects really are group objects (as opposed to user objects) during the
+ <code>Require ldap-group</code> directive's sub-group processing.</td>
+ </tr>
+ </table>
- <li>
- Grant access to anybody in the group whose name matches the
- hostname of the virtual host. In this example an
- <a href="../expr.html">expression</a> is used to build the filter.
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
-Require ldap-group cn=%{SERVER_NAME}, o=Example</pre>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
- </li>
+ <p>Apache's <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ directives are used during the authorization phase to ensure that
+ a user is allowed to access a resource. mod_authnz_ldap extends the
+ authorization types with <code>ldap-user</code>, <code>ldap-dn</code>,
+ <code>ldap-group</code>, <code>ldap-attribute</code> and
+ <code>ldap-filter</code>. Other authorization types may also be
+ used but may require that additional authorization modules be loaded.</p>
- <li>
- The next example assumes that everyone at Example who
- carries an alphanumeric pager will have an LDAP attribute
- of <code>qpagePagerID</code>. The example will grant access
- only to people (authenticated via their UID) who have
- alphanumeric pagers:
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*)
-Require valid-user</pre>
+ <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
+ within the LDAP require directives.</p>
- </li>
+<h3><a name="requser" id="requser">Require ldap-user</a></h3>
- <li>
- <p>The next example demonstrates the power of using filters
- to accomplish complicated administrative requirements.
- Without filters, it would have been necessary to create a
- new LDAP group and ensure that the group's members remain
- synchronized with the pager users. This becomes trivial
- with filters. The goal is to grant access to anyone who has
- a pager, plus grant access to Joe Manager, who doesn't
- have a pager, but does need to access the same
- resource:</p>
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager))
-Require valid-user</pre>
+ <p>The <code>Require ldap-user</code> directive specifies what
+ usernames can access the resource. Once
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has retrieved a unique DN from the
+ directory, it does an LDAP compare operation using the username
+ specified in the <code>Require ldap-user</code> to see if that username
+ is part of the just-fetched LDAP entry. Multiple users can be
+ granted access by putting multiple usernames on the line,
+ separated with spaces. If a username has a space in it, then it
+ must be surrounded with double quotes. Multiple users can also be
+ granted access by using multiple <code>Require ldap-user</code>
+ directives, with one user per line. For example, with a <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> of
+ <code>ldap://ldap/o=Example?cn</code> (i.e., <code>cn</code> is
+ used for searches), the following Require directives could be used
+ to restrict access:</p>
+<pre class="prettyprint lang-config">Require ldap-user "Barbara Jenson"
+Require ldap-user "Fred User"
+Require ldap-user "Joe Manager"</pre>
- <p>This last may look confusing at first, so it helps to
- evaluate what the search filter will look like based on who
- connects, as shown below. If
- Fred User connects as <code>fuser</code>, the filter would look
- like</p>
+ <p>Because of the way that <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> handles this
+ directive, Barbara Jenson could sign on as <em>Barbara
+ Jenson</em>, <em>Babs Jenson</em> or any other <code>cn</code> that
+ she has in her LDAP entry. Only the single <code>Require
+ ldap-user</code> line is needed to support all values of the attribute
+ in the user's entry.</p>
- <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))</code></p></div>
+ <p>If the <code>uid</code> attribute was used instead of the
+ <code>cn</code> attribute in the URL above, the above three lines
+ could be condensed to</p>
+<pre class="prettyprint lang-config">Require ldap-user bjenson fuser jmanager</pre>
- <p>The above search will only succeed if <em>fuser</em> has a
- pager. When Joe Manager connects as <em>jmanager</em>, the
- filter looks like</p>
- <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))</code></p></div>
- <p>The above search will succeed whether <em>jmanager</em>
- has a pager or not.</p>
- </li>
- </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingtls" id="usingtls">Using TLS</a></h2>
+<h3><a name="reqgroup" id="reqgroup">Require ldap-group</a></h3>
- <p>To use TLS, see the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> directives <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> and <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
+ <p>This directive specifies an LDAP group whose members are
+ allowed access. It takes the distinguished name of the LDAP
+ group. Note: Do not surround the group name with quotes.
+ For example, assume that the following entry existed in
+ the LDAP directory:</p>
+<div class="example"><pre>dn: cn=Administrators, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Barbara Jenson, o=Example
+uniqueMember: cn=Fred User, o=Example</pre></div>
- <p>An optional second parameter can be added to the
- <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> to override
- the default connection type set by <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.
- This will allow the connection established by an <em>ldap://</em> Url
- to be upgraded to a secure connection on the same port.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingssl" id="usingssl">Using SSL</a></h2>
+ <p>The following directive would grant access to both Fred and
+ Barbara:</p>
+<pre class="prettyprint lang-config">Require ldap-group cn=Administrators, o=Example</pre>
- <p>To use SSL, see the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> directives <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> and <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
- <p>To specify a secure LDAP server, use <em>ldaps://</em> in the
- <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>
- directive, instead of <em>ldap://</em>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exposed" id="exposed">Exposing Login Information</a></h2>
+ <p>Members can also be found within sub-groups of a specified LDAP group
+ if <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code>
+ is set to a value greater than 0. For example, assume the following entries
+ exist in the LDAP directory:</p>
+<div class="example"><pre>dn: cn=Employees, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Managers, o=Example
+uniqueMember: cn=Administrators, o=Example
+uniqueMember: cn=Users, o=Example
- <p>when this module performs <em>authentication</em>, ldap attributes specified
- in the <code class="directive"><a href="#authldapurl">authldapurl</a></code>
- directive are placed in environment variables with the prefix "AUTHENTICATE_".</p>
+dn: cn=Managers, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Bob Ellis, o=Example
+uniqueMember: cn=Tom Jackson, o=Example
- <p>when this module performs <em>authorization</em>, ldap attributes specified
- in the <code class="directive"><a href="#authldapurl">authldapurl</a></code>
- directive are placed in environment variables with the prefix "AUTHORIZE_".</p>
+dn: cn=Administrators, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Barbara Jenson, o=Example
+uniqueMember: cn=Fred User, o=Example
- <p>If the attribute field contains the username, common name
- and telephone number of a user, a CGI program will have access to
- this information without the need to make a second independent LDAP
- query to gather this additional information.</p>
+dn: cn=Users, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Allan Jefferson, o=Example
+uniqueMember: cn=Paul Tilley, o=Example
+uniqueMember: cn=Temporary Employees, o=Example
- <p>This has the potential to dramatically simplify the coding and
- configuration required in some web applications.</p>
+dn: cn=Temporary Employees, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Jim Swenson, o=Example
+uniqueMember: cn=Elliot Rhodes, o=Example</pre></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="activedirectory" id="activedirectory">Using Active Directory</a></h2>
+ <p>The following directives would allow access for Bob Ellis, Tom Jackson,
+ Barbara Jenson, Fred User, Allan Jefferson, and Paul Tilley but would not
+ allow access for Jim Swenson, or Elliot Rhodes (since they are at a
+ sub-group depth of 2):</p>
+<pre class="prettyprint lang-config">Require ldap-group cn=Employees, o=Example
+AuthLDAPMaxSubGroupDepth 1</pre>
- <p>An Active Directory installation may support multiple domains at the
- same time. To distinguish users between domains, an identifier called
- a User Principle Name (UPN) can be added to a user's entry in the
- directory. This UPN usually takes the form of the user's account
- name, followed by the domain components of the particular domain,
- for example <em>somebody@nz.example.com</em>.</p>
- <p>You may wish to configure the <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
- module to authenticate users present in any of the domains making up
- the Active Directory forest. In this way both
- <em>somebody@nz.example.com</em> and <em>someone@au.example.com</em>
- can be authenticated using the same query at the same time.</p>
+ <p>Behavior of this directive is modified by the <code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code>, <code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code>, <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code>, <code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code>, and <code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code>
+ directives.</p>
- <p>To make this practical, Active Directory supports the concept of
- a Global Catalog. This Global Catalog is a read only copy of selected
- attributes of all the Active Directory servers within the Active
- Directory forest. Querying the Global Catalog allows all the domains
- to be queried in a single query, without the query spanning servers
- over potentially slow links.</p>
- <p>If enabled, the Global Catalog is an independent directory server
- that runs on port 3268 (3269 for SSL). To search for a user, do a
- subtree search for the attribute <em>userPrincipalName</em>, with
- an empty search root, like so:</p>
+<h3><a name="reqdn" id="reqdn">Require ldap-dn</a></h3>
-<pre class="prettyprint lang-config">AuthLDAPBindDN apache@example.com
-AuthLDAPBindPassword password
-AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub</pre>
+ <p>The <code>Require ldap-dn</code> directive allows the administrator
+ to grant access based on distinguished names. It specifies a DN
+ that must match for access to be granted. If the distinguished
+ name that was retrieved from the directory server matches the
+ distinguished name in the <code>Require ldap-dn</code>, then
+ authorization is granted. Note: do not surround the distinguished
+ name with quotes.</p>
+ <p>The following directive would grant access to a specific
+ DN:</p>
+<pre class="prettyprint lang-config">Require ldap-dn cn=Barbara Jenson, o=Example</pre>
- <p>Users will need to enter their User Principal Name as a login, in
- the form <em>somebody@nz.example.com</em>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="frontpage" id="frontpage">Using Microsoft
- FrontPage with mod_authnz_ldap</a></h2>
+ <p>Behavior of this directive is modified by the <code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code>
+ directive.</p>
- <p>Normally, FrontPage uses FrontPage-web-specific user/group
- files (i.e., the <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> and
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> modules) to handle all
- authentication. Unfortunately, it is not possible to just
- change to LDAP authentication by adding the proper directives,
- because it will break the <em>Permissions</em> forms in
- the FrontPage client, which attempt to modify the standard
- text-based authorization files.</p>
- <p>Once a FrontPage web has been created, adding LDAP
- authentication to it is a matter of adding the following
- directives to <em>every</em> <code>.htaccess</code> file
- that gets created in the web</p>
-<pre class="prettyprint lang-config">AuthLDAPURL "the url"
-AuthGroupFile mygroupfile
-Require group mygroupfile</pre>
+<h3><a name="reqattribute" id="reqattribute">Require ldap-attribute</a></h3>
+ <p>The <code>Require ldap-attribute</code> directive allows the
+ administrator to grant access based on attributes of the authenticated
+ user in the LDAP directory. If the attribute in the directory
+ matches the value given in the configuration, access is granted.</p>
-<h3><a name="howitworks" id="howitworks">How It Works</a></h3>
+ <p>The following directive would grant access to anyone with
+ the attribute employeeType = active</p>
- <p>FrontPage restricts access to a web by adding the <code>Require
- valid-user</code> directive to the <code>.htaccess</code>
- files. The <code>Require valid-user</code> directive will succeed for
- any user who is valid <em>as far as LDAP is
- concerned</em>. This means that anybody who has an entry in
- the LDAP directory is considered a valid user, whereas FrontPage
- considers only those people in the local user file to be
- valid. By substituting the ldap-group with group file authorization,
- Apache is allowed to consult the local user file (which is managed by
- FrontPage) - instead of LDAP - when handling authorizing the user.</p>
+ <pre class="prettyprint lang-config">Require ldap-attribute "employeeType=active"</pre>
- <p>Once directives have been added as specified above,
- FrontPage users will be able to perform all management
- operations from the FrontPage client.</p>
+ <p>Multiple attribute/value pairs can be specified on the same line
+ separated by spaces or they can be specified in multiple
+ <code>Require ldap-attribute</code> directives. The effect of listing
+ multiple attribute/values pairs is an OR operation. Access will be
+ granted if any of the listed attribute values match the value of the
+ corresponding attribute in the user object. If the value of the
+ attribute contains a space, only the value must be within double quotes.</p>
-<h3><a name="fpcaveats" id="fpcaveats">Caveats</a></h3>
+ <p>The following directive would grant access to anyone with
+ the city attribute equal to "San Jose" or status equal to "Active"</p>
- <ul>
- <li>When choosing the LDAP URL, the attribute to use for
- authentication should be something that will also be valid
- for putting into a <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> user file.
- The user ID is ideal for this.</li>
+ <pre class="prettyprint lang-config">Require ldap-attribute city="San Jose" "status=active"</pre>
- <li>When adding users via FrontPage, FrontPage administrators
- should choose usernames that already exist in the LDAP
- directory (for obvious reasons). Also, the password that the
- administrator enters into the form is ignored, since Apache
- will actually be authenticating against the password in the
- LDAP database, and not against the password in the local user
- file. This could cause confusion for web administrators.</li>
-
- <li>Apache must be compiled with <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>,
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> and
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> in order to
- use FrontPage support. This is because Apache will still use
- the <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> group file for determine
- the extent of a user's access to the FrontPage web.</li>
- <li>The directives must be put in the <code>.htaccess</code>
- files. Attempting to put them inside <code class="directive"><a href="../mod/core.html#location"><Location></a></code> or <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> directives won't work. This
- is because <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has to be able to grab
- the <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
- directive that is found in FrontPage <code>.htaccess</code>
- files so that it knows where to look for the valid user list. If
- the <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> directives aren't in the same
- <code>.htaccess</code> file as the FrontPage directives, then
- the hack won't work, because <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will
- never get a chance to process the <code>.htaccess</code> file,
- and won't be able to find the FrontPage-managed user file.</li>
- </ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPAuthorizePrefix" id="AuthLDAPAuthorizePrefix">AuthLDAPAuthorizePrefix</a> <a name="authldapauthorizeprefix" id="authldapauthorizeprefix">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the prefix for environment variables set during
-authorization</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPAuthorizePrefix <em>prefix</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPAuthorizePrefix AUTHORIZE_</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
-</table>
- <p>This directive allows you to override the prefix used for environment
- variables set during LDAP authorization. If <em>AUTHENTICATE_</em> is
- specified, consumers of these environment variables see the same information
- whether LDAP has performed authentication, authorization, or both.</p>
+<h3><a name="reqfilter" id="reqfilter">Require ldap-filter</a></h3>
+
+ <p>The <code>Require ldap-filter</code> directive allows the
+ administrator to grant access based on a complex LDAP search filter.
+ If the dn returned by the filter search matches the authenticated user
+ dn, access is granted.</p>
- <div class="note"><h3>Note</h3>
- No authorization variables are set when a user is authorized on the basis of
- <code>Require valid-user</code>.
- </div>
+ <p>The following directive would grant access to anyone having a cell phone
+ and is in the marketing department</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPBindAuthoritative" id="AuthLDAPBindAuthoritative">AuthLDAPBindAuthoritative</a> <a name="authldapbindauthoritative" id="authldapbindauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines if other authentication providers are used when a user can be mapped to a DN but the server cannot successfully bind with the user's credentials.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindAuthoritative<em>off|on</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPBindAuthoritative on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>By default, subsequent authentication providers are only queried if a
- user cannot be mapped to a DN, but not if the user can be mapped to a DN and their
- password cannot be verified with an LDAP bind.
- If <code class="directive"><a href="#authldapbindauthoritative">AuthLDAPBindAuthoritative</a></code>
- is set to <em>off</em>, other configured authentication modules will have
- a chance to validate the user if the LDAP bind (with the current user's credentials)
- fails for any reason.</p>
- <p> This allows users present in both LDAP and
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> to authenticate
- when the LDAP server is available but the user's account is locked or password
- is otherwise unusable.</p>
+ <pre class="prettyprint lang-config">Require ldap-filter "&(cell=*)(department=marketing)"</pre>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li>
-<li><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPBindDN" id="AuthLDAPBindDN">AuthLDAPBindDN</a> <a name="authldapbinddn" id="authldapbinddn">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Optional DN to use in binding to the LDAP server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindDN <em>distinguished-name</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>An optional DN used to bind to the server when searching for
- entries. If not provided, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will use
- an anonymous bind.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPBindPassword" id="AuthLDAPBindPassword">AuthLDAPBindPassword</a> <a name="authldapbindpassword" id="authldapbindpassword">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Password used in conjuction with the bind DN</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindPassword <em>password</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td><em>exec:</em> was added in 2.4.5.</td></tr>
-</table>
- <p>A bind password to use in conjunction with the bind DN. Note
- that the bind password is probably sensitive data, and should be
- properly protected. You should only use the <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code> and <code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code> if you
- absolutely need them to search the directory.</p>
+ <p>The difference between the <code>Require ldap-filter</code> directive and the
+ <code>Require ldap-attribute</code> directive is that <code>ldap-filter</code>
+ performs a search operation on the LDAP directory using the specified search
+ filter rather than a simple attribute comparison. If a simple attribute
+ comparison is all that is required, the comparison operation performed by
+ <code>ldap-attribute</code> will be faster than the search operation
+ used by <code>ldap-filter</code> especially within a large directory.</p>
- <p>If the value begins with exec: the resulting command will be
- executed and the first line returned to standard output by the
- program will be used as the password.</p>
-<pre class="prettyprint lang-config">#Password used as-is
-AuthLDAPBindPassword secret
+ <p>When using an <a href="../expr.html">expression</a> within the filter, care
+ must be taken to ensure that LDAP filters are escaped correctly to guard against
+ LDAP injection. The ldap function can be used for this purpose.</p>
-#Run /path/to/program to get my password
-AuthLDAPBindPassword exec:/path/to/program
+<pre class="prettyprint lang-config"><LocationMatch "^/dav/(?<SITENAME>[^/]+)/">
+ Require ldap-filter "(memberOf=cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}},ou=Websites,o=Example)"
+</LocationMatch></pre>
-#Run /path/to/otherProgram and provide arguments
-AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPCharsetConfig" id="AuthLDAPCharsetConfig">AuthLDAPCharsetConfig</a> <a name="authldapcharsetconfig" id="authldapcharsetconfig">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Language to charset conversion configuration file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCharsetConfig <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>The <code class="directive">AuthLDAPCharsetConfig</code> directive sets the location
- of the language to charset conversion configuration file. <var>File-path</var> is relative
- to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. This file specifies
- the list of language extensions to character sets.
- Most administrators use the provided <code>charset.conv</code>
- file, which associates common language extensions to character sets.</p>
+<h3><a name="reqsearch" id="reqsearch">Require ldap-search</a></h3>
- <p>The file contains lines in the following format:</p>
+ <p>The <code>Require ldap-search</code> directive allows the
+ administrator to grant access based on a generic LDAP search filter using an
+ <a href="../expr.html">expression</a>. If there is exactly one match to the search filter,
+ regardless of the distinguished name, access is granted.</p>
- <div class="example"><p><code>
- <var>Language-Extension</var> <var>charset</var> [<var>Language-String</var>] ...
- </code></p></div>
+ <p>The following directive would grant access to URLs that match the given objects in the
+ LDAP server:</p>
- <p>The case of the extension does not matter. Blank lines, and lines
- beginning with a hash character (<code>#</code>) are ignored.</p>
+<pre class="prettyprint lang-config"><LocationMatch "^/dav/(?<SITENAME>[^/]+)/">
+Require ldap-search "(cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}} Website)"
+</LocationMatch></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPCompareAsUser" id="AuthLDAPCompareAsUser">AuthLDAPCompareAsUser</a> <a name="authldapcompareasuser" id="authldapcompareasuser">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the authenticated user's credentials to perform authorization comparisons</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCompareAsUser on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPCompareAsUser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
-</table>
- <p>When set, and <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has authenticated the
- user, LDAP comparisons for authorization use the queried distinguished name (DN)
- and HTTP basic authentication password of the authenticated user instead of
- the servers configured credentials.</p>
- <p> The <em>ldap-attribute</em>, <em>ldap-user</em>, and <em>ldap-group</em> (single-level only)
- authorization checks use comparisons.</p>
+ <p>Note: care must be taken to ensure that any expressions are properly escaped to guard
+ against LDAP injection. The <strong>ldap</strong> function can be used as per the example
+ above.</p>
- <p>This directive only has effect on the comparisons performed during
- nested group processing when <code class="directive"><a href="#authldapsearchasuser">
- AuthLDAPSearchAsUser</a></code> is also enabled.</p>
- <p> This directive should only be used when your LDAP server doesn't
- accept anonymous comparisons and you cannot use a dedicated
- <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
-<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPCompareDNOnServer" id="AuthLDAPCompareDNOnServer">AuthLDAPCompareDNOnServer</a> <a name="authldapcomparednonserver" id="authldapcomparednonserver">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the LDAP server to compare the DNs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCompareDNOnServer on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPCompareDNOnServer on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>When set, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will use the LDAP
- server to compare the DNs. This is the only foolproof way to
- compare DNs. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will search the
- directory for the DN specified with the <a href="#reqdn"><code>Require dn</code></a> directive, then,
- retrieve the DN and compare it with the DN retrieved from the user
- entry. If this directive is not set,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> simply does a string comparison. It
- is possible to get false negatives with this approach, but it is
- much faster. Note the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache can speed up
- DN comparison in most situations.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPDereferenceAliases" id="AuthLDAPDereferenceAliases">AuthLDAPDereferenceAliases</a> <a name="authldapdereferencealiases" id="authldapdereferencealiases">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>When will the module de-reference aliases</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPDereferenceAliases never|searching|finding|always</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPDereferenceAliases always</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>This directive specifies when <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will
- de-reference aliases during LDAP operations. The default is
- <code>always</code>.</p>
+ <ul>
+ <li>
+ Grant access to anyone who exists in the LDAP directory,
+ using their UID for searches.
+<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)"
+Require valid-user</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPGroupAttribute" id="AuthLDAPGroupAttribute">AuthLDAPGroupAttribute</a> <a name="authldapgroupattribute" id="authldapgroupattribute">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>LDAP attributes used to identify the user members of
-groups.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPGroupAttribute <em>attribute</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPGroupAttribute member uniquemember</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>This directive specifies which LDAP attributes are used to
- check for user members within groups. Multiple attributes can be used
- by specifying this directive multiple times. If not specified,
- then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the <code>member</code> and
- <code>uniquemember</code> attributes.</p>
+ </li>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPGroupAttributeIsDN" id="AuthLDAPGroupAttributeIsDN">AuthLDAPGroupAttributeIsDN</a> <a name="authldapgroupattributeisdn" id="authldapgroupattributeisdn">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the DN of the client username when checking for
-group membership</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPGroupAttributeIsDN on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPGroupAttributeIsDN on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>When set <code>on</code>, this directive says to use the
- distinguished name of the client username when checking for group
- membership. Otherwise, the username will be used. For example,
- assume that the client sent the username <code>bjenson</code>,
- which corresponds to the LDAP DN <code>cn=Babs Jenson,
- o=Example</code>. If this directive is set,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will check if the group has
- <code>cn=Babs Jenson, o=Example</code> as a member. If this
- directive is not set, then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will
- check if the group has <code>bjenson</code> as a member.</p>
+ <li>
+ The next example is the same as above; but with the fields
+ that have useful defaults omitted. Also, note the use of a
+ redundant LDAP server.
+<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example"
+Require valid-user</pre>
+
+ </li>
+
+ <li>
+ The next example is similar to the previous one, but it
+ uses the common name instead of the UID. Note that this
+ could be problematical if multiple people in the directory
+ share the same <code>cn</code>, because a search on <code>cn</code>
+ <strong>must</strong> return exactly one entry. That's why
+ this approach is not recommended: it's a better idea to
+ choose an attribute that is guaranteed unique in your
+ directory, such as <code>uid</code>.
+<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn"
+Require valid-user</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPInitialBindAsUser" id="AuthLDAPInitialBindAsUser">AuthLDAPInitialBindAsUser</a> <a name="authldapinitialbindasuser" id="authldapinitialbindasuser">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines if the server does the initial DN lookup using the basic authentication users'
-own username, instead of anonymously or with hard-coded credentials for the server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPInitialBindAsUser <em>off|on</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPInitialBindAsUser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
-</table>
- <p>By default, the server either anonymously, or with a dedicated user and
- password, converts the basic authentication username into an LDAP
- distinguished name (DN). This directive forces the server to use the verbatim username
- and password provided by the incoming user to perform the initial DN
- search.</p>
+ </li>
- <p> If the verbatim username can't directly bind, but needs some
- cosmetic transformation, see <code class="directive"><a href="#authldapinitialbindpattern">
- AuthLDAPInitialBindPattern</a></code>.</p>
+ <li>
+ Grant access to anybody in the Administrators group. The
+ users must authenticate using their UID.
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
+Require ldap-group cn=Administrators, o=Example</pre>
- <p> This directive should only be used when your LDAP server doesn't
- accept anonymous searches and you cannot use a dedicated
- <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
+ </li>
- <div class="note"><h3>Not available with authorization-only</h3>
- This directive can only be used if this module authenticates the user, and
- has no effect when this module is used exclusively for authorization.
- </div>
+ <li>
+ Grant access to anybody in the group whose name matches the
+ hostname of the virtual host. In this example an
+ <a href="../expr.html">expression</a> is used to build the filter.
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
+Require ldap-group cn=%{SERVER_NAME}, o=Example</pre>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#authldapinitialbindpattern">AuthLDAPInitialBindPattern</a></code></li>
-<li><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></li>
-<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
-<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPInitialBindPattern" id="AuthLDAPInitialBindPattern">AuthLDAPInitialBindPattern</a> <a name="authldapinitialbindpattern" id="authldapinitialbindpattern">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the transformation of the basic authentication username to be used when binding to the LDAP server
-to perform a DN lookup</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPInitialBindPattern<em><var>regex</var> <var>substitution</var></em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPInitialBindPattern (.*) $1 (remote username used verbatim)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
-</table>
- <p>If <code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code> is set to
- <em>ON</em>, the basic authentication username will be transformed according to the
- regular expression and substituion arguments.</p>
+ </li>
- <p> The regular expression argument is compared against the current basic authentication username.
- The substitution argument may contain backreferences, but has no other variable interpolation.</p>
+ <li>
+ The next example assumes that everyone at Example who
+ carries an alphanumeric pager will have an LDAP attribute
+ of <code>qpagePagerID</code>. The example will grant access
+ only to people (authenticated via their UID) who have
+ alphanumeric pagers:
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*)
+Require valid-user</pre>
- <p> This directive should only be used when your LDAP server doesn't
- accept anonymous searches and you cannot use a dedicated
- <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
+ </li>
- <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) $1@example.com</pre>
+ <li>
+ <p>The next example demonstrates the power of using filters
+ to accomplish complicated administrative requirements.
+ Without filters, it would have been necessary to create a
+ new LDAP group and ensure that the group's members remain
+ synchronized with the pager users. This becomes trivial
+ with filters. The goal is to grant access to anyone who has
+ a pager, plus grant access to Joe Manager, who doesn't
+ have a pager, but does need to access the same
+ resource:</p>
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager))
+Require valid-user</pre>
- <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com</pre>
+ <p>This last may look confusing at first, so it helps to
+ evaluate what the search filter will look like based on who
+ connects, as shown below. If
+ Fred User connects as <code>fuser</code>, the filter would look
+ like</p>
- <div class="note"><h3>Not available with authorization-only</h3>
- This directive can only be used if this module authenticates the user, and
- has no effect when this module is used exclusively for authorization.
- </div>
- <div class="note"><h3>debugging</h3>
- The substituted DN is recorded in the environment variable
- <em>LDAP_BINDASUSER</em>. If the regular expression does not match the input,
- the verbatim username is used.
- </div>
+ <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))</code></p></div>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
-<li><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPMaxSubGroupDepth" id="AuthLDAPMaxSubGroupDepth">AuthLDAPMaxSubGroupDepth</a> <a name="authldapmaxsubgroupdepth" id="authldapmaxsubgroupdepth">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the maximum sub-group nesting depth that will be
-evaluated before the user search is discontinued.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPMaxSubGroupDepth <var>Number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPMaxSubGroupDepth 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.0 and later, defaulted to 10 in 2.4.x and early 2.5</td></tr>
-</table>
- <p>When this directive is set to a non-zero value <code>X</code>
- combined with use of the <code>Require ldap-group someGroupDN</code>
- directive, the provided user credentials will be searched for
- as a member of the <code>someGroupDN</code> directory object or of
- any group member of the current group up to the maximum nesting
- level <code>X</code> specified by this directive.</p>
- <p>See the <a href="#reqgroup"><code>Require ldap-group</code></a>
- section for a more detailed example.</p>
+ <p>The above search will only succeed if <em>fuser</em> has a
+ pager. When Joe Manager connects as <em>jmanager</em>, the
+ filter looks like</p>
- <div class="note"><h3>Nested groups performance</h3>
- <p> When <code class="directive">AuthLDAPSubGroupAttribute</code> overlaps with
- <code class="directive">AuthLDAPGroupAttribute</code> (as it does by default and
- as required by common LDAP schemas), uncached searching for subgroups in
- large groups can be very slow. If you use large, non-nested groups, keep
- <code class="directive">AuthLDAPMaxSubGroupDepth</code> set to zero.</p>
- </div>
+ <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))</code></p></div>
+ <p>The above search will succeed whether <em>jmanager</em>
+ has a pager or not.</p>
+ </li>
+ </ul>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usingtls" id="usingtls">Using TLS</a></h2>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPRemoteUserAttribute" id="AuthLDAPRemoteUserAttribute">AuthLDAPRemoteUserAttribute</a> <a name="authldapremoteuserattribute" id="authldapremoteuserattribute">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the value of the attribute returned during the user
-query to set the REMOTE_USER environment variable</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPRemoteUserAttribute uid</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>If this directive is set, the value of the
- <code>REMOTE_USER</code> environment variable will be set to the
- value of the attribute specified. Make sure that this attribute is
- included in the list of attributes in the AuthLDAPUrl definition,
- otherwise this directive will have no effect. This directive, if
- present, takes precedence over <code class="directive"><a href="#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></code>. This
- directive is useful should you want people to log into a website
- using an email address, but a backend application expects the
- username as a userid.</p>
- <p> This directive only has effect when this module is used for
- authentication.</p>
+ <p>To use TLS, see the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> directives <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> and <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPRemoteUserIsDN" id="AuthLDAPRemoteUserIsDN">AuthLDAPRemoteUserIsDN</a> <a name="authldapremoteuserisdn" id="authldapremoteuserisdn">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the DN of the client username to set the REMOTE_USER
-environment variable</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPRemoteUserIsDN on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPRemoteUserIsDN off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>If this directive is set to on, the value of the
- <code>REMOTE_USER</code> environment variable will be set to the full
- distinguished name of the authenticated user, rather than just
- the username that was passed by the client. It is turned off by
- default.</p>
- <p> This directive only has effect when this module is used for
- authentication.</p>
+ <p>An optional second parameter can be added to the
+ <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> to override
+ the default connection type set by <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.
+ This will allow the connection established by an <em>ldap://</em> Url
+ to be upgraded to a secure connection on the same port.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usingssl" id="usingssl">Using SSL</a></h2>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPSearchAsUser" id="AuthLDAPSearchAsUser">AuthLDAPSearchAsUser</a> <a name="authldapsearchasuser" id="authldapsearchasuser">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the authenticated user's credentials to perform authorization searches</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPSearchAsUser on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPSearchAsUser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.6 and later</td></tr>
-</table>
- <p>When set, and <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has authenticated the
- user, LDAP searches for authorization use the queried distinguished name (DN)
- and HTTP basic authentication password of the authenticated user instead of
- the servers configured credentials.</p>
+ <p>To use SSL, see the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> directives <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> and <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
- <p> The <em>ldap-filter</em> and <em>ldap-dn</em> authorization
- checks use searches.</p>
+ <p>To specify a secure LDAP server, use <em>ldaps://</em> in the
+ <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>
+ directive, instead of <em>ldap://</em>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="exposed" id="exposed">Exposing Login Information</a></h2>
- <p>This directive only has effect on the comparisons performed during
- nested group processing when <code class="directive"><a href="#authldapcompareasuser">
- AuthLDAPCompareAsUser</a></code> is also enabled.</p>
+ <p>when this module performs <em>authentication</em>, ldap attributes specified
+ in the <code class="directive"><a href="#authldapurl">authldapurl</a></code>
+ directive are placed in environment variables with the prefix "AUTHENTICATE_".</p>
- <p> This directive should only be used when your LDAP server doesn't
- accept anonymous searches and you cannot use a dedicated
- <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
+ <p>when this module performs <em>authorization</em>, ldap attributes specified
+ in the <code class="directive"><a href="#authldapurl">authldapurl</a></code>
+ directive are placed in environment variables with the prefix "AUTHORIZE_".</p>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
-<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPSubGroupAttribute" id="AuthLDAPSubGroupAttribute">AuthLDAPSubGroupAttribute</a> <a name="authldapsubgroupattribute" id="authldapsubgroupattribute">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the attribute labels, one value per
-directive line, used to distinguish the members of the current group that
-are groups.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPSubGroupAttribute <em>attribute</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPSubgroupAttribute member uniquemember</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.0 and later</td></tr>
-</table>
- <p>An LDAP group object may contain members that are users and
- members that are groups (called nested or sub groups). The
- <code>AuthLDAPSubGroupAttribute</code> directive identifies the
- labels of group members and the <code>AuthLDAPGroupAttribute</code>
- directive identifies the labels of the user members. Multiple
- attributes can be used by specifying this directive multiple times.
- If not specified, then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the
- <code>member</code> and <code>uniqueMember</code> attributes.</p>
+ <p>If the attribute field contains the username, common name
+ and telephone number of a user, a CGI program will have access to
+ this information without the need to make a second independent LDAP
+ query to gather this additional information.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPSubGroupClass" id="AuthLDAPSubGroupClass">AuthLDAPSubGroupClass</a> <a name="authldapsubgroupclass" id="authldapsubgroupclass">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies which LDAP objectClass values identify directory
-objects that are groups during sub-group processing.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPSubGroupClass <em>LdapObjectClass</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.0 and later</td></tr>
-</table>
- <p>An LDAP group object may contain members that are users and
- members that are groups (called nested or sub groups). The
- <code>AuthLDAPSubGroupAttribute</code> directive identifies the
- labels of members that may be sub-groups of the current group
- (as opposed to user members). The <code>AuthLDAPSubGroupClass</code>
- directive specifies the LDAP objectClass values used in verifying that
- these potential sub-groups are in fact group objects. Verified sub-groups
- can then be searched for more user or sub-group members. Multiple
- attributes can be used by specifying this directive multiple times.
- If not specified, then <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> uses the
- <code>groupOfNames</code> and <code>groupOfUniqueNames</code> values.</p>
+ <p>This has the potential to dramatically simplify the coding and
+ configuration required in some web applications.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPUrl" id="AuthLDAPUrl">AuthLDAPUrl</a> <a name="authldapurl" id="authldapurl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>URL specifying the LDAP search parameters</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPUrl <em>url [NONE|SSL|TLS|STARTTLS]</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>An RFC 2255 URL which specifies the LDAP search parameters
- to use. The syntax of the URL is</p>
-<div class="example"><p><code>ldap://host:port/basedn?attribute?scope?filter</code></p></div>
- <p>If you want to specify more than one LDAP URL that Apache should try in turn, the syntax is:</p>
-<pre class="prettyprint lang-config">AuthLDAPUrl "ldap://ldap1.example.com ldap2.example.com/dc=..."</pre>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="activedirectory" id="activedirectory">Using Active Directory</a></h2>
-<p><em><strong>Caveat: </strong>If you specify multiple servers, you need to enclose the entire URL string in quotes;
-otherwise you will get an error: "AuthLDAPURL takes one argument, URL to define LDAP connection.." </em>
-You can of course use search parameters on each of these.</p>
+ <p>An Active Directory installation may support multiple domains at the
+ same time. To distinguish users between domains, an identifier called
+ a User Principle Name (UPN) can be added to a user's entry in the
+ directory. This UPN usually takes the form of the user's account
+ name, followed by the domain components of the particular domain,
+ for example <em>somebody@nz.example.com</em>.</p>
-<dl>
-<dt>ldap</dt>
+ <p>You may wish to configure the <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
+ module to authenticate users present in any of the domains making up
+ the Active Directory forest. In this way both
+ <em>somebody@nz.example.com</em> and <em>someone@au.example.com</em>
+ can be authenticated using the same query at the same time.</p>
- <dd>For regular ldap, use the
- string <code>ldap</code>. For secure LDAP, use <code>ldaps</code>
- instead. Secure LDAP is only available if Apache was linked
- to an LDAP library with SSL support.</dd>
+ <p>To make this practical, Active Directory supports the concept of
+ a Global Catalog. This Global Catalog is a read only copy of selected
+ attributes of all the Active Directory servers within the Active
+ Directory forest. Querying the Global Catalog allows all the domains
+ to be queried in a single query, without the query spanning servers
+ over potentially slow links.</p>
-<dt>host:port</dt>
+ <p>If enabled, the Global Catalog is an independent directory server
+ that runs on port 3268 (3269 for SSL). To search for a user, do a
+ subtree search for the attribute <em>userPrincipalName</em>, with
+ an empty search root, like so:</p>
- <dd>
- <p>The name/port of the ldap server (defaults to
- <code>localhost:389</code> for <code>ldap</code>, and
- <code>localhost:636</code> for <code>ldaps</code>). To
- specify multiple, redundant LDAP servers, just list all
- servers, separated by spaces. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
- will try connecting to each server in turn, until it makes a
- successful connection. If multiple ldap servers are specified,
- then entire LDAP URL must be encapsulated in double quotes.</p>
+<pre class="prettyprint lang-config">AuthLDAPBindDN apache@example.com
+AuthLDAPBindPassword password
+AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub</pre>
- <p>Once a connection has been made to a server, that
- connection remains active for the life of the
- <code class="program"><a href="../programs/httpd.html">httpd</a></code> process, or until the LDAP server goes
- down.</p>
- <p>If the LDAP server goes down and breaks an existing
- connection, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will attempt to
- re-connect, starting with the primary server, and trying
- each redundant server in turn. Note that this is different
- than a true round-robin search.</p>
- </dd>
+ <p>Users will need to enter their User Principal Name as a login, in
+ the form <em>somebody@nz.example.com</em>.</p>
-<dt>basedn</dt>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="frontpage" id="frontpage">Using Microsoft
+ FrontPage with mod_authnz_ldap</a></h2>
- <dd>The DN of the branch of the
- directory where all searches should start from. At the very
- least, this must be the top of your directory tree, but
- could also specify a subtree in the directory.</dd>
+ <p>Normally, FrontPage uses FrontPage-web-specific user/group
+ files (i.e., the <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> and
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> modules) to handle all
+ authentication. Unfortunately, it is not possible to just
+ change to LDAP authentication by adding the proper directives,
+ because it will break the <em>Permissions</em> forms in
+ the FrontPage client, which attempt to modify the standard
+ text-based authorization files.</p>
-<dt>attribute</dt>
+ <p>Once a FrontPage web has been created, adding LDAP
+ authentication to it is a matter of adding the following
+ directives to <em>every</em> <code>.htaccess</code> file
+ that gets created in the web</p>
+<pre class="prettyprint lang-config">AuthLDAPURL "the url"
+AuthGroupFile mygroupfile
+Require group mygroupfile</pre>
- <dd>The attribute to search for.
- Although RFC 2255 allows a comma-separated list of
- attributes, only the first attribute will be used, no
- matter how many are provided. If no attributes are
- provided, the default is to use <code>uid</code>. It's a good
- idea to choose an attribute that will be unique across all
- entries in the subtree you will be using. All attributes
- listed will be put into the environment with an AUTHENTICATE_ prefix
- for use by other modules.</dd>
-<dt>scope</dt>
+<h3><a name="howitworks" id="howitworks">How It Works</a></h3>
- <dd>The scope of the search. Can be either <code>one</code> or
- <code>sub</code>. Note that a scope of <code>base</code> is
- also supported by RFC 2255, but is not supported by this
- module. If the scope is not provided, or if <code>base</code> scope
- is specified, the default is to use a scope of
- <code>sub</code>.</dd>
+ <p>FrontPage restricts access to a web by adding the <code>Require
+ valid-user</code> directive to the <code>.htaccess</code>
+ files. The <code>Require valid-user</code> directive will succeed for
+ any user who is valid <em>as far as LDAP is
+ concerned</em>. This means that anybody who has an entry in
+ the LDAP directory is considered a valid user, whereas FrontPage
+ considers only those people in the local user file to be
+ valid. By substituting the ldap-group with group file authorization,
+ Apache is allowed to consult the local user file (which is managed by
+ FrontPage) - instead of LDAP - when handling authorizing the user.</p>
-<dt>filter</dt>
+ <p>Once directives have been added as specified above,
+ FrontPage users will be able to perform all management
+ operations from the FrontPage client.</p>
- <dd>A valid LDAP search filter. If
- not provided, defaults to <code>(objectClass=*)</code>, which
- will search for all objects in the tree. Filters are
- limited to approximately 8000 characters (the definition of
- <code>MAX_STRING_LEN</code> in the Apache source code). This
- should be more than sufficient for any application. The keyword
- <code>none</code> disables the use of a filter; this is required
- by some primitive LDAP servers.</dd>
-</dl>
- <p>When doing searches, the attribute, filter and username passed
- by the HTTP client are combined to create a search filter that
- looks like
- <code>(&(<em>filter</em>)(<em>attribute</em>=<em>username</em>))</code>.</p>
+<h3><a name="fpcaveats" id="fpcaveats">Caveats</a></h3>
- <p>For example, consider an URL of
- <code>ldap://ldap.example.com/o=Example?cn?sub?(posixid=*)</code>. When
- a client attempts to connect using a username of <code>Babs
- Jenson</code>, the resulting search filter will be
- <code>(&(posixid=*)(cn=Babs Jenson))</code>.</p>
+ <ul>
+ <li>When choosing the LDAP URL, the attribute to use for
+ authentication should be something that will also be valid
+ for putting into a <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> user file.
+ The user ID is ideal for this.</li>
- <p>An optional parameter can be added to allow the LDAP Url to override
- the connection type. This parameter can be one of the following:</p>
+ <li>When adding users via FrontPage, FrontPage administrators
+ should choose usernames that already exist in the LDAP
+ directory (for obvious reasons). Also, the password that the
+ administrator enters into the form is ignored, since Apache
+ will actually be authenticating against the password in the
+ LDAP database, and not against the password in the local user
+ file. This could cause confusion for web administrators.</li>
-<dl>
- <dt>NONE</dt>
- <dd>Establish an unsecure connection on the default LDAP port. This
- is the same as <code>ldap://</code> on port 389.</dd>
- <dt>SSL</dt>
- <dd>Establish a secure connection on the default secure LDAP port.
- This is the same as <code>ldaps://</code></dd>
- <dt>TLS | STARTTLS</dt>
- <dd>Establish an upgraded secure connection on the default LDAP port.
- This connection will be initiated on port 389 by default and then
- upgraded to a secure connection on the same port.</dd>
-</dl>
+
+ <li>Apache must be compiled with <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>,
+ <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> and
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> in order to
+ use FrontPage support. This is because Apache will still use
+ the <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> group file for determine
+ the extent of a user's access to the FrontPage web.</li>
- <p>See above for examples of <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> URLs.</p>
+ <li>The directives must be put in the <code>.htaccess</code>
+ files. Attempting to put them inside <code class="directive"><a href="../mod/core.html#location"><Location></a></code> or <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> directives won't work. This
+ is because <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> has to be able to grab
+ the <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
+ directive that is found in FrontPage <code>.htaccess</code>
+ files so that it knows where to look for the valid user list. If
+ the <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> directives aren't in the same
+ <code>.htaccess</code> file as the FrontPage directives, then
+ the hack won't work, because <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> will
+ never get a chance to process the <code>.htaccess</code> file,
+ and won't be able to find the FrontPage-managed user file.</li>
+ </ul>
</div>
</div>
<li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="contents" id="contents">Sommaire</a></h2>
-
- <ul>
- <li>
- <a href="#operation">Mode opératoire</a>
+<div class="directive-section"><h2><a name="authldapauthorizeprefix" id="authldapauthorizeprefix">Directive</a> <a name="AuthLDAPAuthorizePrefix" id="AuthLDAPAuthorizePrefix">AuthLDAPAuthorizePrefix</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le préfixe ajouté aux variables d'environnement
+durant la phase d'autorisation</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPAuthorizePrefix <em>préfixe</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPAuthorizePrefix AUTHORIZE_</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le préfixe ajouté aux
+ variables d'environnement durant la phase d'autorisation. Si la
+ valeur spécifiée est <em>AUTHENTICATE_</em>, les utilisateurs de ces
+ variables d'environnement verront les mêmes informations, que le
+ serveur effectue une authentification, une autorisation, ou les
+ deux.</p>
- <ul>
- <li><a href="#authenphase">La phase
- d'authentification</a></li>
+ <div class="note"><h3>Note</h3>
+ Aucune variable d'autorisation n'est définie lorsqu'un utilisateur
+ s'est vu autoriser l'accès via la directive <code>Require
+ valid-user</code>.
+ </div>
- <li><a href="#authorphase">La phase d'autorisation</a></li>
- </ul>
- </li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapbindauthoritative" id="authldapbindauthoritative">Directive</a> <a name="AuthLDAPBindAuthoritative" id="AuthLDAPBindAuthoritative">AuthLDAPBindAuthoritative</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Détermine si l'on doit utiliser d'autres fournisseurs
+d'authentification lorsque le serveur ne peut pas valider les données
+d'authentification de l'utilisateur, alors que ce dernier possède un
+DN.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPBindAuthoritative<em>off|on</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPBindAuthoritative on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Par défaut, des fournisseurs d'authentification sont appelés
+ si un utilisateur ne possède pas de DN, mais ne le sont pas si
+ l'utilisateur possède un DN et si son mot de passe ne peut pas être
+ vérifié lors d'une connexion au serveur LDAP. Si la directive
+ <code class="directive"><a href="#authldapbindauthoritative">AuthLDAPBindAuthoritative</a></code> est
+ définie à <em>off</em>, d'autres modules d'authentification
+ configurés auront une chance de valider le mot de passe de
+ l'utilisateur si la tentative de connexion au serveur LDAP échoue
+ pour une raison quelconque (avec les données d'authentification
+ fournies).</p>
+ <p>Ceci permet aux utilisateurs présent à la fois dans l'annuaire
+ LDAP et dans un fichier <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> de s'authentifier
+ lorsque le serveur LDAP est disponible, alors que le compte de
+ l'utilisateur est verrouillé ou que son mot de passe est
+ inutilisable pour une raison quelconque.</p>
- <li>
- <a href="#requiredirectives">Les directives requises</a>
+<h3>Voir aussi</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li>
+<li><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapbinddn" id="authldapbinddn">Directive</a> <a name="AuthLDAPBindDN" id="AuthLDAPBindDN">AuthLDAPBindDN</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Un DN optionnel pour se connecter au serveur
+LDAP</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPBindDN <em>dn</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Cette directive permet de définir un DN optionnel pour se
+ connecter au serveur afin d'y rechercher des entrées. Si aucun DN
+ n'est spécifié, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tentera une
+ connexion anonyme.</p>
- <ul>
- <li><a href="#requser">Require ldap-user</a></li>
- <li><a href="#reqgroup">Require ldap-group</a></li>
- <li><a href="#reqdn">Require ldap-dn</a></li>
- <li><a href="#reqattribute">Require ldap-attribute</a></li>
- <li><a href="#reqfilter">Require ldap-filter</a></li>
- <li><a href="#reqsearch">Require ldap-search</a></li>
- </ul>
- </li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapbindpassword" id="authldapbindpassword">Directive</a> <a name="AuthLDAPBindPassword" id="AuthLDAPBindPassword">AuthLDAPBindPassword</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Mot de passe à utiliser en conjonction avec le DN de
+connexion</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPBindPassword <em>mot-de-passe</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td><em>exec:</em> est disponible depuis la version 2.4.5 du
+serveur HTTP Apache.</td></tr>
+</table>
+ <p>Cette directive permet de spécifier un mot de passe à utiliser en
+ conjonction avec le DN de connexion. Notez que ce mot de passe
+ constitue en général une donnée sensible, et doit donc être protégé
+ de manière appropriée. Vous ne devez utiliser les directives
+ <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code> et <code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code> que si
+ vous en avez vraiment besoin pour effectuer une recherche dans
+ l'annuaire.</p>
- <li><a href="#examples">Exemples</a></li>
- <li><a href="#usingtls">Utilisation de TLS</a></li>
- <li><a href="#usingssl">Utilisation de SSL</a></li>
- <li><a href="#exposed">Mise à disposition des informations de
- connexion</a></li>
- <li><a href="#activedirectory">Utilisation d'Active Directory</a></li>
- <li>
- <a href="#frontpage">Utilisation de Microsoft FrontPage avec
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></a>
+ <p>Si la valeur commence par exec:, la commande résultante sera
+ exécutée, et la première ligne renvoyée sur la sortie standard sera
+ utilisée comme mot de passe.</p>
+<pre class="prettyprint lang-config">#Mot de passe utilisé tel quel
+AuthLDAPBindPassword secret
- <ul>
- <li><a href="#howitworks">Comment ça marche</a></li>
- <li><a href="#fpcaveats">Mises en garde</a></li>
- </ul>
- </li>
- </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="operation" id="operation">Mode opératoire</a></h2>
+#Exécute /path/to/program pour obtenir le mot de passe
+AuthLDAPBindPassword exec:/path/to/program
- <p>L'utilisateur se voit accorder l'accès selon un processus en deux
- phases. La première phase est l'authentification, au cours de
- laquelle le fournisseur d'authentification
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> vérifie que les informations de
- connexion de l'utilisateur sont valides. Elle est aussi connue sous
- le nom de phase de <em>recherche/connexion</em> (NdT : en anglais ou
- dans le code source : <em>search/bind</em>). La deuxième
- phase est l'autorisation, au cours de laquelle
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> détermine si l'utilisateur
- authentifié a la permission d'accéder à la ressource considérée.
- Elle est aussi connue sous le nom de phase de
- <em>comparaison</em> (<em>compare</em>).</p>
+#Exécute /path/to/otherProgram avec un argument pour obtenir le mot de passe
+AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"</pre>
- <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> comporte un fournisseur
- d'authentification authn_ldap et un gestionnaire d'autorisation
- authz_ldap. Le fournisseur d'authentification authn_ldap peut être
- invoqué en affectant la valeur <code>ldap</code> à la directive
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>. Le
- gestionnaire d'autorisation authz_ldap enrichit la liste des types
- d'autorisations de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> en y ajoutant les
- valeurs <code>ldap-user</code>, <code>ldap-dn</code> et
- <code>ldap-group</code>.</p>
-<h3><a name="authenphase" id="authenphase">La phase d'authentification</a></h3>
- <p>Au cours de la phase d'authentification,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> recherche une entrée de l'annuaire
- LDAP qui correspond au nom d'utilisateur fourni par le client HTTP.
- Si une correspondance unique est trouvée,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tente de se connecter au serveur
- hébergeant l'annuaire LDAP en utilisant le DN de l'entrée et le mot
- de passe fourni par le client HTTP. Comme ce processus effectue tout
- d'abord une recherche, puis une connexion, il est aussi connu sous
- le nom de phase de recherche/connexion. Voici le détail des étapes
- constituant la phase de recherche/connexion :</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapcharsetconfig" id="authldapcharsetconfig">Directive</a> <a name="AuthLDAPCharsetConfig" id="AuthLDAPCharsetConfig">AuthLDAPCharsetConfig</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Chemin du fichier de configuration de la correspondance
+langage/jeu de caractères</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPCharsetConfig <em>chemin-fichier</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>La directive <code class="directive">AuthLDAPCharsetConfig</code> permet
+ de définir le chemin du fichier de configuration de la
+ correspondance langage/jeu de caractères. <var>chemin-fichier</var>
+ est un chemin relatif au répertoire défini par la directive
+ <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. Ce fichier contient une liste
+ de correspondances extension de langage/jeu de caractères. La
+ plupart des administrateurs utilisent le fichier
+ <code>charset.conv</code> fourni qui associe les extensions de
+ langage courantes à leurs jeux de caractères.</p>
- <ol>
- <li>Confection d'un filtre de recherche en combinant les attribut
- et filtre définis par la directive <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> avec le nom d'utilisateur et le mot de
- passe fournis par le client HTTP.</li>
+ <p>Le fichier contient des lignes au format suivant :</p>
- <li>Recherche dans l'annuaire LDAP en utilisant le filtre
- confectionné précédemment. Si le résultat de la recherche est
- négatif ou comporte plusieurs entrées, refus ou restriction de
- l'accès.</li>
+ <div class="example"><p><code>
+ <var>extension de langage</var> <var>jeu de caractères</var>
+ [<var>Nom du langage</var>] ...
+ </code></p></div>
- <li>Extraction du DN (distinguished name) de l'entrée issue du
- résultat de la recherche, et tentative de connexion au serveur
- LDAP en utilisant ce DN et le mot de passe fournis par le client
- HTTP. Si la connexion échoue, refus ou restriction de
- l'accès.</li>
- </ol>
+ <p>L'extension est insensible à la casse. Les lignes vides et les
+ lignes commençant par un dièse (<code>#</code>) sont ignorées.</p>
- <p>Les directives utilisées durant la phase de recherche/connexion
- sont les suivantes :</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapcompareasuser" id="authldapcompareasuser">Directive</a> <a name="AuthLDAPCompareAsUser" id="AuthLDAPCompareAsUser">AuthLDAPCompareAsUser</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilisation des données d'authentification de l'utilisateur
+pour effectuer les comparaisons pour l'attribution des autorisations</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPCompareAsUser on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPCompareAsUser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version version 2.3.6</td></tr>
+</table>
+ <p>Lorsque cette directive est définie, et si
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> a authentifié l'utilisateur, les
+ recherches LDAP pour les autorisations utilisent le nom distinctif
+ trouvé (DN) et le mot de passe d'authentification basique HTTP de
+ l'utilisateur authentifié au lieu des données d'authentification
+ configurées au niveau du serveur.</p>
- <table>
-
- <tr>
- <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code></td>
+ <p>Les vérifications d'autorisation <em>ldap-attribute</em>,
+ <em>ldap-user</em>, et <em>ldap-group</em> (niveau simple seulement)
+ utilisent des comparaisons.</p>
- <td>Spécifie le serveur LDAP, le DN de base, l'attribut à
- utiliser pour la recherche, ainsi que les filtres de recherche
- supplémentaires.</td>
- </tr>
+ <p>Cette directive n'a d'effet sur les comparaisons effectuées au
+ cours des traitements de groupe imbriqués, et lorsque la directive
+ <code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code>
+ est aussi activée.</p>
- <tr>
- <td><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></td>
-
- <td>Un DN optionnel pour se connecter durant la phase de
- recherche.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code></td>
-
- <td>Un mot de passe optionnel pour se connecter durant la phase
- de recherche.</td>
- </tr>
- </table>
-
-
-<h3><a name="authorphase" id="authorphase">La phase d'autorisation</a></h3>
+ <p>Cette directive ne doit être utilisée que si votre serveur LDAP
+ n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
+ utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <p>Au cours de la phase d'autorisation,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tente de déterminer si
- l'utilisateur est autorisé à accéder à la ressource considérée. Une
- grande partie de cette vérification consiste pour
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> en des opérations de comparaison au
- niveau du serveur LDAP. C'est pourquoi cette phase est aussi connue
- sous le nom de phase de comparaison.
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> accepte les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> suivantes pour
- déterminer si les informations de connexion permettent d'accorder
- l'accès à l'utilisateur :</p>
+<h3>Voir aussi</h3>
+<ul>
+<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
+<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapcomparednonserver" id="authldapcomparednonserver">Directive</a> <a name="AuthLDAPCompareDNOnServer" id="AuthLDAPCompareDNOnServer">AuthLDAPCompareDNOnServer</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise le serveur LDAP pour comparer les DNs</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPCompareDNOnServer on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPCompareDNOnServer on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Lorsque cette directive est définie à on,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise le serveur LDAP pour
+ comparer les DNs. Il s'agit de la seule méthode infaillible pour
+ comparer les DNs. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> va rechercher
+ dans l'annuaire le DN spécifié par la directive <a href="#reqdn"><code>Require dn</code></a>, puis extraire ce DN et le
+ comparer avec le DN extrait de l'entrée de l'utilisateur. Si cette
+ directive est à off, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> effectue une
+ simple comparaison de chaînes. Cette dernière approche peut produire
+ des faux négatifs, mais elle est beaucoup plus rapide. Notez
+ cependant que le cache de <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> peut accélérer
+ la comparaison de DNs dans la plupart des situations.</p>
- <ul>
- <li>Avec la directive <a href="#reqgroup"><code>Require ldap-user</code></a>,
- l'autorisation d'accès est accordée si le nom d'utilisateur
- spécifié par la directive correspond au nom d'utilisateur fourni
- par le client.</li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapdereferencealiases" id="authldapdereferencealiases">Directive</a> <a name="AuthLDAPDereferenceAliases" id="AuthLDAPDereferenceAliases">AuthLDAPDereferenceAliases</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>À quel moment le module va déréférencer les
+alias</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPDereferenceAliases never|searching|finding|always</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPDereferenceAliases always</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier à quel moment
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> va déréférencer les alias au cours
+ des opérations liées à LDAP. La valeur par défaut est
+ <code>always</code>.</p>
- <li>Avec la directive <a href="#reqdn"><code>Require
- ldap-dn</code></a>, l'autorisation d'accès est accordée si le DN
- spécifié par la directive correspond au DN extrait du résultat de
- la recherche dans l'annuaire LDAP.</li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapgroupattribute" id="authldapgroupattribute">Directive</a> <a name="AuthLDAPGroupAttribute" id="AuthLDAPGroupAttribute">AuthLDAPGroupAttribute</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'attribut LDAP utilisé pour vérifier l'appartenance d'un
+utilisateur à un groupe.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPGroupAttribute <em>attribut</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPGroupAttribute member uniquemember</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier quel attribut LDAP est
+ utilisé pour vérifier l'appartenance d'un utilisateur à un
+ groupe. On peut spécifier plusieurs attributs en répétant cette
+ directive plusieurs fois. Si la directive n'est pas définie,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise les attributs
+ <code>member</code> et <code>uniquemember</code>.</p>
- <li>Avec la directive <a href="#reqgroup"><code>Require ldap-group</code></a>,
- l'autorisation d'accès est accordée si le DN extrait du résultat de
- la recherche dans l'annuaire LDAP (ou le nom d'utilisateur fourni
- par le client) appartient au groupe LDAP spécifié par la
- directive, ou éventuellement à un de ses sous-groupes.</li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapgroupattributeisdn" id="authldapgroupattributeisdn">Directive</a> <a name="AuthLDAPGroupAttributeIsDN" id="AuthLDAPGroupAttributeIsDN">AuthLDAPGroupAttributeIsDN</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise le DN de l'utilisateur pour vérifier son
+appartenance à un groupe</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPGroupAttributeIsDN on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPGroupAttributeIsDN on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Lorsqu'elle est définie à <code>on</code>, cette directive
+ indique que c'est le DN de l'utilisateur qui doit être utilisé pour
+ vérifier son appartenance à un groupe. Dans le cas contraire, c'est
+ le nom de l'utilisateur qui sera utilisé. Par exemple, supposons que
+ le client envoie le nom d'utilisateur <code>bjenson</code>, qui
+ correspond au DN LDAP <code>cn=Babs Jenson,o=Example</code>. Si la
+ directive est à <code>on</code>, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> va
+ vérifier si <code>cn=Babs Jenson, o=Example</code> est un membre du
+ groupe. Dans le cas contraire, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
+ vérifiera si <code>bjenson</code> est un membre du groupe.</p>
- <li>Avec la directive <a href="#reqattribute">
- <code>Require ldap-attribute</code></a>, l'autorisation d'accès
- est accordée si la valeur de l'attribut extraite de la recherche
- dans l'annuaire LDAP correspond à la valeur spécifiée par la
- directive.</li>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapinitialbindasuser" id="authldapinitialbindasuser">Directive</a> <a name="AuthLDAPInitialBindAsUser" id="AuthLDAPInitialBindAsUser">AuthLDAPInitialBindAsUser</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Détermine si le serveur effectue la recherche initiale du
+DN en utilisant le nom propre de l'utilisateur pour l'authentification
+de base
+et non de manière anonyme, ou en utilisant des données d'authentification
+codées en dur pour le serveur</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPInitialBindAsUser <em>off|on</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPInitialBindAsUser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
+</table>
+ <p>Par défaut, le serveur convertit le nom d'utilisateur pour
+ l'authentification de base en nom distinctif LDAP (DN) soit de
+ manière anonyme, soit avec un couple nom/mot de passe dédié. Cette
+ directive permet de forcer le serveur à utiliser les véritables nom
+ d'utilisateur et mot de passe fournis par l'utilisateur pour
+ effectuer la recherche initiale du DN.</p>
- <li>Avec la directive <a href="#reqfilter">
- <code>Require ldap-filter</code></a>, l'autorisation d'accès
- est accordée si le filtre de recherche renvoie un objet
- utilisateur unique qui corresponde au DN de l'utilisateur
- authentifié.</li>
+ <p>Si le nom d'utilisateur ne peut pas s'authentifier directement
+ et nécessite de légères modifications, voir la directive <code class="directive"><a href="#authldapinitialbindpattern">AuthLDAPInitialBindPattern</a></code>.</p>
- <li>Avec la directive <a href="#reqsearch">
- <code>Require ldap-search</code></a>, l'autorisation d'accès
- est accordée si le filtre de recherche renvoie avec succès
- un seul objet correspondant aux critères avec tout nom distinctif
- (DN).</li>
+ <p>Cette directive ne doit être utilisée que si votre serveur LDAP
+ n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
+ utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <li>dans tous les autres cas, refus ou restriction de
- l'accès.</li>
- </ul>
+ <div class="note"><h3>Non disponible dans la cas d'une autorisation seule</h3>
+ On ne peut utiliser cette directive que si ce module
+ effectue une authentification, et n'a aucun effet si ce module
+ n'est utilisé que pour les processus d'autorisation.
+ </div>
- <p>Sous réserve du chargement de modules d'autorisation
- supplémentaires, d'autres valeurs de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> peuvent être
- spécifiées.</p>
+<h3>Voir aussi</h3>
+<ul>
+<li><code class="directive"><a href="#authldapinitialbindpattern">AuthLDAPInitialBindPattern</a></code></li>
+<li><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></li>
+<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
+<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapinitialbindpattern" id="authldapinitialbindpattern">Directive</a> <a name="AuthLDAPInitialBindPattern" id="AuthLDAPInitialBindPattern">AuthLDAPInitialBindPattern</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie la modification a apporter au nom d'utilisateur
+pour l'authentification de base lors de l'authentification auprès du
+serveur LDAP pour effectuer une recherche de DN</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPInitialBindPattern<em><var>regex</var> <var>substitution</var></em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPInitialBindPattern (.*) $1 (nom de l'utilisateur
+distant utilisé tel quel)</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
+</table>
+ <p>Si la directive <code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code> est
+ définie à <em>ON</em>, le nom utilisateur pour l'authentification de
+ base sera transformé selon l'expression rationnelle
+ <var>regex</var> et l'argument <var>substitution</var> spécifiés.</p>
- <ul>
- <li>L'accès est accordé à tous les utilisateurs authentifiés si
- une directive <a href="#requser"><code>Require
- valid-user</code></a> est présente (nécessite le module
- <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code>).</li>
+ <p>L'expression rationnelle est comparée au nom d'utilisateur pour
+ l'authentification de base courant. L'argument
+ <var>substitution</var> peut contenir des références arrières, mais
+ n'effectue aucune autre interpolation de variable.</p>
- <li>Avec la directive <a href="#reqgroup"><code>Require group</code></a>, l'autorisation
- d'accès est accordée si le module
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> a été chargé et si la
- directive <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> a été
- définie.</li>
+ <p>Cette directive ne doit être utilisée que si votre serveur LDAP
+ n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
+ utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <li>etc...</li>
- </ul>
+ <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) $1@example.com</pre>
+ <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com</pre>
- <p>Durant la phase de comparaison, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
- utilise les directives suivantes :</p>
- <table>
-
- <tr>
- <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>
- </td>
+ <div class="note"><h3>Non disponible dans la cas d'une autorisation seule</h3>
+ On ne peut utiliser cette directive que si ce module
+ effectue une authentification, et n'a aucun effet si ce module
+ n'est utilisé que pour les processus d'autorisation.
+ </div>
+ <div class="note"><h3>Débogage</h3>
+ Le DN de substitution est enregistré dans la variable
+ d'environnement <em>LDAP_BINDASUSER</em>. Si l'expression
+ rationnelle ne convient pas, le nom d'utilisateur est utilisé
+ tel quel.
+ </div>
- <td>On utilise l'attribut spécifié dans l'URL pour les
- opérations de comparaison initiées par la directive
- <code>Require ldap-user</code>.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code></td>
-
- <td>Détermine le comportement de la directive <code>Require
- ldap-dn</code>.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code></td>
-
- <td>Détermine l'attribut utilisé pour les opérations de
- comparaison initiées par la directive <code>Require
- ldap-group</code>.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code></td>
-
- <td>Spécifie si l'on doit utiliser le DN ou le nom de
- l'utilisateur lors des opérations de comparaison initiées par la
- directive <code>Require ldap-group</code>.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code></td>
-
- <td>Détermine la profondeur maximale de l'arborescence des
- sous-groupes qui seront évalués au cours des opérations de
- comparaisons initiées par la directive <code>Require
- ldap-group</code>.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code></td>
+<h3>Voir aussi</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_authnnz_ldap.html#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
+<li><code class="directive"><a href="../mod/mod_authnnz_ldap.html#authldapbinddn">AuthLDAPBindDN</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapmaxsubgroupdepth" id="authldapmaxsubgroupdepth">Directive</a> <a name="AuthLDAPMaxSubGroupDepth" id="AuthLDAPMaxSubGroupDepth">AuthLDAPMaxSubGroupDepth</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie la profondeur d'imbrication des sous-groupes
+maximale prise en compte avant l'abandon de la recherche de
+l'utilisateur.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPMaxSubGroupDepth <var>Nombre</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPMaxSubGroupDepth 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.0 du serveur HTTP
+Apache ; la valeur par défaut était 10 dans les versions 2.4.x et les
+premières versions 2.5</td></tr>
+</table>
+ <p>Lorsque cette directive est définie à une valeur <code>X</code>
+ non nulle, en combinaison avec l'utilisation de la directive
+ <code>Require ldap-group DN-groupe</code>, les données de connexion
+ fournies seront utilisées pour vérifier l'appartenance de
+ l'utilisateur à l'objet de l'annuaire <code>DN-groupe</code> ou à
+ tout sous-groupe du groupe courant en tenant compte de la profondeur
+ d'imbrication maximale <code>X</code> spécifiée par la directive.</p>
+ <p>Se référer à la section <a href="#reqgroup"><code>Require
+ ldap-group</code></a> pour un exemple plus détaillé.</p>
- <td>Détermine l'attribut à utiliser lors de l'extraction de
- membres de sous-groupes du groupe courant au cours des
- opérations de comparaison initiées par la directive
- <code>Require ldap-group</code>.</td>
- </tr>
+ <div class="note"><h3>Performances dans le cas des groupes imbriqués</h3>
+ <p>Lorsque les directives
+ <code class="directive">AuthLDAPSubGroupAttribute</code> et
+ <code class="directive">AuthLDAPGroupAttribute</code> se recouvrent (comme
+ c'est le cas par défaut et requis par les schémas LDAP courants), la
+ recherche de sous-groupes au sein de grands groupes peut être très
+ longue. Si vos groupes sont très grands et non imbriqués, définissez
+ la directive <code class="directive">AuthLDAPMaxSubGroupDepth</code> à 0.</p>
+ </div>
- <tr>
- <td><code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code></td>
- <td>Spécifie les valeurs de classe d'objet LDAP à utiliser pour
- déterminer si les objets extraits de l'annuaire sont bien des
- objets de type groupe (et non des objets de type utilisateur),
- au cours du traitement des sous-groupes initié par la directive
- <code>Require ldap-group</code>.</td>
- </tr>
- </table>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapremoteuserattribute" id="authldapremoteuserattribute">Directive</a> <a name="AuthLDAPRemoteUserAttribute" id="AuthLDAPRemoteUserAttribute">AuthLDAPRemoteUserAttribute</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie l'attribut dont la valeur renvoyée au cours de la
+requête de l'utilisateur sera utilisée pour définir la variable
+d'environnement REMOTE_USER</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPRemoteUserAttribute uid</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Lorsque cette directive est définie, la variable d'environnement
+ <code>REMOTE_USER</code> sera définie à la valeur de l'attribut
+ spécifié. Assurez-vous que cet attribut soit bien inclus dans la
+ liste d'attributs spécifiés dans la définition de AuthLDAPUrl ; dans
+ le cas contraire, cette directive n'aurait aucun effet. Si elle est
+ présente, cette directive l'emporte sur <code class="directive"><a href="#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></code>. Elle
+ peut s'avérer utile par exemple, si vous souhaitez que les
+ utilisateurs se connectent à un site web en utilisant leur adresse
+ email, alors qu'une application sous-jacente nécessite un nom
+ d'utilisateur comme identifiant.</p>
+ <p>Cette directive n'a d'effet que si l'on utilise ce module pour
+ l'authentification.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">Les directives requises</a></h2>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapremoteuserisdn" id="authldapremoteuserisdn">Directive</a> <a name="AuthLDAPRemoteUserIsDN" id="AuthLDAPRemoteUserIsDN">AuthLDAPRemoteUserIsDN</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise le DN de l'utilisateur pour définir la variable
+d'environnement REMOTE_USER</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPRemoteUserIsDN on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPRemoteUserIsDN off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Lorsque cette directive est à on, la variable d'environnement
+ <code>REMOTE_USER</code> sera définie avec la valeur du DN complet
+ de l'utilisateur authentifié, et non plus avec simplement le nom
+ d'utilisateur fourni par le client. Elle est définie à off par
+ défaut.</p>
+ <p>Cette directive n'a d'effet que si l'on utilise ce module pour
+ l'authentification.</p>
- <p>Les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> d'Apache sont utilisées
- au cours de la phase d'autorisation afin de s'assurer que
- l'utilisateur est autorisé à accéder à une ressource.
- mod_authnz_ldap enrichit la liste des types d'autorisations avec les
- valeurs <code>ldap-user</code>, <code>ldap-dn</code>,
- <code>ldap-group</code>, <code>ldap-attribute</code> et
- <code>ldap-filter</code>. D'autres types d'autorisations sont
- disponibles, sous réserve du chargement de modules d'autorisation
- supplémentaires.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapsearchasuser" id="authldapsearchasuser">Directive</a> <a name="AuthLDAPSearchAsUser" id="AuthLDAPSearchAsUser">AuthLDAPSearchAsUser</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise les données d'authentification de l'utilisateur
+pour la recherche des autorisations</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPSearchAsUser on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPSearchAsUser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
+</table>
+ <p>Lorsque cette directive est définie, et si
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> a authentifié l'utilisateur, les
+ recherches LDAP pour définir les autorisations utilisent le nom
+ distinctif (DN) trouvé et le mot de passe pour l'authentification de
+ base HTTP de l'utilisateur authentifié, au lieu des données
+ d'authentification configurées au niveau du serveur.</p>
- <p>A partir de la version 2.4.8, les directives require LDAP
- supportent les <a href="../expr.html">expressions</a>.</p>
+ <p>Les vérifications d'autorisation <em>ldap-filter</em> et
+ <em>ldap-dn</em> utilisent des recherches.</p>
-<h3><a name="requser" id="requser">Require ldap-user</a></h3>
+ <p>Cette directive n'a d'effet sur les comparaisons effectuées au
+ cours des traitements de groupe imbriqués, et lorsque la directive
+ <code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code>
+ est aussi activée.</p>
- <p>La directive <code>Require ldap-user</code> permet de spécifier
- les noms des utilisateurs autorisés à accéder à la ressource.
- Lorsque <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> a extrait un DN unique de
- l'annuaire LDAP, il effectue une opération de comparaison LDAP en
- utilisant le nom d'utilisateur spécifié par la directive
- <code>Require ldap-user</code>, pour vérifier si ce nom
- d'utilisateur correspond à l'entrée LDAP extraite. On peut accorder
- l'accès à plusieurs utilisateurs en plaçant plusieurs nom
- d'utilisateurs sur la même ligne séparés par des espaces. Si un nom
- d'utilisateur contient des espaces, il doit être entouré de
- guillemets. On peut aussi accorder l'accès à plusieurs utilisateurs
- en utilisant une directive <code>Require ldap-user</code> par
- utilisateur. Par exemple, avec la directive <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> définie à
- <code>ldap://ldap/o=Example?cn</code> (spécifiant donc que l'attribut
- <code>cn</code> sera utilisé pour les recherches), on pourra
- utiliser les directives Require suivantes pour restreindre l'accès
- :</p>
-<pre class="prettyprint lang-config">Require ldap-user "Barbara Jenson"
-Require ldap-user "Fred User"
-Require ldap-user "Joe Manager"</pre>
+ <p>Cette directive ne doit être utilisée que si votre serveur LDAP
+ n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
+ utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
+ </p>
- <p>De par la manière dont <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> traite
- cette directive, Barbara Jenson peut s'authentifier comme
- <em>Barbara Jenson</em>, <em>Babs Jenson</em> ou tout autre
- <code>cn</code> sous lequel elle est enregistrée dans l'annuaire
- LDAP. Une seule ligne <code>Require ldap-user</code> suffit pour
- toutes les valeurs de l'attribut dans l'entrée LDAP de
- l'utilisateur.</p>
+<h3>Voir aussi</h3>
+<ul>
+<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
+<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapsubgroupattribute" id="authldapsubgroupattribute">Directive</a> <a name="AuthLDAPSubGroupAttribute" id="AuthLDAPSubGroupAttribute">AuthLDAPSubGroupAttribute</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie les noms d'attribut, un par directive, utilisés
+pour différencier les membres du groupe courant qui sont eux-mêmes des
+groupes.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPSubGroupAttribute <em>attribut</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPSubgroupAttribute member uniquemember</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.0 du serveur HTTP
+Apache</td></tr>
+</table>
+ <p>Un objet groupe LDAP peut contenir des membres qui sont des
+ utilisateurs et des membres qui sont eux-mêmes des groupes (appelés
+ sous-groupes ou groupes imbriqués). La directive
+ <code>AuthLDAPSubGroupAttribute</code> spécifie l'attribut utilisé
+ pour identifier les groupes, alors que la directive
+ <code>AuthLDAPGroupAttribute</code> spécifie l'attribut utilisé
+ pour identifier les utilisateurs. On peut spécifier plusieurs
+ attributs en répétant la directive plusieurs fois. Si elle n'est pas
+ définie, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise les attributs
+ <code>member</code> et <code>uniqueMember</code>.</p>
- <p>Si l'attribut <code>uid</code> avait été spécifié à la place de
- l'attribut <code>cn</code> dans l'URL précédente, les trois lignes
- ci-dessus auraient pû être condensées en une seule ligne :</p>
-<pre class="prettyprint lang-config">Require ldap-user bjenson fuser jmanager</pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapsubgroupclass" id="authldapsubgroupclass">Directive</a> <a name="AuthLDAPSubGroupClass" id="AuthLDAPSubGroupClass">AuthLDAPSubGroupClass</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie quelles valeurs d'objectClass LDAP identifient les
+objets de l'annuaire qui sont des groupes au cours du traitement des
+sous-groupes.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPSubGroupClass <em>ObjectClass-LDAP</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.0 du serveur HTTP
+Apache</td></tr>
+</table>
+ <p>Un objet groupe LDAP peut contenir des membres qui sont des
+ utilisateurs et des membres qui sont eux-mêmes des groupes (appelés
+ sous-groupes ou groupes imbriqués). La directive
+ <code>AuthLDAPSubGroupAttribute</code> permet d'identifier les
+ membres qui sont des sous-groupes du groupe courant (à l'opposé des
+ membres utilisateurs). La directive
+ <code>AuthLDAPSubGroupClass</code> permet de spécifier les valeurs
+ d'objectClass LDAP utilisées pour vérifier que certains membres sont
+ en fait des objets groupe. Les sous-groupes ainsi identifiés peuvent
+ alors faire l'objet d'une recherche d'autres membres utilisateurs ou
+ sous-groupes. On peut spécifier plusieurs attributs en répétant
+ cette directive plusieurs fois. Si cette directive n'est pas
+ définie, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise les attributs
+ <code>groupOfNames</code> et <code>groupOfUniqueNames</code>.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authldapurl" id="authldapurl">Directive</a> <a name="AuthLDAPUrl" id="AuthLDAPUrl">AuthLDAPUrl</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL permettant de spécifier les paramètres de la
+recherche LDAP</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPUrl <em>url [NONE|SSL|TLS|STARTTLS]</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
+</table>
+ <p>Une URL conforme à la RFC 2255 qui permet de spécifier les
+ paramètres à utiliser pour la recherche dans l'annuaire LDAP. La
+ syntaxe de l'URL est :</p>
+<div class="example"><p><code>ldap://hôte:port/DN-de-base?attribut?portée?filtre</code></p></div>
+ <p>Si vous souhaitez mettre à la disposition d'Apache plusieurs URLs
+ LDAP, la syntaxe sera :</p>
+<pre class="prettyprint lang-config">AuthLDAPUrl "ldap://ldap1.example.com ldap2.example.com/dc=..."</pre>
+<p><em><strong>Mise en garde : </strong>Si vous spécifiez plusieurs
+serveurs, vous devez en entourer la liste avec des guillemets ; dans le
+cas contraire, vous générerez une erreur : "AuthLDAPURL takes one
+argument, URL to define LDAP connection..".</em> Vous pouvez bien
+entendu ajouter des paramètres de recherche à chacun des serveurs
+spécifiés.</p>
-<h3><a name="reqgroup" id="reqgroup">Require ldap-group</a></h3>
+<dl>
+<dt>ldap</dt>
- <p>Cette directive permet de spécifier un groupe LDAP dont les
- membres auront l'autorisation d'accès. Elle prend comme argument le
- DN du groupe LDAP. Note : n'entourez pas le nom du groupe avec des
- guillemets. Par exemple, supposons que l'entrée suivante existe dans
- l'annuaire LDAP :</p>
-<div class="example"><pre>dn: cn=Administrators, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Barbara Jenson, o=Example
-uniqueMember: cn=Fred User, o=Example</pre></div>
+ <dd>Pour ldap non sécurisé, utilisez la chaîne
+ <code>ldap</code>. Pour ldap sécurisé, utilisez à la place la
+ chaîne <code>ldaps</code>. LDAP sécurisé n'est disponible que si
+ Apache a été lié avec une bibliothèque LDAP supportant SSL.</dd>
- <p>La directive suivante autoriserait alors l'accès à Fred et
- Barbara :</p>
-<pre class="prettyprint lang-config">Require ldap-group cn=Administrators, o=Example</pre>
+<dt>hôte:port</dt>
+ <dd>
+ <p>Il s'agit du nom/port du serveur ldap
+ (dont la valeur par défaut est
+ <code>localhost:389</code> pour <code>ldap</code>, et
+ <code>localhost:636</code> pour <code>ldaps</code>). Pour
+ spécifier plusieurs serveurs LDAP redondants, indiquez
+ simplement leur liste en les séparant par des espaces.
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tentera alors de se connecter
+ à chacun des serveurs jusqu'à ce qu'il parvienne à se
+ connecter avec succès. Notez qu'en cas de multiples serveurs
+ LDAP, l'ensemble de l'URL LDAP doit être entourée de
+ guillemets.</p>
- <p>Les membres peuvent aussi se trouver dans les sous-groupes du
- groupe LDAP spécifié si la directive <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code> a été
- définie à une valeur supérieure à 0. Par exemple, supposons que les
- entrées suivantes existent dans l'annuaire LDAP :</p>
-<div class="example"><pre>dn: cn=Employees, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Managers, o=Example
-uniqueMember: cn=Administrators, o=Example
-uniqueMember: cn=Users, o=Example
+ <p>lorsqu'une connection a été établie avec un serveur, elle
+ reste active pendant toute la durée de vie du processus
+ <code class="program"><a href="../programs/httpd.html">httpd</a></code>, ou jusqu'à ce que le serveur LDAP
+ cesse de fonctionner.</p>
-dn: cn=Managers, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Bob Ellis, o=Example
-uniqueMember: cn=Tom Jackson, o=Example
+ <p>Si le serveur LDAP cesse de fonctionner, et ainsi
+ interrompt une
+ connexion existante, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tentera
+ de se reconnecter en commençant par le premier serveur de la
+ liste, et ainsi de suite avec les serveurs redondants
+ suivants. Notez que ce processus n'a rien à voir avec une
+ véritable recherche de type round-robin.</p>
+ </dd>
-dn: cn=Administrators, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Barbara Jenson, o=Example
-uniqueMember: cn=Fred User, o=Example
+<dt>DN-de-base</dt>
+ <dd>Le DN de la branche de l'annuaire à partir de laquelle
+ toutes les recherches seront lancées. Il doit au moins
+ correspondre à la racine de votre annuaire, mais vous pouvez
+ aussi indiquer une branche plus spécifique.</dd>
-dn: cn=Users, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Allan Jefferson, o=Example
-uniqueMember: cn=Paul Tilley, o=Example
-uniqueMember: cn=Temporary Employees, o=Example
+<dt>attribut</dt>
-dn: cn=Temporary Employees, o=Example
-objectClass: groupOfUniqueNames
-uniqueMember: cn=Jim Swenson, o=Example
-uniqueMember: cn=Elliot Rhodes, o=Example</pre></div>
+ <dd>Il s'agit de l'attribut à utiliser pour la recherche.
+ Bien que la RFC
+ 2255 autorise une liste d'attributs séparés par des virgules,
+ seul le premier sera retenu, sans tenir compte des autres
+ attributs fournis. Si aucun attribut n'est fourni, l'attribut
+ par défaut est <code>uid</code>. Il est judicieux de choisir un
+ attribut dont la valeur sera unique parmi toutes les entrées de
+ la branche de l'annuaire que vous aurez définie. Tous les
+ attributs spécifiés seront enregistrés dans des variables
+ d'environnement avec le préfixe AUTHENTICATE_, afin de pouvoir
+ être utilisés par d'autres modules.</dd>
- <p>Les directives suivantes autoriseraient alors l'accès à Bob
- Ellis, Tom Jackson, Barbara Jenson, Fred User, Allan Jefferson, et
- Paul Tilley, mais l'interdiraient à Jim Swenson, ou Elliot Rhodes
- (car ils sont situés dans un sous-groupe de niveau de profondeur 2)
- :</p>
-<pre class="prettyprint lang-config">Require ldap-group cn=Employees, o=Example
-AuthLDAPMaxSubGroupDepth 1</pre>
+<dt>portée</dt>
+ <dd>Il s'agit de la portée de la recherche. Elle peut prendre
+ les valeurs <code>one</code> ou <code>sub</code>. Notez que la
+ RFC 2255 supporte aussi une portée de valeur <code>base</code>,
+ mais cette dernière n'est pas supportée par le module. Si la
+ portée n'est pas définie, ou si elle est définie à
+ <code>base</code>, c'est la valeur de portée par défaut
+ <code>sub</code> qui sera utilisée.</dd>
- <p>Le comportement de cette directive est modifié par les directives
- <code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code>,
- <code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code>,
- <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code>,
- <code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code>, et
- <code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code>.</p>
+<dt>filtre</dt>
+ <dd>Il s'agit d'un filtre de recherche LDAP valide. Si aucun
+ filtre n'est spécifié, le filtre par défaut
+ <code>(objectClass=*)</code> sera utilisé, ce qui corrspond à
+ une recherche de tous les types d'objets de l'arborescence. La
+ taille des filtres est limitée à environ 8000 caractères (valeur
+ de la macro <code>MAX_STRING_LEN</code> dans le code source
+ d'Apache), ce qui s'avère plus que suffisant pour la plupart des
+ applications. Le mot-clé <code>none</code> permet de désactiver
+ l'utilisation des filtres, ce qui peut s'avérer nécessaire avec
+ certains serveurs LDAP primitifs.</dd>
+</dl>
-<h3><a name="reqdn" id="reqdn">Require ldap-dn</a></h3>
+ <p>Pour une recherche, les attribut, filtre et nom d'utilisateur
+ fournis par le client HTTP sont combinés pour créer un filtre de
+ recherche du style :
+ <code>(&(<em>filtre</em>)(<em>attribut</em>
+ =<em>nom-utilisateur</em>))</code>.</p>
- <p>La directive <code>Require ldap-dn</code> permet à
- l'administrateur d'accorder l'utorisation d'accès en fonction du DN.
- Elle permet de spécifier un DN pour lequel l'accès est autorisé. Si
- le DN extrait de
- l'annuaire correspond au DN spécifié par la directive <code>Require
- ldap-dn</code>, l'autorisation d'accès est accordée. Note :
- n'entourez pas Le DN de guillemets.</p>
+ <p>Par exemple, considérons l'URL
+ <code>ldap://ldap.example.com/o=Example?cn?sub?(posixid=*)</code>.
+ Lorsqu'un client tentera de se connecter en utilisant le nom
+ d'utilisateur <code>Babs Jenson</code>, le filtre de recherche sera
+ : <code>(&(posixid=*)(cn=Babs Jenson))</code>.</p>
- <p>La directive suivante accorderait l'accès à un DN spécifique
- :</p>
-<pre class="prettyprint lang-config">Require ldap-dn cn=Barbara Jenson, o=Example</pre>
+ <p>On peut encore ajouter un paramètre optionnel pour permettre à
+ l'URL LDAP de surcharger le type de connexion. Ce paramètre peut
+ prendre l'une des valeurs suivantes :</p>
+<dl>
+ <dt>NONE</dt>
+ <dd>Établit une connexion non sécurisée sur le port LDAP par
+ défaut, ce qui est équivalent à <code>ldap://</code> sur le port
+ 389.</dd>
+ <dt>SSL</dt>
+ <dd>Établit une connexion sécurisée sur le port LDAP sécurisé
+ par défaut, ce qui est équivalent à <code>ldaps://</code>.</dd>
+ <dt>TLS | STARTTLS</dt>
+ <dd>Établit une connexion sécurisée par élévation de niveau sur
+ le port LDAP par défaut. Cette connexion sera initialisée sur le
+ port 389 par défaut, puis élevée à un niveau de connexion
+ sécurisée sur le même port.</dd>
+</dl>
- <p>Le comportement ce cette directive est modifié par la directive
- <code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code>.</p>
+ <p>Voir plus haut pour des exemples d'URLs définies par la directive
+ <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="contents" id="contents">Sommaire</a></h2>
-<h3><a name="reqattribute" id="reqattribute">Require ldap-attribute</a></h3>
+ <ul>
+ <li>
+ <a href="#operation">Mode opératoire</a>
- <p>La directive <code>Require ldap-attribute</code> permet à
- l'administrateur d'accorder l'autorisation d'accès en fonction des
- attributs de l'utilisateur authentifié dans l'annuaire LDAP. Si la
- valeur de l'attribut dans l'annuaire correspond à la valeur
- spécifiée par la directive, l'autorisation d'accès est accordée.</p>
+ <ul>
+ <li><a href="#authenphase">La phase
+ d'authentification</a></li>
- <p>La directive suivante accorderait l'autorisation d'accès à tout
- utilisateur dont l'attribut employeeType a pour valeur "actif" :</p>
+ <li><a href="#authorphase">La phase d'autorisation</a></li>
+ </ul>
+ </li>
- <pre class="prettyprint lang-config">Require ldap-attribute employeeType=active</pre>
+ <li>
+ <a href="#requiredirectives">Les directives requises</a>
+ <ul>
+ <li><a href="#requser">Require ldap-user</a></li>
+ <li><a href="#reqgroup">Require ldap-group</a></li>
+ <li><a href="#reqdn">Require ldap-dn</a></li>
+ <li><a href="#reqattribute">Require ldap-attribute</a></li>
+ <li><a href="#reqfilter">Require ldap-filter</a></li>
+ <li><a href="#reqsearch">Require ldap-search</a></li>
+ </ul>
+ </li>
- <p>Plusieurs paires attribut/valeur peuvent être spécifiées par une
- même directive en les séparant par des espaces, ou en définissant
- plusieurs directives <code>Require ldap-attribute</code>. La logique
- sous-jacente à une liste de paires attribut/valeur est une opération
- OU. L'autorisation d'accès sera accordée si au moins une paire
- attribut/valeur de la liste spécifiée correspond à la paire
- attribut/valeur de l'utilisateur authentifié. Si elle contient des
- espaces, la valeur, et seulement la valeur, doit être entourée de
- guillemets.</p>
+ <li><a href="#examples">Exemples</a></li>
+ <li><a href="#usingtls">Utilisation de TLS</a></li>
+ <li><a href="#usingssl">Utilisation de SSL</a></li>
+ <li><a href="#exposed">Mise à disposition des informations de
+ connexion</a></li>
+ <li><a href="#activedirectory">Utilisation d'Active Directory</a></li>
+ <li>
+ <a href="#frontpage">Utilisation de Microsoft FrontPage avec
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></a>
- <p>La directive suivante accorderait l'autorisation d'accès à tout
- utilisateur dont l'attribut city aurait pour valeur "San Jose", ou
- donc l'attribut status aurait pour valeur "actif" :</p>
+ <ul>
+ <li><a href="#howitworks">Comment ça marche</a></li>
+ <li><a href="#fpcaveats">Mises en garde</a></li>
+ </ul>
+ </li>
+ </ul>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="operation" id="operation">Mode opératoire</a></h2>
- <pre class="prettyprint lang-config">Require ldap-attribute city="San Jose" status=active</pre>
+ <p>L'utilisateur se voit accorder l'accès selon un processus en deux
+ phases. La première phase est l'authentification, au cours de
+ laquelle le fournisseur d'authentification
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> vérifie que les informations de
+ connexion de l'utilisateur sont valides. Elle est aussi connue sous
+ le nom de phase de <em>recherche/connexion</em> (NdT : en anglais ou
+ dans le code source : <em>search/bind</em>). La deuxième
+ phase est l'autorisation, au cours de laquelle
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> détermine si l'utilisateur
+ authentifié a la permission d'accéder à la ressource considérée.
+ Elle est aussi connue sous le nom de phase de
+ <em>comparaison</em> (<em>compare</em>).</p>
+ <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> comporte un fournisseur
+ d'authentification authn_ldap et un gestionnaire d'autorisation
+ authz_ldap. Le fournisseur d'authentification authn_ldap peut être
+ invoqué en affectant la valeur <code>ldap</code> à la directive
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>. Le
+ gestionnaire d'autorisation authz_ldap enrichit la liste des types
+ d'autorisations de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> en y ajoutant les
+ valeurs <code>ldap-user</code>, <code>ldap-dn</code> et
+ <code>ldap-group</code>.</p>
+<h3><a name="authenphase" id="authenphase">La phase d'authentification</a></h3>
+ <p>Au cours de la phase d'authentification,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> recherche une entrée de l'annuaire
+ LDAP qui correspond au nom d'utilisateur fourni par le client HTTP.
+ Si une correspondance unique est trouvée,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tente de se connecter au serveur
+ hébergeant l'annuaire LDAP en utilisant le DN de l'entrée et le mot
+ de passe fourni par le client HTTP. Comme ce processus effectue tout
+ d'abord une recherche, puis une connexion, il est aussi connu sous
+ le nom de phase de recherche/connexion. Voici le détail des étapes
+ constituant la phase de recherche/connexion :</p>
-<h3><a name="reqfilter" id="reqfilter">Require ldap-filter</a></h3>
+ <ol>
+ <li>Confection d'un filtre de recherche en combinant les attribut
+ et filtre définis par la directive <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> avec le nom d'utilisateur et le mot de
+ passe fournis par le client HTTP.</li>
- <p>La directive <code>Require ldap-filter</code> permet à
- l'administrateur d'accorder l'autorisation d'accès en fonction d'un
- filtre de recherche LDAP complexe. L'autorisation d'accès est
- accordée si le DN renvoyé par le filtre de recherche correspond au
- DN de l'utilisateur authentifié.</p>
+ <li>Recherche dans l'annuaire LDAP en utilisant le filtre
+ confectionné précédemment. Si le résultat de la recherche est
+ négatif ou comporte plusieurs entrées, refus ou restriction de
+ l'accès.</li>
- <p>La directive suivante accorderait l'autorisation d'accès à tout
- utilisateur possédant un téléphone cellulaire et faisant partie du
- département "marketing" :</p>
+ <li>Extraction du DN (distinguished name) de l'entrée issue du
+ résultat de la recherche, et tentative de connexion au serveur
+ LDAP en utilisant ce DN et le mot de passe fournis par le client
+ HTTP. Si la connexion échoue, refus ou restriction de
+ l'accès.</li>
+ </ol>
- <pre class="prettyprint lang-config">Require ldap-filter &(cell=*)(department=marketing)</pre>
+ <p>Les directives utilisées durant la phase de recherche/connexion
+ sont les suivantes :</p>
+ <table>
+
+ <tr>
+ <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code></td>
- <p>Alors que la directive <code>Require ldap-attribute</code> se
- contente d'une simple comparaison d'attributs, la directive
- <code>Require ldap-filter</code> effectue une opération de recherche
- dans l'annuaire LDAP en utilisant le filtre de recherche spécifié.
- Si une simple comparaison d'attributs suffit, l'opération de
- comparaison effectuée par <code>ldap-attribute</code> sera plus
- rapide que l'opération de recherche effectuée par
- <code>ldap-filter</code>, en particulier dans le cas d'un annuaire
- LDAP de grande taille.</p>
+ <td>Spécifie le serveur LDAP, le DN de base, l'attribut à
+ utiliser pour la recherche, ainsi que les filtres de recherche
+ supplémentaires.</td>
+ </tr>
- <p>Lorsqu'on utilise une <a href="../expr.html">expression
- rationnelle</a> au sein d'un filtre, il faut bien s'assurer que les
- filtres LDAP sont correctement échappés afin de se prémunir contre
- toute injection LDAP. A cet effet, il est possible d'utiliser la
- fonction ldap.</p>
+ <tr>
+ <td><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></td>
-<pre class="prettyprint lang-config"><LocationMatch ^/dav/(?<SITENAME>[^/]+)/>
- Require ldap-filter (memberOf=cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}},ou=Websites,o=Example)
-</LocationMatch></pre>
+ <td>Un DN optionnel pour se connecter durant la phase de
+ recherche.</td>
+ </tr>
+ <tr>
+ <td><code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code></td>
+ <td>Un mot de passe optionnel pour se connecter durant la phase
+ de recherche.</td>
+ </tr>
+ </table>
-<h3><a name="reqsearch" id="reqsearch">Require ldap-search</a></h3>
+<h3><a name="authorphase" id="authorphase">La phase d'autorisation</a></h3>
- <p>La directive <code>Require ldap-search</code> permet à
- l'administrateur d'autoriser l'accès en fonction d'un filtre de
- recherche LDAP générique contenant une <a href="../expr.html">expression rationnelle</a>. Si le filtre de
- recherche renvoie une et une seule correspondance, l'accès est
- accordé sans tenir compte du DN.</p>
+ <p>Au cours de la phase d'autorisation,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tente de déterminer si
+ l'utilisateur est autorisé à accéder à la ressource considérée. Une
+ grande partie de cette vérification consiste pour
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> en des opérations de comparaison au
+ niveau du serveur LDAP. C'est pourquoi cette phase est aussi connue
+ sous le nom de phase de comparaison.
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> accepte les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> suivantes pour
+ déterminer si les informations de connexion permettent d'accorder
+ l'accès à l'utilisateur :</p>
- <p>La directive suivante accorderait l'accès aux URLs correspondant
- aux objets spécifiés dans le serveur LDAP :</p>
+ <ul>
+ <li>Avec la directive <a href="#reqgroup"><code>Require ldap-user</code></a>,
+ l'autorisation d'accès est accordée si le nom d'utilisateur
+ spécifié par la directive correspond au nom d'utilisateur fourni
+ par le client.</li>
-<pre class="prettyprint lang-config"><LocationMatch ^/dav/(?<SITENAME>[^/]+)/>
-Require ldap-search (cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}} Website)
-</LocationMatch></pre>
+ <li>Avec la directive <a href="#reqdn"><code>Require
+ ldap-dn</code></a>, l'autorisation d'accès est accordée si le DN
+ spécifié par la directive correspond au DN extrait du résultat de
+ la recherche dans l'annuaire LDAP.</li>
+
+ <li>Avec la directive <a href="#reqgroup"><code>Require ldap-group</code></a>,
+ l'autorisation d'accès est accordée si le DN extrait du résultat de
+ la recherche dans l'annuaire LDAP (ou le nom d'utilisateur fourni
+ par le client) appartient au groupe LDAP spécifié par la
+ directive, ou éventuellement à un de ses sous-groupes.</li>
+ <li>Avec la directive <a href="#reqattribute">
+ <code>Require ldap-attribute</code></a>, l'autorisation d'accès
+ est accordée si la valeur de l'attribut extraite de la recherche
+ dans l'annuaire LDAP correspond à la valeur spécifiée par la
+ directive.</li>
- <p>Note : il faut bien s'assurer que les
- expressions sont correctement échappés afin de se prémunir contre
- toute injection LDAP. A cet effet, il est possible d'utiliser la
- fonction <strong>ldap</strong> comme dans l'exemple ci-dessus.</p>
+ <li>Avec la directive <a href="#reqfilter">
+ <code>Require ldap-filter</code></a>, l'autorisation d'accès
+ est accordée si le filtre de recherche renvoie un objet
+ utilisateur unique qui corresponde au DN de l'utilisateur
+ authentifié.</li>
+ <li>Avec la directive <a href="#reqsearch">
+ <code>Require ldap-search</code></a>, l'autorisation d'accès
+ est accordée si le filtre de recherche renvoie avec succès
+ un seul objet correspondant aux critères avec tout nom distinctif
+ (DN).</li>
+ <li>dans tous les autres cas, refus ou restriction de
+ l'accès.</li>
+ </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Exemples</a></h2>
+ <p>Sous réserve du chargement de modules d'autorisation
+ supplémentaires, d'autres valeurs de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> peuvent être
+ spécifiées.</p>
<ul>
- <li>
- Accorde l'autorisation d'accès à tout utilisateur présent dans
- l'annuaire LDAP, en utilisant son UID pour effectuer la
- recherche :
-<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)"
-Require valid-user</pre>
+ <li>L'accès est accordé à tous les utilisateurs authentifiés si
+ une directive <a href="#requser"><code>Require
+ valid-user</code></a> est présente (nécessite le module
+ <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code>).</li>
- </li>
+ <li>Avec la directive <a href="#reqgroup"><code>Require group</code></a>, l'autorisation
+ d'accès est accordée si le module
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> a été chargé et si la
+ directive <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> a été
+ définie.</li>
- <li>
- L'exemple suivant est similaire au précédent, mais les champs
- dont les valeurs par défaut conviennent sont omis. Notez aussi
- la présence d'un annuaire LDAP redondant :
-<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example"
-Require valid-user</pre>
+ <li>etc...</li>
+ </ul>
- </li>
- <li>
- Encore un exemple similaire aux précédents, mais cette fois,
- c'est l'attribut cn qui est utilisé pour la recherche à la place
- de l'UID. Notez que ceci peut poser problème si plusieurs
- utilisateurs de l'annuaire partagent le même <code>cn</code>,
- car une recherche sur le <code>cn</code> <strong>doit</strong>
- retourner une entrée et une seule. C'est pourquoi cette
- approche n'est pas recommandée : il est préférable de choisir un
- attribut de votre annuaire dont l'unicité soit garantie, comme
- <code>uid</code>.
-<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn"
-Require valid-user</pre>
+ <p>Durant la phase de comparaison, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
+ utilise les directives suivantes :</p>
- </li>
+ <table>
+
+ <tr>
+ <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>
+ </td>
+
+ <td>On utilise l'attribut spécifié dans l'URL pour les
+ opérations de comparaison initiées par la directive
+ <code>Require ldap-user</code>.</td>
+ </tr>
- <li>
- Accorde l'autorisation d'accès à tout utilisateur appartenant au
- groupe Administrateurs. Les utilisateurs doivent s'authentifier
- en utilisant leur UID :
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
-Require ldap-group cn=Administrators, o=Example</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code></td>
- </li>
+ <td>Détermine le comportement de la directive <code>Require
+ ldap-dn</code>.</td>
+ </tr>
- <li>
- Accorde l'accès à tout utilisateur appartenant au groupe dont le
- nom correspond au nom d'hôte du serveur virtuel. Dans cet exemple,
- on utilise une <a href="../expr.html">expression</a> pour
- construire le filtre.
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
-Require ldap-group cn=%{SERVER_NAME}, o=Example</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code></td>
- </li>
+ <td>Détermine l'attribut utilisé pour les opérations de
+ comparaison initiées par la directive <code>Require
+ ldap-group</code>.</td>
+ </tr>
- <li>
- Pour l'exemple suivant, on suppose que tout utilisateur de chez
- Example qui dispose d'un bippeur alphanumérique possèdera un
- attribut LDAP <code>qpagePagerID</code>. Seuls ces utilisateurs
- (authentifiés via leur UID) se verront accorder l'autorisation
- d'accès :
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*)
-Require valid-user</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code></td>
- </li>
+ <td>Spécifie si l'on doit utiliser le DN ou le nom de
+ l'utilisateur lors des opérations de comparaison initiées par la
+ directive <code>Require ldap-group</code>.</td>
+ </tr>
- <li>
- <p>L'exemple suivant illustre la puissance des filtres pour
- effectuer des requêtes complexes. Sans les filtres, il aurait
- été nécessaire de créer un nouveau groupe LDAP et de s'assurer
- de la synchronisation des membres du groupe avec les
- utilisateurs possédant un bippeur. Tout devient limpide avec les
- filtres. Nous avons pour but d'accorder l'autorisation d'accès à
- tout utilisateur disposant d'un bippeur ainsi qu'à Joe Manager
- qui ne possède pas de bippeur, mais doit tout de même pouvoir
- accéder à la ressource :</p>
-<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager))
-Require valid-user</pre>
+ <tr>
+ <td><code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code></td>
+ <td>Détermine la profondeur maximale de l'arborescence des
+ sous-groupes qui seront évalués au cours des opérations de
+ comparaisons initiées par la directive <code>Require
+ ldap-group</code>.</td>
+ </tr>
- <p>Ce dernier exemple peut sembler confus au premier abord ; en
- fait, il permet de mieux comprendre à quoi doit ressembler le
- filtre en fonction de l'utilisateur qui se connecte. Si Fred
- User se connecte en tant que <code>fuser</code>, le filtre devra
- ressembler à :</p>
+ <tr>
+ <td><code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code></td>
- <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))</code></p></div>
+ <td>Détermine l'attribut à utiliser lors de l'extraction de
+ membres de sous-groupes du groupe courant au cours des
+ opérations de comparaison initiées par la directive
+ <code>Require ldap-group</code>.</td>
+ </tr>
- <p>Un recherche avec le filtre ci-dessus ne retournera un
- résultat positif que si <em>fuser</em> dispose d'un bippeur. Si
- Joe Manager se connecte en tant que <em>jmanager</em>, le filtre
- devra ressembler à :</p>
+ <tr>
+ <td><code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code></td>
- <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))</code></p></div>
+ <td>Spécifie les valeurs de classe d'objet LDAP à utiliser pour
+ déterminer si les objets extraits de l'annuaire sont bien des
+ objets de type groupe (et non des objets de type utilisateur),
+ au cours du traitement des sous-groupes initié par la directive
+ <code>Require ldap-group</code>.</td>
+ </tr>
+ </table>
- <p>Un recherche avec le filtre ci-dessus retournera un
- résultat positif que <em>jmanager</em> dispose d'un
- bippeur ou non</p>
- </li>
- </ul>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
-<h2><a name="usingtls" id="usingtls">Utilisation de TLS</a></h2>
+<h2><a name="requiredirectives" id="requiredirectives">Les directives requises</a></h2>
- <p>Pour l'utilisation de TLS, voir les directives du module
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> et <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
+ <p>Les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> d'Apache sont utilisées
+ au cours de la phase d'autorisation afin de s'assurer que
+ l'utilisateur est autorisé à accéder à une ressource.
+ mod_authnz_ldap enrichit la liste des types d'autorisations avec les
+ valeurs <code>ldap-user</code>, <code>ldap-dn</code>,
+ <code>ldap-group</code>, <code>ldap-attribute</code> et
+ <code>ldap-filter</code>. D'autres types d'autorisations sont
+ disponibles, sous réserve du chargement de modules d'autorisation
+ supplémentaires.</p>
- <p>Un second paramètre optionnel peut être ajouté à la directive
- <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> pour
- remplacer le type de connexion par défaut défini par la directive
- <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>. Ceci
- permettra de promouvoir la connexion établie via une URL du type
- <em>ldap://</em> au statut de connection sécurisée sur le même
- port.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingssl" id="usingssl">Utilisation de SSL</a></h2>
+ <p>A partir de la version 2.4.8, les directives require LDAP
+ supportent les <a href="../expr.html">expressions</a>.</p>
- <p>Pour l'utilisation de SSL, voir les directives du module
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> et <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
+<h3><a name="requser" id="requser">Require ldap-user</a></h3>
- <p>Pour spécifier un serveur LDAP sécurisé, utilisez
- <em>ldaps://</em> au lieu de
- <em>ldap://</em> dans la directive <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exposed" id="exposed">Mise à disposition des informations de
-connexion</a></h2>
+ <p>La directive <code>Require ldap-user</code> permet de spécifier
+ les noms des utilisateurs autorisés à accéder à la ressource.
+ Lorsque <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> a extrait un DN unique de
+ l'annuaire LDAP, il effectue une opération de comparaison LDAP en
+ utilisant le nom d'utilisateur spécifié par la directive
+ <code>Require ldap-user</code>, pour vérifier si ce nom
+ d'utilisateur correspond à l'entrée LDAP extraite. On peut accorder
+ l'accès à plusieurs utilisateurs en plaçant plusieurs nom
+ d'utilisateurs sur la même ligne séparés par des espaces. Si un nom
+ d'utilisateur contient des espaces, il doit être entouré de
+ guillemets. On peut aussi accorder l'accès à plusieurs utilisateurs
+ en utilisant une directive <code>Require ldap-user</code> par
+ utilisateur. Par exemple, avec la directive <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> définie à
+ <code>ldap://ldap/o=Example?cn</code> (spécifiant donc que l'attribut
+ <code>cn</code> sera utilisé pour les recherches), on pourra
+ utiliser les directives Require suivantes pour restreindre l'accès
+ :</p>
+<pre class="prettyprint lang-config">Require ldap-user "Barbara Jenson"
+Require ldap-user "Fred User"
+Require ldap-user "Joe Manager"</pre>
- <p>Au cours du processus d'<em>authentification</em>, les attributs LDAP
- spécifiés par la directive <code class="directive"><a href="#authldapurl">authldapurl</a></code> sont enregistrés
- dans des variables d'environnement préfixées par la chaîne
- "AUTHENTICATE_".</p>
- <p>Au cours du processus d'<em>autorisation</em>, les attributs LDAP
- spécifiés par la directive <code class="directive"><a href="#authldapurl">authldapurl</a></code> sont enregistrés
- dans des variables d'environnement préfixées par la chaîne
- "AUTHORIZE_".</p>
+ <p>De par la manière dont <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> traite
+ cette directive, Barbara Jenson peut s'authentifier comme
+ <em>Barbara Jenson</em>, <em>Babs Jenson</em> ou tout autre
+ <code>cn</code> sous lequel elle est enregistrée dans l'annuaire
+ LDAP. Une seule ligne <code>Require ldap-user</code> suffit pour
+ toutes les valeurs de l'attribut dans l'entrée LDAP de
+ l'utilisateur.</p>
- <p>Si les champs attribut contiennent le nom, le CN et le numéro de
- téléphone d'un utilisateur, un programme CGI pourra accéder à ces
- informations sans devoir effectuer une autre requête LDAP pour
- les extraire de l'annuaire.</p>
+ <p>Si l'attribut <code>uid</code> avait été spécifié à la place de
+ l'attribut <code>cn</code> dans l'URL précédente, les trois lignes
+ ci-dessus auraient pû être condensées en une seule ligne :</p>
+<pre class="prettyprint lang-config">Require ldap-user bjenson fuser jmanager</pre>
- <p>Ceci a pour effet de simplifier considérablement le code et la
- configuration nécessaire de certaines applications web.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="activedirectory" id="activedirectory">Utilisation d'Active
-Directory</a></h2>
- <p>Active Directory peut supporter plusieurs domaines à la fois.
- Pour faire la distinction entre les utilisateurs de plusieurs
- domaines, on peut ajouter à l'entrée de l'utilisateur dans
- l'annuaire un identifiant appelé Nom
- Principal d'Utilisateur (User Principle Name ou UPN). Cet UPN se
- compose en général du nom de compte de l'utilisateur, suivi du nom
- du domaine considéré, par exemple <em>untel@nz.example.com</em>.</p>
+<h3><a name="reqgroup" id="reqgroup">Require ldap-group</a></h3>
- <p>Vous voudrez probablement configurer le module
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> afin de pouvoir authentifier les
- utilisateurs de n'importe quel domaine de la forêt Active Directory.
- Ainsi, <em>untel@nz.example.com</em> et
- <em>untel@au.example.com</em> pourront être authentifiés en une
- seule fois par la même requête.</p>
+ <p>Cette directive permet de spécifier un groupe LDAP dont les
+ membres auront l'autorisation d'accès. Elle prend comme argument le
+ DN du groupe LDAP. Note : n'entourez pas le nom du groupe avec des
+ guillemets. Par exemple, supposons que l'entrée suivante existe dans
+ l'annuaire LDAP :</p>
+<div class="example"><pre>dn: cn=Administrators, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Barbara Jenson, o=Example
+uniqueMember: cn=Fred User, o=Example</pre></div>
- <p>Pour y parvenir, on utilise le concept de Catalogue Global
- d'Active Directory. Ce Catalogue Global est une copie en lecture
- seule des attributs sélectionnés de tous les serveurs de la forêt
- Active Directory. Une requête vers le
- Catalogue Global permet donc d'atteindre tous les domaines en une
- seule fois, sans avoir à se connecter aux différents serveurs, via
- des liaisons dont certaines peuvent être lentes.</p>
+ <p>La directive suivante autoriserait alors l'accès à Fred et
+ Barbara :</p>
+<pre class="prettyprint lang-config">Require ldap-group cn=Administrators, o=Example</pre>
- <p>Lorsqu'il est activé, la Catalogue Global est un serveur
- d'annuaire indépendant accessible sur le port 3268 (3269 pour SSL).
- Pour rechercher un utilisateur, effectuez une recherche sur
- l'attribut <em>userPrincipalName</em>, avec une base de recherche
- vide, comme suit :</p>
-<pre class="prettyprint lang-config">AuthLDAPBindDN apache@example.com
-AuthLDAPBindPassword password
-AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub</pre>
+ <p>Les membres peuvent aussi se trouver dans les sous-groupes du
+ groupe LDAP spécifié si la directive <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code> a été
+ définie à une valeur supérieure à 0. Par exemple, supposons que les
+ entrées suivantes existent dans l'annuaire LDAP :</p>
+<div class="example"><pre>dn: cn=Employees, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Managers, o=Example
+uniqueMember: cn=Administrators, o=Example
+uniqueMember: cn=Users, o=Example
+
+dn: cn=Managers, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Bob Ellis, o=Example
+uniqueMember: cn=Tom Jackson, o=Example
+
+dn: cn=Administrators, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Barbara Jenson, o=Example
+uniqueMember: cn=Fred User, o=Example
+
+dn: cn=Users, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Allan Jefferson, o=Example
+uniqueMember: cn=Paul Tilley, o=Example
+uniqueMember: cn=Temporary Employees, o=Example
+
+dn: cn=Temporary Employees, o=Example
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Jim Swenson, o=Example
+uniqueMember: cn=Elliot Rhodes, o=Example</pre></div>
+
+ <p>Les directives suivantes autoriseraient alors l'accès à Bob
+ Ellis, Tom Jackson, Barbara Jenson, Fred User, Allan Jefferson, et
+ Paul Tilley, mais l'interdiraient à Jim Swenson, ou Elliot Rhodes
+ (car ils sont situés dans un sous-groupe de niveau de profondeur 2)
+ :</p>
+<pre class="prettyprint lang-config">Require ldap-group cn=Employees, o=Example
+AuthLDAPMaxSubGroupDepth 1</pre>
- <p>Les utilisateurs devront s'authentifier en entrant leur UPN, de
- la forme<em>untel@nz.example.com</em>.</p>
+ <p>Le comportement de cette directive est modifié par les directives
+ <code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code>,
+ <code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code>,
+ <code class="directive"><a href="#authldapmaxsubgroupdepth">AuthLDAPMaxSubGroupDepth</a></code>,
+ <code class="directive"><a href="#authldapsubgroupattribute">AuthLDAPSubGroupAttribute</a></code>, et
+ <code class="directive"><a href="#authldapsubgroupclass">AuthLDAPSubGroupClass</a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="frontpage" id="frontpage">Utilisation de Microsoft
- FrontPage avec mod_authnz_ldap</a></h2>
- <p>Normalement, FrontPage utilise des fichiers utilisateur/groupe
- spécifiques à FrontPage-web (c'est à dire les modules
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> et
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>) pour effectuer toute
- l'authentification. Malheureusement, il ne suffit pas de modifier
- l'authentification LDAP en ajoutant les directives appropriées, car
- ceci corromprait les formulaires de <em>Permissions</em> dans le
- client FrontPage, qui sont censés modifier les fichiers
- d'autorisation standards au format texte.</p>
+<h3><a name="reqdn" id="reqdn">Require ldap-dn</a></h3>
- <p>Lorsqu'un site web FrontPage a été créé, lui adjoindre
- l'authentification LDAP consiste à ajouter les directives suivantes
- à <em>chaque</em> fichier <code>.htaccess</code> qui sera créé dans
- le site web :</p>
-<pre class="prettyprint lang-config">AuthLDAPURL "the url"
-AuthGroupFile mygroupfile
-Require group mygroupfile</pre>
+ <p>La directive <code>Require ldap-dn</code> permet à
+ l'administrateur d'accorder l'utorisation d'accès en fonction du DN.
+ Elle permet de spécifier un DN pour lequel l'accès est autorisé. Si
+ le DN extrait de
+ l'annuaire correspond au DN spécifié par la directive <code>Require
+ ldap-dn</code>, l'autorisation d'accès est accordée. Note :
+ n'entourez pas Le DN de guillemets.</p>
+ <p>La directive suivante accorderait l'accès à un DN spécifique
+ :</p>
+<pre class="prettyprint lang-config">Require ldap-dn cn=Barbara Jenson, o=Example</pre>
-<h3><a name="howitworks" id="howitworks">Comment ça marche</a></h3>
- <p>FrontPage restreint l'accès à un site web en ajoutant la
- directive <code>Require valid-user</code> aux fichiers
- <code>.htaccess</code>. La directive <code>Require valid-user</code>
- permettra l'accès à tout utilisateur valide <em>du point de vue
- LDAP</em>. Cela signifie que tout utilisateur possédant une entrée
- dans l'annuaire LDAP sera considéré comme valide, alors que
- FrontPage ne considère comme valides que les utilisateurs
- enregistrés dans le fichier des utilisateurs local. En remplaçant
- l'autorisation par groupe LDAP par une autorisation par fichier de
- groupe, Apache sera en mesure de consulter le fichier des
- utilisateurs local (géré par FrontPage) - au lieu de l'annuaire LDAP
- - lors du processus d'autorisation des utilisateurs.</p>
+ <p>Le comportement ce cette directive est modifié par la directive
+ <code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code>.</p>
- <p>Une fois les directives ajoutées selon ce qui précède, les
- utilisateurs FrontPage pourront effectuer toutes les opérations de
- gestion à partir du client FrontPage.</p>
+<h3><a name="reqattribute" id="reqattribute">Require ldap-attribute</a></h3>
-<h3><a name="fpcaveats" id="fpcaveats">Avertissements</a></h3>
+ <p>La directive <code>Require ldap-attribute</code> permet à
+ l'administrateur d'accorder l'autorisation d'accès en fonction des
+ attributs de l'utilisateur authentifié dans l'annuaire LDAP. Si la
+ valeur de l'attribut dans l'annuaire correspond à la valeur
+ spécifiée par la directive, l'autorisation d'accès est accordée.</p>
- <ul>
- <li>Lors du choix de l'URL LDAP, l'attribut à utiliser pour
- l'authentification doit aussi être valide pour le fichier des
- utilisateurs de <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. A cette fin,
- l'UID est idéal.</li>
+ <p>La directive suivante accorderait l'autorisation d'accès à tout
+ utilisateur dont l'attribut employeeType a pour valeur "actif" :</p>
- <li>Lorsqu'ils ajoutent des utilisateurs via FrontPage, les
- administrateurs de FrontPage doivent choisir des noms
- d'utilisateurs qui existent déjà dans l'annuaire LDAP (pour des
- raisons évidentes). De même, le mot de passe que l'administrateur
- entre dans le formulaire est ignoré, car pour l'authentification,
- Apache utilise le mot de passe de l'annuaire LDAP, et non le mot
- de passe enregistré dans le fichier des utilisateurs, ce qui peut
- semer la confusion parmi les administrateurs web.</li>
+ <pre class="prettyprint lang-config">Require ldap-attribute employeeType=active</pre>
-
- <li>Pour supporter FrontPage, Apache doit être compilé avec
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>, <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
- et <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>. Ceci est dû au fait
- qu'Apache doit utiliser le fichier de groupes de
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> pour déterminer le niveau
- d'accès d'un utilisateur au site web FrontPage.</li>
- <li>Les directives doivent être placées dans les fichiers
- <code>.htaccess</code>. Elles ne fonctionneront pas si vous les
- placez dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code> ou <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>. Ceci est dû au fait que pour savoir
- où se trouve la liste des utilisateurs valides,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> doit être en mesure d'atteindre
- la directive <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> qui se trouve
- dans les fichiers <code>.htaccess</code> de FrontPage. Si les directives
- de <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> ne sont pas situées dans le
- même fichier <code>.htaccess</code> que les directives FrontPage,
- la configuration ne fonctionnera pas, car
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> ne sera jamais en mesure de
- traiter le fichier <code>.htaccess</code>, et par conséquent ne
- pourra jamais trouver le fichier des utilisateurs géré par
- FrontPage.</li>
- </ul>
+ <p>Plusieurs paires attribut/valeur peuvent être spécifiées par une
+ même directive en les séparant par des espaces, ou en définissant
+ plusieurs directives <code>Require ldap-attribute</code>. La logique
+ sous-jacente à une liste de paires attribut/valeur est une opération
+ OU. L'autorisation d'accès sera accordée si au moins une paire
+ attribut/valeur de la liste spécifiée correspond à la paire
+ attribut/valeur de l'utilisateur authentifié. Si elle contient des
+ espaces, la valeur, et seulement la valeur, doit être entourée de
+ guillemets.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapauthorizeprefix" id="authldapauthorizeprefix">Directive</a> <a name="AuthLDAPAuthorizePrefix" id="AuthLDAPAuthorizePrefix">AuthLDAPAuthorizePrefix</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le préfixe ajouté aux variables d'environnement
-durant la phase d'autorisation</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPAuthorizePrefix <em>préfixe</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPAuthorizePrefix AUTHORIZE_</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
-</table>
- <p>Cette directive permet de spécifier le préfixe ajouté aux
- variables d'environnement durant la phase d'autorisation. Si la
- valeur spécifiée est <em>AUTHENTICATE_</em>, les utilisateurs de ces
- variables d'environnement verront les mêmes informations, que le
- serveur effectue une authentification, une autorisation, ou les
- deux.</p>
+ <p>La directive suivante accorderait l'autorisation d'accès à tout
+ utilisateur dont l'attribut city aurait pour valeur "San Jose", ou
+ donc l'attribut status aurait pour valeur "actif" :</p>
- <div class="note"><h3>Note</h3>
- Aucune variable d'autorisation n'est définie lorsqu'un utilisateur
- s'est vu autoriser l'accès via la directive <code>Require
- valid-user</code>.
- </div>
+ <pre class="prettyprint lang-config">Require ldap-attribute city="San Jose" status=active</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapbindauthoritative" id="authldapbindauthoritative">Directive</a> <a name="AuthLDAPBindAuthoritative" id="AuthLDAPBindAuthoritative">AuthLDAPBindAuthoritative</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Détermine si l'on doit utiliser d'autres fournisseurs
-d'authentification lorsque le serveur ne peut pas valider les données
-d'authentification de l'utilisateur, alors que ce dernier possède un
-DN.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPBindAuthoritative<em>off|on</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPBindAuthoritative on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Par défaut, des fournisseurs d'authentification sont appelés
- si un utilisateur ne possède pas de DN, mais ne le sont pas si
- l'utilisateur possède un DN et si son mot de passe ne peut pas être
- vérifié lors d'une connexion au serveur LDAP. Si la directive
- <code class="directive"><a href="#authldapbindauthoritative">AuthLDAPBindAuthoritative</a></code> est
- définie à <em>off</em>, d'autres modules d'authentification
- configurés auront une chance de valider le mot de passe de
- l'utilisateur si la tentative de connexion au serveur LDAP échoue
- pour une raison quelconque (avec les données d'authentification
- fournies).</p>
- <p>Ceci permet aux utilisateurs présent à la fois dans l'annuaire
- LDAP et dans un fichier <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> de s'authentifier
- lorsque le serveur LDAP est disponible, alors que le compte de
- l'utilisateur est verrouillé ou que son mot de passe est
- inutilisable pour une raison quelconque.</p>
-<h3>Voir aussi</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li>
-<li><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapbinddn" id="authldapbinddn">Directive</a> <a name="AuthLDAPBindDN" id="AuthLDAPBindDN">AuthLDAPBindDN</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Un DN optionnel pour se connecter au serveur
-LDAP</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPBindDN <em>dn</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Cette directive permet de définir un DN optionnel pour se
- connecter au serveur afin d'y rechercher des entrées. Si aucun DN
- n'est spécifié, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tentera une
- connexion anonyme.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapbindpassword" id="authldapbindpassword">Directive</a> <a name="AuthLDAPBindPassword" id="AuthLDAPBindPassword">AuthLDAPBindPassword</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Mot de passe à utiliser en conjonction avec le DN de
-connexion</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPBindPassword <em>mot-de-passe</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td><em>exec:</em> est disponible depuis la version 2.4.5 du
-serveur HTTP Apache.</td></tr>
-</table>
- <p>Cette directive permet de spécifier un mot de passe à utiliser en
- conjonction avec le DN de connexion. Notez que ce mot de passe
- constitue en général une donnée sensible, et doit donc être protégé
- de manière appropriée. Vous ne devez utiliser les directives
- <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code> et <code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code> que si
- vous en avez vraiment besoin pour effectuer une recherche dans
- l'annuaire.</p>
- <p>Si la valeur commence par exec:, la commande résultante sera
- exécutée, et la première ligne renvoyée sur la sortie standard sera
- utilisée comme mot de passe.</p>
-<pre class="prettyprint lang-config">#Mot de passe utilisé tel quel
-AuthLDAPBindPassword secret
+<h3><a name="reqfilter" id="reqfilter">Require ldap-filter</a></h3>
-#Exécute /path/to/program pour obtenir le mot de passe
-AuthLDAPBindPassword exec:/path/to/program
+ <p>La directive <code>Require ldap-filter</code> permet à
+ l'administrateur d'accorder l'autorisation d'accès en fonction d'un
+ filtre de recherche LDAP complexe. L'autorisation d'accès est
+ accordée si le DN renvoyé par le filtre de recherche correspond au
+ DN de l'utilisateur authentifié.</p>
-#Exécute /path/to/otherProgram avec un argument pour obtenir le mot de passe
-AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"</pre>
+ <p>La directive suivante accorderait l'autorisation d'accès à tout
+ utilisateur possédant un téléphone cellulaire et faisant partie du
+ département "marketing" :</p>
+ <pre class="prettyprint lang-config">Require ldap-filter &(cell=*)(department=marketing)</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapcharsetconfig" id="authldapcharsetconfig">Directive</a> <a name="AuthLDAPCharsetConfig" id="AuthLDAPCharsetConfig">AuthLDAPCharsetConfig</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Chemin du fichier de configuration de la correspondance
-langage/jeu de caractères</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPCharsetConfig <em>chemin-fichier</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>La directive <code class="directive">AuthLDAPCharsetConfig</code> permet
- de définir le chemin du fichier de configuration de la
- correspondance langage/jeu de caractères. <var>chemin-fichier</var>
- est un chemin relatif au répertoire défini par la directive
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. Ce fichier contient une liste
- de correspondances extension de langage/jeu de caractères. La
- plupart des administrateurs utilisent le fichier
- <code>charset.conv</code> fourni qui associe les extensions de
- langage courantes à leurs jeux de caractères.</p>
+ <p>Alors que la directive <code>Require ldap-attribute</code> se
+ contente d'une simple comparaison d'attributs, la directive
+ <code>Require ldap-filter</code> effectue une opération de recherche
+ dans l'annuaire LDAP en utilisant le filtre de recherche spécifié.
+ Si une simple comparaison d'attributs suffit, l'opération de
+ comparaison effectuée par <code>ldap-attribute</code> sera plus
+ rapide que l'opération de recherche effectuée par
+ <code>ldap-filter</code>, en particulier dans le cas d'un annuaire
+ LDAP de grande taille.</p>
- <p>Le fichier contient des lignes au format suivant :</p>
+ <p>Lorsqu'on utilise une <a href="../expr.html">expression
+ rationnelle</a> au sein d'un filtre, il faut bien s'assurer que les
+ filtres LDAP sont correctement échappés afin de se prémunir contre
+ toute injection LDAP. A cet effet, il est possible d'utiliser la
+ fonction ldap.</p>
- <div class="example"><p><code>
- <var>extension de langage</var> <var>jeu de caractères</var>
- [<var>Nom du langage</var>] ...
- </code></p></div>
+<pre class="prettyprint lang-config"><LocationMatch ^/dav/(?<SITENAME>[^/]+)/>
+ Require ldap-filter (memberOf=cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}},ou=Websites,o=Example)
+</LocationMatch></pre>
- <p>L'extension est insensible à la casse. Les lignes vides et les
- lignes commençant par un dièse (<code>#</code>) sont ignorées.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapcompareasuser" id="authldapcompareasuser">Directive</a> <a name="AuthLDAPCompareAsUser" id="AuthLDAPCompareAsUser">AuthLDAPCompareAsUser</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilisation des données d'authentification de l'utilisateur
-pour effectuer les comparaisons pour l'attribution des autorisations</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPCompareAsUser on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPCompareAsUser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version version 2.3.6</td></tr>
-</table>
- <p>Lorsque cette directive est définie, et si
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> a authentifié l'utilisateur, les
- recherches LDAP pour les autorisations utilisent le nom distinctif
- trouvé (DN) et le mot de passe d'authentification basique HTTP de
- l'utilisateur authentifié au lieu des données d'authentification
- configurées au niveau du serveur.</p>
- <p>Les vérifications d'autorisation <em>ldap-attribute</em>,
- <em>ldap-user</em>, et <em>ldap-group</em> (niveau simple seulement)
- utilisent des comparaisons.</p>
- <p>Cette directive n'a d'effet sur les comparaisons effectuées au
- cours des traitements de groupe imbriqués, et lorsque la directive
- <code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code>
- est aussi activée.</p>
+<h3><a name="reqsearch" id="reqsearch">Require ldap-search</a></h3>
- <p>Cette directive ne doit être utilisée que si votre serveur LDAP
- n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
- utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
+ <p>La directive <code>Require ldap-search</code> permet à
+ l'administrateur d'autoriser l'accès en fonction d'un filtre de
+ recherche LDAP générique contenant une <a href="../expr.html">expression rationnelle</a>. Si le filtre de
+ recherche renvoie une et une seule correspondance, l'accès est
+ accordé sans tenir compte du DN.</p>
-<h3>Voir aussi</h3>
-<ul>
-<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
-<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapcomparednonserver" id="authldapcomparednonserver">Directive</a> <a name="AuthLDAPCompareDNOnServer" id="AuthLDAPCompareDNOnServer">AuthLDAPCompareDNOnServer</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise le serveur LDAP pour comparer les DNs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPCompareDNOnServer on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPCompareDNOnServer on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Lorsque cette directive est définie à on,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise le serveur LDAP pour
- comparer les DNs. Il s'agit de la seule méthode infaillible pour
- comparer les DNs. <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> va rechercher
- dans l'annuaire le DN spécifié par la directive <a href="#reqdn"><code>Require dn</code></a>, puis extraire ce DN et le
- comparer avec le DN extrait de l'entrée de l'utilisateur. Si cette
- directive est à off, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> effectue une
- simple comparaison de chaînes. Cette dernière approche peut produire
- des faux négatifs, mais elle est beaucoup plus rapide. Notez
- cependant que le cache de <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> peut accélérer
- la comparaison de DNs dans la plupart des situations.</p>
+ <p>La directive suivante accorderait l'accès aux URLs correspondant
+ aux objets spécifiés dans le serveur LDAP :</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapdereferencealiases" id="authldapdereferencealiases">Directive</a> <a name="AuthLDAPDereferenceAliases" id="AuthLDAPDereferenceAliases">AuthLDAPDereferenceAliases</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>À quel moment le module va déréférencer les
-alias</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPDereferenceAliases never|searching|finding|always</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPDereferenceAliases always</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier à quel moment
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> va déréférencer les alias au cours
- des opérations liées à LDAP. La valeur par défaut est
- <code>always</code>.</p>
+<pre class="prettyprint lang-config"><LocationMatch ^/dav/(?<SITENAME>[^/]+)/>
+Require ldap-search (cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}} Website)
+</LocationMatch></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapgroupattribute" id="authldapgroupattribute">Directive</a> <a name="AuthLDAPGroupAttribute" id="AuthLDAPGroupAttribute">AuthLDAPGroupAttribute</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'attribut LDAP utilisé pour vérifier l'appartenance d'un
-utilisateur à un groupe.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPGroupAttribute <em>attribut</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPGroupAttribute member uniquemember</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier quel attribut LDAP est
- utilisé pour vérifier l'appartenance d'un utilisateur à un
- groupe. On peut spécifier plusieurs attributs en répétant cette
- directive plusieurs fois. Si la directive n'est pas définie,
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise les attributs
- <code>member</code> et <code>uniquemember</code>.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapgroupattributeisdn" id="authldapgroupattributeisdn">Directive</a> <a name="AuthLDAPGroupAttributeIsDN" id="AuthLDAPGroupAttributeIsDN">AuthLDAPGroupAttributeIsDN</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise le DN de l'utilisateur pour vérifier son
-appartenance à un groupe</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPGroupAttributeIsDN on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPGroupAttributeIsDN on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Lorsqu'elle est définie à <code>on</code>, cette directive
- indique que c'est le DN de l'utilisateur qui doit être utilisé pour
- vérifier son appartenance à un groupe. Dans le cas contraire, c'est
- le nom de l'utilisateur qui sera utilisé. Par exemple, supposons que
- le client envoie le nom d'utilisateur <code>bjenson</code>, qui
- correspond au DN LDAP <code>cn=Babs Jenson,o=Example</code>. Si la
- directive est à <code>on</code>, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> va
- vérifier si <code>cn=Babs Jenson, o=Example</code> est un membre du
- groupe. Dans le cas contraire, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>
- vérifiera si <code>bjenson</code> est un membre du groupe.</p>
+ <p>Note : il faut bien s'assurer que les
+ expressions sont correctement échappés afin de se prémunir contre
+ toute injection LDAP. A cet effet, il est possible d'utiliser la
+ fonction <strong>ldap</strong> comme dans l'exemple ci-dessus.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapinitialbindasuser" id="authldapinitialbindasuser">Directive</a> <a name="AuthLDAPInitialBindAsUser" id="AuthLDAPInitialBindAsUser">AuthLDAPInitialBindAsUser</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Détermine si le serveur effectue la recherche initiale du
-DN en utilisant le nom propre de l'utilisateur pour l'authentification
-de base
-et non de manière anonyme, ou en utilisant des données d'authentification
-codées en dur pour le serveur</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPInitialBindAsUser <em>off|on</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPInitialBindAsUser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
-</table>
- <p>Par défaut, le serveur convertit le nom d'utilisateur pour
- l'authentification de base en nom distinctif LDAP (DN) soit de
- manière anonyme, soit avec un couple nom/mot de passe dédié. Cette
- directive permet de forcer le serveur à utiliser les véritables nom
- d'utilisateur et mot de passe fournis par l'utilisateur pour
- effectuer la recherche initiale du DN.</p>
- <p>Si le nom d'utilisateur ne peut pas s'authentifier directement
- et nécessite de légères modifications, voir la directive <code class="directive"><a href="#authldapinitialbindpattern">AuthLDAPInitialBindPattern</a></code>.</p>
- <p>Cette directive ne doit être utilisée que si votre serveur LDAP
- n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
- utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Exemples</a></h2>
- <div class="note"><h3>Non disponible dans la cas d'une autorisation seule</h3>
- On ne peut utiliser cette directive que si ce module
- effectue une authentification, et n'a aucun effet si ce module
- n'est utilisé que pour les processus d'autorisation.
- </div>
+ <ul>
+ <li>
+ Accorde l'autorisation d'accès à tout utilisateur présent dans
+ l'annuaire LDAP, en utilisant son UID pour effectuer la
+ recherche :
+<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)"
+Require valid-user</pre>
-<h3>Voir aussi</h3>
-<ul>
-<li><code class="directive"><a href="#authldapinitialbindpattern">AuthLDAPInitialBindPattern</a></code></li>
-<li><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></li>
-<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
-<li><code class="directive"><a href="#authldapsearchasuser">AuthLDAPSearchAsUser</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapinitialbindpattern" id="authldapinitialbindpattern">Directive</a> <a name="AuthLDAPInitialBindPattern" id="AuthLDAPInitialBindPattern">AuthLDAPInitialBindPattern</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie la modification a apporter au nom d'utilisateur
-pour l'authentification de base lors de l'authentification auprès du
-serveur LDAP pour effectuer une recherche de DN</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPInitialBindPattern<em><var>regex</var> <var>substitution</var></em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPInitialBindPattern (.*) $1 (nom de l'utilisateur
-distant utilisé tel quel)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
-</table>
- <p>Si la directive <code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code> est
- définie à <em>ON</em>, le nom utilisateur pour l'authentification de
- base sera transformé selon l'expression rationnelle
- <var>regex</var> et l'argument <var>substitution</var> spécifiés.</p>
+ </li>
- <p>L'expression rationnelle est comparée au nom d'utilisateur pour
- l'authentification de base courant. L'argument
- <var>substitution</var> peut contenir des références arrières, mais
- n'effectue aucune autre interpolation de variable.</p>
+ <li>
+ L'exemple suivant est similaire au précédent, mais les champs
+ dont les valeurs par défaut conviennent sont omis. Notez aussi
+ la présence d'un annuaire LDAP redondant :
+<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example"
+Require valid-user</pre>
- <p>Cette directive ne doit être utilisée que si votre serveur LDAP
- n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
- utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
+ </li>
- <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) $1@example.com</pre>
+ <li>
+ Encore un exemple similaire aux précédents, mais cette fois,
+ c'est l'attribut cn qui est utilisé pour la recherche à la place
+ de l'UID. Notez que ceci peut poser problème si plusieurs
+ utilisateurs de l'annuaire partagent le même <code>cn</code>,
+ car une recherche sur le <code>cn</code> <strong>doit</strong>
+ retourner une entrée et une seule. C'est pourquoi cette
+ approche n'est pas recommandée : il est préférable de choisir un
+ attribut de votre annuaire dont l'unicité soit garantie, comme
+ <code>uid</code>.
+<pre class="prettyprint lang-config">AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn"
+Require valid-user</pre>
+
+ </li>
+
+ <li>
+ Accorde l'autorisation d'accès à tout utilisateur appartenant au
+ groupe Administrateurs. Les utilisateurs doivent s'authentifier
+ en utilisant leur UID :
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
+Require ldap-group cn=Administrators, o=Example</pre>
- <pre class="prettyprint lang-config">AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com</pre>
+ </li>
+ <li>
+ Accorde l'accès à tout utilisateur appartenant au groupe dont le
+ nom correspond au nom d'hôte du serveur virtuel. Dans cet exemple,
+ on utilise une <a href="../expr.html">expression</a> pour
+ construire le filtre.
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid
+Require ldap-group cn=%{SERVER_NAME}, o=Example</pre>
- <div class="note"><h3>Non disponible dans la cas d'une autorisation seule</h3>
- On ne peut utiliser cette directive que si ce module
- effectue une authentification, et n'a aucun effet si ce module
- n'est utilisé que pour les processus d'autorisation.
- </div>
- <div class="note"><h3>Débogage</h3>
- Le DN de substitution est enregistré dans la variable
- d'environnement <em>LDAP_BINDASUSER</em>. Si l'expression
- rationnelle ne convient pas, le nom d'utilisateur est utilisé
- tel quel.
- </div>
+ </li>
-<h3>Voir aussi</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_authnnz_ldap.html#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
-<li><code class="directive"><a href="../mod/mod_authnnz_ldap.html#authldapbinddn">AuthLDAPBindDN</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapmaxsubgroupdepth" id="authldapmaxsubgroupdepth">Directive</a> <a name="AuthLDAPMaxSubGroupDepth" id="AuthLDAPMaxSubGroupDepth">AuthLDAPMaxSubGroupDepth</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie la profondeur d'imbrication des sous-groupes
-maximale prise en compte avant l'abandon de la recherche de
-l'utilisateur.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPMaxSubGroupDepth <var>Nombre</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPMaxSubGroupDepth 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.0 du serveur HTTP
-Apache ; la valeur par défaut était 10 dans les versions 2.4.x et les
-premières versions 2.5</td></tr>
-</table>
- <p>Lorsque cette directive est définie à une valeur <code>X</code>
- non nulle, en combinaison avec l'utilisation de la directive
- <code>Require ldap-group DN-groupe</code>, les données de connexion
- fournies seront utilisées pour vérifier l'appartenance de
- l'utilisateur à l'objet de l'annuaire <code>DN-groupe</code> ou à
- tout sous-groupe du groupe courant en tenant compte de la profondeur
- d'imbrication maximale <code>X</code> spécifiée par la directive.</p>
- <p>Se référer à la section <a href="#reqgroup"><code>Require
- ldap-group</code></a> pour un exemple plus détaillé.</p>
+ <li>
+ Pour l'exemple suivant, on suppose que tout utilisateur de chez
+ Example qui dispose d'un bippeur alphanumérique possèdera un
+ attribut LDAP <code>qpagePagerID</code>. Seuls ces utilisateurs
+ (authentifiés via leur UID) se verront accorder l'autorisation
+ d'accès :
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*)
+Require valid-user</pre>
- <div class="note"><h3>Performances dans le cas des groupes imbriqués</h3>
- <p>Lorsque les directives
- <code class="directive">AuthLDAPSubGroupAttribute</code> et
- <code class="directive">AuthLDAPGroupAttribute</code> se recouvrent (comme
- c'est le cas par défaut et requis par les schémas LDAP courants), la
- recherche de sous-groupes au sein de grands groupes peut être très
- longue. Si vos groupes sont très grands et non imbriqués, définissez
- la directive <code class="directive">AuthLDAPMaxSubGroupDepth</code> à 0.</p>
- </div>
+ </li>
+ <li>
+ <p>L'exemple suivant illustre la puissance des filtres pour
+ effectuer des requêtes complexes. Sans les filtres, il aurait
+ été nécessaire de créer un nouveau groupe LDAP et de s'assurer
+ de la synchronisation des membres du groupe avec les
+ utilisateurs possédant un bippeur. Tout devient limpide avec les
+ filtres. Nous avons pour but d'accorder l'autorisation d'accès à
+ tout utilisateur disposant d'un bippeur ainsi qu'à Joe Manager
+ qui ne possède pas de bippeur, mais doit tout de même pouvoir
+ accéder à la ressource :</p>
+<pre class="prettyprint lang-config">AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager))
+Require valid-user</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapremoteuserattribute" id="authldapremoteuserattribute">Directive</a> <a name="AuthLDAPRemoteUserAttribute" id="AuthLDAPRemoteUserAttribute">AuthLDAPRemoteUserAttribute</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie l'attribut dont la valeur renvoyée au cours de la
-requête de l'utilisateur sera utilisée pour définir la variable
-d'environnement REMOTE_USER</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPRemoteUserAttribute uid</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Lorsque cette directive est définie, la variable d'environnement
- <code>REMOTE_USER</code> sera définie à la valeur de l'attribut
- spécifié. Assurez-vous que cet attribut soit bien inclus dans la
- liste d'attributs spécifiés dans la définition de AuthLDAPUrl ; dans
- le cas contraire, cette directive n'aurait aucun effet. Si elle est
- présente, cette directive l'emporte sur <code class="directive"><a href="#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></code>. Elle
- peut s'avérer utile par exemple, si vous souhaitez que les
- utilisateurs se connectent à un site web en utilisant leur adresse
- email, alors qu'une application sous-jacente nécessite un nom
- d'utilisateur comme identifiant.</p>
- <p>Cette directive n'a d'effet que si l'on utilise ce module pour
- l'authentification.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapremoteuserisdn" id="authldapremoteuserisdn">Directive</a> <a name="AuthLDAPRemoteUserIsDN" id="AuthLDAPRemoteUserIsDN">AuthLDAPRemoteUserIsDN</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise le DN de l'utilisateur pour définir la variable
-d'environnement REMOTE_USER</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPRemoteUserIsDN on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPRemoteUserIsDN off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Lorsque cette directive est à on, la variable d'environnement
- <code>REMOTE_USER</code> sera définie avec la valeur du DN complet
- de l'utilisateur authentifié, et non plus avec simplement le nom
- d'utilisateur fourni par le client. Elle est définie à off par
- défaut.</p>
- <p>Cette directive n'a d'effet que si l'on utilise ce module pour
- l'authentification.</p>
+ <p>Ce dernier exemple peut sembler confus au premier abord ; en
+ fait, il permet de mieux comprendre à quoi doit ressembler le
+ filtre en fonction de l'utilisateur qui se connecte. Si Fred
+ User se connecte en tant que <code>fuser</code>, le filtre devra
+ ressembler à :</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapsearchasuser" id="authldapsearchasuser">Directive</a> <a name="AuthLDAPSearchAsUser" id="AuthLDAPSearchAsUser">AuthLDAPSearchAsUser</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise les données d'authentification de l'utilisateur
-pour la recherche des autorisations</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPSearchAsUser on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPSearchAsUser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.6</td></tr>
-</table>
- <p>Lorsque cette directive est définie, et si
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> a authentifié l'utilisateur, les
- recherches LDAP pour définir les autorisations utilisent le nom
- distinctif (DN) trouvé et le mot de passe pour l'authentification de
- base HTTP de l'utilisateur authentifié, au lieu des données
- d'authentification configurées au niveau du serveur.</p>
+ <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))</code></p></div>
- <p>Les vérifications d'autorisation <em>ldap-filter</em> et
- <em>ldap-dn</em> utilisent des recherches.</p>
+ <p>Un recherche avec le filtre ci-dessus ne retournera un
+ résultat positif que si <em>fuser</em> dispose d'un bippeur. Si
+ Joe Manager se connecte en tant que <em>jmanager</em>, le filtre
+ devra ressembler à :</p>
- <p>Cette directive n'a d'effet sur les comparaisons effectuées au
- cours des traitements de groupe imbriqués, et lorsque la directive
- <code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code>
- est aussi activée.</p>
+ <div class="example"><p><code>(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))</code></p></div>
- <p>Cette directive ne doit être utilisée que si votre serveur LDAP
- n'autorise pas les recherches anonymes, ou si vous ne pouvez pas
- utiliser de nom d'utilisateur dédié via la directive <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code>.
- </p>
+ <p>Un recherche avec le filtre ci-dessus retournera un
+ résultat positif que <em>jmanager</em> dispose d'un
+ bippeur ou non</p>
+ </li>
+ </ul>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usingtls" id="usingtls">Utilisation de TLS</a></h2>
+ <p>Pour l'utilisation de TLS, voir les directives du module
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> et <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
-<h3>Voir aussi</h3>
-<ul>
-<li><code class="directive"><a href="#authldapinitialbindasuser">AuthLDAPInitialBindAsUser</a></code></li>
-<li><code class="directive"><a href="#authldapcompareasuser">AuthLDAPCompareAsUser</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapsubgroupattribute" id="authldapsubgroupattribute">Directive</a> <a name="AuthLDAPSubGroupAttribute" id="AuthLDAPSubGroupAttribute">AuthLDAPSubGroupAttribute</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie les noms d'attribut, un par directive, utilisés
-pour différencier les membres du groupe courant qui sont eux-mêmes des
-groupes.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPSubGroupAttribute <em>attribut</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPSubgroupAttribute member uniquemember</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.0 du serveur HTTP
-Apache</td></tr>
-</table>
- <p>Un objet groupe LDAP peut contenir des membres qui sont des
- utilisateurs et des membres qui sont eux-mêmes des groupes (appelés
- sous-groupes ou groupes imbriqués). La directive
- <code>AuthLDAPSubGroupAttribute</code> spécifie l'attribut utilisé
- pour identifier les groupes, alors que la directive
- <code>AuthLDAPGroupAttribute</code> spécifie l'attribut utilisé
- pour identifier les utilisateurs. On peut spécifier plusieurs
- attributs en répétant la directive plusieurs fois. Si elle n'est pas
- définie, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise les attributs
- <code>member</code> et <code>uniqueMember</code>.</p>
+ <p>Un second paramètre optionnel peut être ajouté à la directive
+ <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> pour
+ remplacer le type de connexion par défaut défini par la directive
+ <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>. Ceci
+ permettra de promouvoir la connexion établie via une URL du type
+ <em>ldap://</em> au statut de connection sécurisée sur le même
+ port.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usingssl" id="usingssl">Utilisation de SSL</a></h2>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapsubgroupclass" id="authldapsubgroupclass">Directive</a> <a name="AuthLDAPSubGroupClass" id="AuthLDAPSubGroupClass">AuthLDAPSubGroupClass</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie quelles valeurs d'objectClass LDAP identifient les
-objets de l'annuaire qui sont des groupes au cours du traitement des
-sous-groupes.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPSubGroupClass <em>ObjectClass-LDAP</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.0 du serveur HTTP
-Apache</td></tr>
-</table>
- <p>Un objet groupe LDAP peut contenir des membres qui sont des
- utilisateurs et des membres qui sont eux-mêmes des groupes (appelés
- sous-groupes ou groupes imbriqués). La directive
- <code>AuthLDAPSubGroupAttribute</code> permet d'identifier les
- membres qui sont des sous-groupes du groupe courant (à l'opposé des
- membres utilisateurs). La directive
- <code>AuthLDAPSubGroupClass</code> permet de spécifier les valeurs
- d'objectClass LDAP utilisées pour vérifier que certains membres sont
- en fait des objets groupe. Les sous-groupes ainsi identifiés peuvent
- alors faire l'objet d'une recherche d'autres membres utilisateurs ou
- sous-groupes. On peut spécifier plusieurs attributs en répétant
- cette directive plusieurs fois. Si cette directive n'est pas
- définie, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> utilise les attributs
- <code>groupOfNames</code> et <code>groupOfUniqueNames</code>.</p>
+ <p>Pour l'utilisation de SSL, voir les directives du module
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>, <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code> et <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedmode">LDAPTrustedMode</a></code>.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authldapurl" id="authldapurl">Directive</a> <a name="AuthLDAPUrl" id="AuthLDAPUrl">AuthLDAPUrl</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'URL permettant de spécifier les paramètres de la
-recherche LDAP</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthLDAPUrl <em>url [NONE|SSL|TLS|STARTTLS]</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-</table>
- <p>Une URL conforme à la RFC 2255 qui permet de spécifier les
- paramètres à utiliser pour la recherche dans l'annuaire LDAP. La
- syntaxe de l'URL est :</p>
-<div class="example"><p><code>ldap://hôte:port/DN-de-base?attribut?portée?filtre</code></p></div>
- <p>Si vous souhaitez mettre à la disposition d'Apache plusieurs URLs
- LDAP, la syntaxe sera :</p>
-<pre class="prettyprint lang-config">AuthLDAPUrl "ldap://ldap1.example.com ldap2.example.com/dc=..."</pre>
+ <p>Pour spécifier un serveur LDAP sécurisé, utilisez
+ <em>ldaps://</em> au lieu de
+ <em>ldap://</em> dans la directive <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="exposed" id="exposed">Mise à disposition des informations de
+connexion</a></h2>
-<p><em><strong>Mise en garde : </strong>Si vous spécifiez plusieurs
-serveurs, vous devez en entourer la liste avec des guillemets ; dans le
-cas contraire, vous générerez une erreur : "AuthLDAPURL takes one
-argument, URL to define LDAP connection..".</em> Vous pouvez bien
-entendu ajouter des paramètres de recherche à chacun des serveurs
-spécifiés.</p>
+ <p>Au cours du processus d'<em>authentification</em>, les attributs LDAP
+ spécifiés par la directive <code class="directive"><a href="#authldapurl">authldapurl</a></code> sont enregistrés
+ dans des variables d'environnement préfixées par la chaîne
+ "AUTHENTICATE_".</p>
-<dl>
-<dt>ldap</dt>
+ <p>Au cours du processus d'<em>autorisation</em>, les attributs LDAP
+ spécifiés par la directive <code class="directive"><a href="#authldapurl">authldapurl</a></code> sont enregistrés
+ dans des variables d'environnement préfixées par la chaîne
+ "AUTHORIZE_".</p>
- <dd>Pour ldap non sécurisé, utilisez la chaîne
- <code>ldap</code>. Pour ldap sécurisé, utilisez à la place la
- chaîne <code>ldaps</code>. LDAP sécurisé n'est disponible que si
- Apache a été lié avec une bibliothèque LDAP supportant SSL.</dd>
+ <p>Si les champs attribut contiennent le nom, le CN et le numéro de
+ téléphone d'un utilisateur, un programme CGI pourra accéder à ces
+ informations sans devoir effectuer une autre requête LDAP pour
+ les extraire de l'annuaire.</p>
-<dt>hôte:port</dt>
+ <p>Ceci a pour effet de simplifier considérablement le code et la
+ configuration nécessaire de certaines applications web.</p>
- <dd>
- <p>Il s'agit du nom/port du serveur ldap
- (dont la valeur par défaut est
- <code>localhost:389</code> pour <code>ldap</code>, et
- <code>localhost:636</code> pour <code>ldaps</code>). Pour
- spécifier plusieurs serveurs LDAP redondants, indiquez
- simplement leur liste en les séparant par des espaces.
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tentera alors de se connecter
- à chacun des serveurs jusqu'à ce qu'il parvienne à se
- connecter avec succès. Notez qu'en cas de multiples serveurs
- LDAP, l'ensemble de l'URL LDAP doit être entourée de
- guillemets.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="activedirectory" id="activedirectory">Utilisation d'Active
+Directory</a></h2>
- <p>lorsqu'une connection a été établie avec un serveur, elle
- reste active pendant toute la durée de vie du processus
- <code class="program"><a href="../programs/httpd.html">httpd</a></code>, ou jusqu'à ce que le serveur LDAP
- cesse de fonctionner.</p>
+ <p>Active Directory peut supporter plusieurs domaines à la fois.
+ Pour faire la distinction entre les utilisateurs de plusieurs
+ domaines, on peut ajouter à l'entrée de l'utilisateur dans
+ l'annuaire un identifiant appelé Nom
+ Principal d'Utilisateur (User Principle Name ou UPN). Cet UPN se
+ compose en général du nom de compte de l'utilisateur, suivi du nom
+ du domaine considéré, par exemple <em>untel@nz.example.com</em>.</p>
- <p>Si le serveur LDAP cesse de fonctionner, et ainsi
- interrompt une
- connexion existante, <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> tentera
- de se reconnecter en commençant par le premier serveur de la
- liste, et ainsi de suite avec les serveurs redondants
- suivants. Notez que ce processus n'a rien à voir avec une
- véritable recherche de type round-robin.</p>
- </dd>
+ <p>Vous voudrez probablement configurer le module
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> afin de pouvoir authentifier les
+ utilisateurs de n'importe quel domaine de la forêt Active Directory.
+ Ainsi, <em>untel@nz.example.com</em> et
+ <em>untel@au.example.com</em> pourront être authentifiés en une
+ seule fois par la même requête.</p>
-<dt>DN-de-base</dt>
- <dd>Le DN de la branche de l'annuaire à partir de laquelle
- toutes les recherches seront lancées. Il doit au moins
- correspondre à la racine de votre annuaire, mais vous pouvez
- aussi indiquer une branche plus spécifique.</dd>
+ <p>Pour y parvenir, on utilise le concept de Catalogue Global
+ d'Active Directory. Ce Catalogue Global est une copie en lecture
+ seule des attributs sélectionnés de tous les serveurs de la forêt
+ Active Directory. Une requête vers le
+ Catalogue Global permet donc d'atteindre tous les domaines en une
+ seule fois, sans avoir à se connecter aux différents serveurs, via
+ des liaisons dont certaines peuvent être lentes.</p>
-<dt>attribut</dt>
+ <p>Lorsqu'il est activé, la Catalogue Global est un serveur
+ d'annuaire indépendant accessible sur le port 3268 (3269 pour SSL).
+ Pour rechercher un utilisateur, effectuez une recherche sur
+ l'attribut <em>userPrincipalName</em>, avec une base de recherche
+ vide, comme suit :</p>
- <dd>Il s'agit de l'attribut à utiliser pour la recherche.
- Bien que la RFC
- 2255 autorise une liste d'attributs séparés par des virgules,
- seul le premier sera retenu, sans tenir compte des autres
- attributs fournis. Si aucun attribut n'est fourni, l'attribut
- par défaut est <code>uid</code>. Il est judicieux de choisir un
- attribut dont la valeur sera unique parmi toutes les entrées de
- la branche de l'annuaire que vous aurez définie. Tous les
- attributs spécifiés seront enregistrés dans des variables
- d'environnement avec le préfixe AUTHENTICATE_, afin de pouvoir
- être utilisés par d'autres modules.</dd>
+<pre class="prettyprint lang-config">AuthLDAPBindDN apache@example.com
+AuthLDAPBindPassword password
+AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub</pre>
-<dt>portée</dt>
- <dd>Il s'agit de la portée de la recherche. Elle peut prendre
- les valeurs <code>one</code> ou <code>sub</code>. Notez que la
- RFC 2255 supporte aussi une portée de valeur <code>base</code>,
- mais cette dernière n'est pas supportée par le module. Si la
- portée n'est pas définie, ou si elle est définie à
- <code>base</code>, c'est la valeur de portée par défaut
- <code>sub</code> qui sera utilisée.</dd>
+ <p>Les utilisateurs devront s'authentifier en entrant leur UPN, de
+ la forme<em>untel@nz.example.com</em>.</p>
-<dt>filtre</dt>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="frontpage" id="frontpage">Utilisation de Microsoft
+ FrontPage avec mod_authnz_ldap</a></h2>
- <dd>Il s'agit d'un filtre de recherche LDAP valide. Si aucun
- filtre n'est spécifié, le filtre par défaut
- <code>(objectClass=*)</code> sera utilisé, ce qui corrspond à
- une recherche de tous les types d'objets de l'arborescence. La
- taille des filtres est limitée à environ 8000 caractères (valeur
- de la macro <code>MAX_STRING_LEN</code> dans le code source
- d'Apache), ce qui s'avère plus que suffisant pour la plupart des
- applications. Le mot-clé <code>none</code> permet de désactiver
- l'utilisation des filtres, ce qui peut s'avérer nécessaire avec
- certains serveurs LDAP primitifs.</dd>
-</dl>
+ <p>Normalement, FrontPage utilise des fichiers utilisateur/groupe
+ spécifiques à FrontPage-web (c'est à dire les modules
+ <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> et
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>) pour effectuer toute
+ l'authentification. Malheureusement, il ne suffit pas de modifier
+ l'authentification LDAP en ajoutant les directives appropriées, car
+ ceci corromprait les formulaires de <em>Permissions</em> dans le
+ client FrontPage, qui sont censés modifier les fichiers
+ d'autorisation standards au format texte.</p>
- <p>Pour une recherche, les attribut, filtre et nom d'utilisateur
- fournis par le client HTTP sont combinés pour créer un filtre de
- recherche du style :
- <code>(&(<em>filtre</em>)(<em>attribut</em>
- =<em>nom-utilisateur</em>))</code>.</p>
+ <p>Lorsqu'un site web FrontPage a été créé, lui adjoindre
+ l'authentification LDAP consiste à ajouter les directives suivantes
+ à <em>chaque</em> fichier <code>.htaccess</code> qui sera créé dans
+ le site web :</p>
+<pre class="prettyprint lang-config">AuthLDAPURL "the url"
+AuthGroupFile mygroupfile
+Require group mygroupfile</pre>
- <p>Par exemple, considérons l'URL
- <code>ldap://ldap.example.com/o=Example?cn?sub?(posixid=*)</code>.
- Lorsqu'un client tentera de se connecter en utilisant le nom
- d'utilisateur <code>Babs Jenson</code>, le filtre de recherche sera
- : <code>(&(posixid=*)(cn=Babs Jenson))</code>.</p>
- <p>On peut encore ajouter un paramètre optionnel pour permettre à
- l'URL LDAP de surcharger le type de connexion. Ce paramètre peut
- prendre l'une des valeurs suivantes :</p>
+<h3><a name="howitworks" id="howitworks">Comment ça marche</a></h3>
-<dl>
- <dt>NONE</dt>
- <dd>Établit une connexion non sécurisée sur le port LDAP par
- défaut, ce qui est équivalent à <code>ldap://</code> sur le port
- 389.</dd>
- <dt>SSL</dt>
- <dd>Établit une connexion sécurisée sur le port LDAP sécurisé
- par défaut, ce qui est équivalent à <code>ldaps://</code>.</dd>
- <dt>TLS | STARTTLS</dt>
- <dd>Établit une connexion sécurisée par élévation de niveau sur
- le port LDAP par défaut. Cette connexion sera initialisée sur le
- port 389 par défaut, puis élevée à un niveau de connexion
- sécurisée sur le même port.</dd>
-</dl>
+ <p>FrontPage restreint l'accès à un site web en ajoutant la
+ directive <code>Require valid-user</code> aux fichiers
+ <code>.htaccess</code>. La directive <code>Require valid-user</code>
+ permettra l'accès à tout utilisateur valide <em>du point de vue
+ LDAP</em>. Cela signifie que tout utilisateur possédant une entrée
+ dans l'annuaire LDAP sera considéré comme valide, alors que
+ FrontPage ne considère comme valides que les utilisateurs
+ enregistrés dans le fichier des utilisateurs local. En remplaçant
+ l'autorisation par groupe LDAP par une autorisation par fichier de
+ groupe, Apache sera en mesure de consulter le fichier des
+ utilisateurs local (géré par FrontPage) - au lieu de l'annuaire LDAP
+ - lors du processus d'autorisation des utilisateurs.</p>
- <p>Voir plus haut pour des exemples d'URLs définies par la directive
- <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>.</p>
+ <p>Une fois les directives ajoutées selon ce qui précède, les
+ utilisateurs FrontPage pourront effectuer toutes les opérations de
+ gestion à partir du client FrontPage.</p>
+
+
+<h3><a name="fpcaveats" id="fpcaveats">Avertissements</a></h3>
+
+ <ul>
+ <li>Lors du choix de l'URL LDAP, l'attribut à utiliser pour
+ l'authentification doit aussi être valide pour le fichier des
+ utilisateurs de <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. A cette fin,
+ l'UID est idéal.</li>
+
+ <li>Lorsqu'ils ajoutent des utilisateurs via FrontPage, les
+ administrateurs de FrontPage doivent choisir des noms
+ d'utilisateurs qui existent déjà dans l'annuaire LDAP (pour des
+ raisons évidentes). De même, le mot de passe que l'administrateur
+ entre dans le formulaire est ignoré, car pour l'authentification,
+ Apache utilise le mot de passe de l'annuaire LDAP, et non le mot
+ de passe enregistré dans le fichier des utilisateurs, ce qui peut
+ semer la confusion parmi les administrateurs web.</li>
+
+
+ <li>Pour supporter FrontPage, Apache doit être compilé avec
+ <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>, <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
+ et <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>. Ceci est dû au fait
+ qu'Apache doit utiliser le fichier de groupes de
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> pour déterminer le niveau
+ d'accès d'un utilisateur au site web FrontPage.</li>
+
+ <li>Les directives doivent être placées dans les fichiers
+ <code>.htaccess</code>. Elles ne fonctionneront pas si vous les
+ placez dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code> ou <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>. Ceci est dû au fait que pour savoir
+ où se trouve la liste des utilisateurs valides,
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> doit être en mesure d'atteindre
+ la directive <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> qui se trouve
+ dans les fichiers <code>.htaccess</code> de FrontPage. Si les directives
+ de <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> ne sont pas situées dans le
+ même fichier <code>.htaccess</code> que les directives FrontPage,
+ la configuration ne fonctionnera pas, car
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> ne sera jamais en mesure de
+ traiter le fichier <code>.htaccess</code>, et par conséquent ne
+ pourra jamais trouver le fichier des utilisateurs géré par
+ FrontPage.</li>
+ </ul>
</div>
</div>
<li><img alt="" src="../images/down.gif" /> <a href="#authzalias">Creating Authorization Provider Aliases</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logic" id="logic">Authorization Containers</a></h2>
-
- <p>The authorization container directives
- <code class="directive"><a href="#requireall"><RequireAll></a></code>,
- <code class="directive"><a href="#requireany"><RequireAny></a></code>
- and
- <code class="directive"><a href="#requirenone"><RequireNone></a></code>
- may be combined with each other and with the
- <code class="directive"><a href="#require">Require</a></code>
- directive to express complex authorization logic.</p>
-
- <p>The example below expresses the following authorization logic.
- In order to access the resource, the user must either be the
- <code>superadmin</code> user, or belong to both the
- <code>admins</code> group and the <code>Administrators</code> LDAP
- group and either belong to the <code>sales</code> group or
- have the LDAP <code>dept</code> attribute <code>sales</code>.
- Furthermore, in order to access the resource, the user must
- not belong to either the <code>temps</code> group or the
- LDAP group <code>Temporary Employees</code>.</p>
-
- <pre class="prettyprint lang-config"><Directory "/www/mydocs">
- <RequireAll>
- <RequireAny>
- Require user superadmin
- <RequireAll>
- Require group admins
- Require ldap-group "cn=Administrators,o=Airius"
- <RequireAny>
- Require group sales
- Require ldap-attribute dept="sales"
- </RequireAny>
- </RequireAll>
- </RequireAny>
- <RequireNone>
- Require group temps
- Require ldap-group "cn=Temporary Employees,o=Airius"
- </RequireNone>
- </RequireAll>
-</Directory></pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
-
- <p><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> provides some generic authorization
- providers which can be used with the
- <code class="directive"><a href="#require">Require</a></code> directive.</p>
-
- <h3><a name="reqenv" id="reqenv">Require env</a></h3>
-
- <p>The <code>env</code> provider allows access to the server
- to be controlled based on the existence of an <a href="../env.html">environment variable</a>. When <code>Require
- env <var>env-variable</var></code> is specified, then the request is
- allowed access if the environment variable <var>env-variable</var>
- exists. The server provides the ability to set environment
- variables in a flexible way based on characteristics of the client
- request using the directives provided by
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>. Therefore, this directive can be
- used to allow access based on such factors as the clients
- <code>User-Agent</code> (browser type), <code>Referer</code>, or
- other HTTP request header fields.</p>
-
- <pre class="prettyprint lang-config">SetEnvIf User-Agent "^KnockKnock/2\.0" let_me_in
-<Directory "/docroot">
- Require env let_me_in
-</Directory></pre>
-
-
- <p>In this case, browsers with a user-agent string beginning
- with <code>KnockKnock/2.0</code> will be allowed access, and all
- others will be denied.</p>
-
- <p>When the server looks up a path via an internal
- <a class="glossarylink" href="../glossary.html#subrequest" title="see glossary">subrequest</a> such as looking
- for a <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
- or generating a directory listing with <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>,
- per-request environment variables are <em>not</em> inherited in the
- subrequest. Additionally,
- <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> directives
- are not separately evaluated in the subrequest due to the API phases
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> takes action in.</p>
-
-
-
- <h3><a name="reqall" id="reqall">Require all</a></h3>
-
- <p>The <code>all</code> provider mimics the functionality that
- was previously provided by the 'Allow from all' and 'Deny from all'
- directives. This provider can take one of two arguments which are
- 'granted' or 'denied'. The following examples will grant or deny
- access to all requests.</p>
-
- <pre class="prettyprint lang-config">Require all granted</pre>
-
-
- <pre class="prettyprint lang-config">Require all denied</pre>
-
-
-
-
- <h3><a name="reqmethod" id="reqmethod">Require method</a></h3>
-
- <p>The <code>method</code> provider allows using the HTTP method in
- authorization decisions. The GET and HEAD methods are treated as
- equivalent. The TRACE method is not available to this provider,
- use <code class="directive"><a href="../mod/core.html#traceenable">TraceEnable</a></code> instead.</p>
-
- <p>The following example will only allow GET, HEAD, POST, and OPTIONS
- requests:</p>
-
- <pre class="prettyprint lang-config">Require method GET POST OPTIONS</pre>
-
-
- <p>The following example will allow GET, HEAD, POST, and OPTIONS
- requests without authentication, and require a valid user for all other
- methods:</p>
-
- <pre class="prettyprint lang-config"><RequireAny>
- Require method GET POST OPTIONS
- Require valid-user
-</RequireAny></pre>
-
-
-
-
- <h3><a name="reqexpr" id="reqexpr">Require expr</a></h3>
-
- <p>The <code>expr</code> provider allows basing authorization
- decisions on arbitrary expressions.</p>
-
- <pre class="prettyprint lang-config">Require expr %{TIME_HOUR} -ge 9 && %{TIME_HOUR} -le 17</pre>
-
-
- <pre class="prettyprint lang-config"><RequireAll>
- Require expr "!(%{QUERY_STRING} =~ /secret/)"
- Require expr "%{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"
-</RequireAll></pre>
-
-
- <pre class="prettyprint lang-config">Require expr "!(%{QUERY_STRING} =~ /secret/) && %{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"</pre>
-
-
- <p>The syntax is described in the <a href="../expr.html">ap_expr</a>
- documentation.</p>
-
- <p>Normally, the expression is evaluated before authentication. However, if
- the expression returns false and references the variable
- <code>%{REMOTE_USER}</code>, authentication will be performed and
- the expression will be re-evaluated.</p>
-
-
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="authzalias" id="authzalias">Creating Authorization Provider Aliases</a></h2>
-
- <p>Extended authorization providers can be created within the configuration
- file and assigned an alias name. The alias providers can then be referenced
- through the <code class="directive"><a href="#require">Require</a></code> directive
- in the same way as a base authorization provider. Besides the ability to
- create and alias an extended provider, it also allows the same extended
- authorization provider to be referenced by multiple locations.
- </p>
-
- <h3><a name="example" id="example">Example</a></h3>
- <p>The example below creates two different ldap authorization provider
- aliases based on the ldap-group authorization provider. This example
- allows a single authorization location to check group membership within
- multiple ldap hosts:
- </p>
-
- <pre class="prettyprint lang-config"><AuthzProviderAlias ldap-group ldap-group-alias1 "cn=my-group,o=ctx">
- AuthLDAPBindDN "cn=youruser,o=ctx"
- AuthLDAPBindPassword yourpassword
- AuthLDAPURL "ldap://ldap.host/o=ctx"
-</AuthzProviderAlias>
-
-<AuthzProviderAlias ldap-group ldap-group-alias2 "cn=my-other-group,o=dev">
- AuthLDAPBindDN "cn=yourotheruser,o=dev"
- AuthLDAPBindPassword yourotherpassword
- AuthLDAPURL "ldap://other.ldap.host/o=dev?cn"
-</AuthzProviderAlias>
-
-Alias "/secure" "/webpages/secure"
-<Directory "/webpages/secure">
- Require all granted
-
- AuthBasicProvider file
-
- AuthType Basic
- AuthName LDAP_Protected_Place
-
- #implied OR operation
- Require ldap-group-alias1
- Require ldap-group-alias2
-</Directory></pre>
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthMerging" id="AuthMerging">AuthMerging</a> <a name="authmerging" id="authmerging">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls the manner in which each configuration section's
<li><a href="../howto/auth.html">Authentication, Authorization,
and Access Control</a></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logic" id="logic">Authorization Containers</a></h2>
+
+ <p>The authorization container directives
+ <code class="directive"><a href="#requireall"><RequireAll></a></code>,
+ <code class="directive"><a href="#requireany"><RequireAny></a></code>
+ and
+ <code class="directive"><a href="#requirenone"><RequireNone></a></code>
+ may be combined with each other and with the
+ <code class="directive"><a href="#require">Require</a></code>
+ directive to express complex authorization logic.</p>
+
+ <p>The example below expresses the following authorization logic.
+ In order to access the resource, the user must either be the
+ <code>superadmin</code> user, or belong to both the
+ <code>admins</code> group and the <code>Administrators</code> LDAP
+ group and either belong to the <code>sales</code> group or
+ have the LDAP <code>dept</code> attribute <code>sales</code>.
+ Furthermore, in order to access the resource, the user must
+ not belong to either the <code>temps</code> group or the
+ LDAP group <code>Temporary Employees</code>.</p>
+
+ <pre class="prettyprint lang-config"><Directory "/www/mydocs">
+ <RequireAll>
+ <RequireAny>
+ Require user superadmin
+ <RequireAll>
+ Require group admins
+ Require ldap-group "cn=Administrators,o=Airius"
+ <RequireAny>
+ Require group sales
+ Require ldap-attribute dept="sales"
+ </RequireAny>
+ </RequireAll>
+ </RequireAny>
+ <RequireNone>
+ Require group temps
+ Require ldap-group "cn=Temporary Employees,o=Airius"
+ </RequireNone>
+ </RequireAll>
+</Directory></pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
+
+ <p><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> provides some generic authorization
+ providers which can be used with the
+ <code class="directive"><a href="#require">Require</a></code> directive.</p>
+
+ <h3><a name="reqenv" id="reqenv">Require env</a></h3>
+
+ <p>The <code>env</code> provider allows access to the server
+ to be controlled based on the existence of an <a href="../env.html">environment variable</a>. When <code>Require
+ env <var>env-variable</var></code> is specified, then the request is
+ allowed access if the environment variable <var>env-variable</var>
+ exists. The server provides the ability to set environment
+ variables in a flexible way based on characteristics of the client
+ request using the directives provided by
+ <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>. Therefore, this directive can be
+ used to allow access based on such factors as the clients
+ <code>User-Agent</code> (browser type), <code>Referer</code>, or
+ other HTTP request header fields.</p>
+
+ <pre class="prettyprint lang-config">SetEnvIf User-Agent "^KnockKnock/2\.0" let_me_in
+<Directory "/docroot">
+ Require env let_me_in
+</Directory></pre>
+
+
+ <p>In this case, browsers with a user-agent string beginning
+ with <code>KnockKnock/2.0</code> will be allowed access, and all
+ others will be denied.</p>
+
+ <p>When the server looks up a path via an internal
+ <a class="glossarylink" href="../glossary.html#subrequest" title="see glossary">subrequest</a> such as looking
+ for a <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
+ or generating a directory listing with <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>,
+ per-request environment variables are <em>not</em> inherited in the
+ subrequest. Additionally,
+ <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> directives
+ are not separately evaluated in the subrequest due to the API phases
+ <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> takes action in.</p>
+
+
+
+ <h3><a name="reqall" id="reqall">Require all</a></h3>
+
+ <p>The <code>all</code> provider mimics the functionality that
+ was previously provided by the 'Allow from all' and 'Deny from all'
+ directives. This provider can take one of two arguments which are
+ 'granted' or 'denied'. The following examples will grant or deny
+ access to all requests.</p>
+
+ <pre class="prettyprint lang-config">Require all granted</pre>
+
+
+ <pre class="prettyprint lang-config">Require all denied</pre>
+
+
+
+
+ <h3><a name="reqmethod" id="reqmethod">Require method</a></h3>
+
+ <p>The <code>method</code> provider allows using the HTTP method in
+ authorization decisions. The GET and HEAD methods are treated as
+ equivalent. The TRACE method is not available to this provider,
+ use <code class="directive"><a href="../mod/core.html#traceenable">TraceEnable</a></code> instead.</p>
+
+ <p>The following example will only allow GET, HEAD, POST, and OPTIONS
+ requests:</p>
+
+ <pre class="prettyprint lang-config">Require method GET POST OPTIONS</pre>
+
+
+ <p>The following example will allow GET, HEAD, POST, and OPTIONS
+ requests without authentication, and require a valid user for all other
+ methods:</p>
+
+ <pre class="prettyprint lang-config"><RequireAny>
+ Require method GET POST OPTIONS
+ Require valid-user
+</RequireAny></pre>
+
+
+
+
+ <h3><a name="reqexpr" id="reqexpr">Require expr</a></h3>
+
+ <p>The <code>expr</code> provider allows basing authorization
+ decisions on arbitrary expressions.</p>
+
+ <pre class="prettyprint lang-config">Require expr %{TIME_HOUR} -ge 9 && %{TIME_HOUR} -le 17</pre>
+
+
+ <pre class="prettyprint lang-config"><RequireAll>
+ Require expr "!(%{QUERY_STRING} =~ /secret/)"
+ Require expr "%{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"
+</RequireAll></pre>
+
+
+ <pre class="prettyprint lang-config">Require expr "!(%{QUERY_STRING} =~ /secret/) && %{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"</pre>
+
+
+ <p>The syntax is described in the <a href="../expr.html">ap_expr</a>
+ documentation.</p>
+
+ <p>Normally, the expression is evaluated before authentication. However, if
+ the expression returns false and references the variable
+ <code>%{REMOTE_USER}</code>, authentication will be performed and
+ the expression will be re-evaluated.</p>
+
+
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="authzalias" id="authzalias">Creating Authorization Provider Aliases</a></h2>
+
+ <p>Extended authorization providers can be created within the configuration
+ file and assigned an alias name. The alias providers can then be referenced
+ through the <code class="directive"><a href="#require">Require</a></code> directive
+ in the same way as a base authorization provider. Besides the ability to
+ create and alias an extended provider, it also allows the same extended
+ authorization provider to be referenced by multiple locations.
+ </p>
+
+ <h3><a name="example" id="example">Example</a></h3>
+ <p>The example below creates two different ldap authorization provider
+ aliases based on the ldap-group authorization provider. This example
+ allows a single authorization location to check group membership within
+ multiple ldap hosts:
+ </p>
+
+ <pre class="prettyprint lang-config"><AuthzProviderAlias ldap-group ldap-group-alias1 "cn=my-group,o=ctx">
+ AuthLDAPBindDN "cn=youruser,o=ctx"
+ AuthLDAPBindPassword yourpassword
+ AuthLDAPURL "ldap://ldap.host/o=ctx"
+</AuthzProviderAlias>
+
+<AuthzProviderAlias ldap-group ldap-group-alias2 "cn=my-other-group,o=dev">
+ AuthLDAPBindDN "cn=yourotheruser,o=dev"
+ AuthLDAPBindPassword yourotherpassword
+ AuthLDAPURL "ldap://other.ldap.host/o=dev?cn"
+</AuthzProviderAlias>
+
+Alias "/secure" "/webpages/secure"
+<Directory "/webpages/secure">
+ Require all granted
+
+ AuthBasicProvider file
+
+ AuthType Basic
+ AuthName LDAP_Protected_Place
+
+ #implied OR operation
+ Require ldap-group-alias1
+ Require ldap-group-alias2
+</Directory></pre>
+
+
+
</div>
</div>
<div class="bottomlang">
d'autorisation</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logic" id="logic">Conteneurs d'autorisation</a></h2>
-
- <p>Les directives de conteneur d'autorisation <code class="directive"><a href="#requireall"><RequireAll></a></code>,
- <code class="directive"><a href="#requireany"><RequireAny></a></code> et <code class="directive"><a href="#requirenone"><RequireNone></a></code>
- peuvent être combinées entre elles et avec la directive <code class="directive"><a href="#require">Require</a></code> pour construire une
- logique d'autorisation complexe.</p>
-
- <p>L'exemple ci-dessous illustre la logique d'autorisation suivante.
- Pour pouvoir accéder à la ressource, l'utilisateur doit être
- l'utilisateur <code>superadmin</code>, ou appartenir aux deux
- groupes LDAP <code>admins</code> et <code>Administrateurs</code> et
- soit appartenir au groupe <code>ventes</code>, soit avoir
- <code>ventes</code> comme valeur de l'attribut LDAP
- <code>dept</code>. De plus, pour pouvoir accéder à la ressource,
- l'utilisateur ne doit appartenir ni au groupe <code>temps</code>, ni
- au groupe LDAP <code>Employés temporaires</code>.</p>
-
- <pre class="prettyprint lang-config"><Directory /www/mydocs>
- <RequireAll>
- <RequireAny>
- Require user superadmin
- <RequireAll>
- Require group admins
- Require ldap-group cn=Administrateurs,o=Airius
- <RequireAny>
- Require group ventes
- Require ldap-attribute dept="ventes"
- </RequireAny>
- </RequireAll>
- </RequireAny>
- <RequireNone>
- Require group temps
- Require ldap-group cn=Employés temporaires,o=Airius
- </RequireNone>
- </RequireAll>
-</Directory></pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">Les directives Require</a></h2>
-
- <p>Le module <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> met à disposition des
- fournisseurs d'autorisation génériques utilisables avec la directive
- <code class="directive"><a href="#require">Require</a></code>.</p>
-
- <h3><a name="reqenv" id="reqenv">Require env</a></h3>
-
- <p>Le fournisseur <code>env</code> permet de contrôler l'accès au
- serveur en fonction de l'existence d'une <a href="../env.html">variable d'environnement</a>. Lorsque <code>Require
- env <var>env-variable</var></code> est spécifié, la requête se voit
- autoriser l'accès si la variable d'environnement
- <var>env-variable</var> existe. Le serveur permet de définir
- facilement des variables d'environnement en fonction des
- caractéristiques de la requête du client via les directives fournies
- par le module <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>. Cette directive Require
- env permet donc de contrôler l'accès en fonction des
- valeurs des en-têtes de la requête HTTP tels que
- <code>User-Agent</code> (type de navigateur), <code>Referer</code>,
- entre autres.</p>
-
- <pre class="prettyprint lang-config">SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
-<Directory /docroot>
- Require env let_me_in
-</Directory></pre>
-
-
- <p>Avec cet exemple, les navigateurs dont la chaîne user-agent
- commence par <code>KnockKnock/2.0</code> se verront autoriser
- l'accès, alors que tous les autres seront rejetés.</p>
-
- <p>Lorsque le serveur cherche un chemin via une <a class="glossarylink" href="../glossary.html#subrequest" title="voir glossaire">sous-requête</a> interne (par exemple la
- recherche d'un <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>), ou lorsqu'il génère un
- listing du contenu d'un répertoire via le module
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>, la sous-requête n'hérite pas des
- variables d'environnement spécifiques à la requête. En outre, à cause
- des phases de l'API auxquelles <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> prend
- part, les directives <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> ne sont pas évaluées
- séparément dans la sous-requête.</p>
-
-
-
- <h3><a name="reqall" id="reqall">Require all</a></h3>
-
- <p>Le fournisseur <code>all</code> reproduit la fonctionnalité
- précédemment fournie par les directives 'Allow from all' et 'Deny
- from all'. Il accepte un argument dont les deux valeurs possibles
- sont : 'granted' ou 'denied'. Les exemples suivants autorisent ou
- interdisent l'accès à toutes les requêtes.</p>
-
- <pre class="prettyprint lang-config">Require all granted</pre>
-
-
- <pre class="prettyprint lang-config">Require all denied</pre>
-
-
-
-
- <h3><a name="reqmethod" id="reqmethod">Require method</a></h3>
-
- <p>Le fournisseur <code>method</code> permet d'utiliser la méthode
- HTTP dans le processus d'autorisation. Les méthodes GET et HEAD sont
- ici considérées comme équivalentes. La méthode TRACE n'est pas
- supportée par ce fournisseur ; utilisez à la place la directive
- <code class="directive"><a href="../mod/core.html#traceenable">TraceEnable</a></code>.</p>
-
- <p>Dans l'exemple suivant, seules les méthodes GET, HEAD, POST, et
- OPTIONS sont autorisées :</p>
-
- <pre class="prettyprint lang-config">Require method GET POST OPTIONS</pre>
-
-
- <p>Dans l'exemple suivant, les méthodes GET, HEAD, POST, et OPTIONS
- sont autorisées sans authentification, alors que toutes les autres
- méthodes nécessitent un utilisateur valide :</p>
-
- <pre class="prettyprint lang-config"><RequireAny>
- Require method GET POST OPTIONS
- Require valid-user
-</RequireAny></pre>
-
-
-
- <h3><a name="reqexpr" id="reqexpr">Require expr</a></h3>
-
- <p>Le fournisseur <code>expr</code> permet d'accorder l'autorisation
- d'accès en fonction d'expressions arbitraires.</p>
-
- <pre class="prettyprint lang-config">Require expr %{TIME_HOUR} -ge 9 && %{TIME_HOUR} -le 17</pre>
-
-
- <pre class="prettyprint lang-config"><RequireAll>
- Require expr "!(%{QUERY_STRING} =~ /secret/)"
- Require expr "%{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"
-</RequireAll></pre>
-
-
- <pre class="prettyprint lang-config">Require expr "!(%{QUERY_STRING} =~ /secret/) && %{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"</pre>
-
-
- <p>La syntaxe de l'expression est décrite dans la documentation de <a href="../expr.html">ap_expr</a>.</p>
-
- <p>Normalement, l'expression est évaluée avant l'authentification.
- Cependant, si l'expression renvoie false et se réfère à la variable
- <code>%{REMOTE_USER}</code>, le processus d'authentification sera
- engagé et l'expression réévaluée.</p>
-
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="authzalias" id="authzalias">Création des alias du fournisseur
-d'autorisation</a></h2>
-
- <p>Il est possible de créer des fournisseurs d'autorisation étendus
- dans le fichier de configuration et de leur assigner un nom d'alias.
- On peut ensuite utiliser ces fournisseurs aliasés dans une
- directive <code class="directive"><a href="#require">Require</a></code> de
- la même manière qu'on le ferait pour des fournisseurs d'autorisation
- de base. En plus de la possibilité de créer et d'aliaser un
- fournisseur étendu, le même fournisseur d'autorisation étendu peut
- être référencé par diverses localisations.
- </p>
-
- <h3><a name="example" id="example">Exemple</a></h3>
- <p>Dans l'exemple suivant, on crée deux alias de fournisseur
- d'autorisation ldap différents basés sur le fournisseur
- d'autorisation ldap-group. Il est ainsi possible pour un seul
- répertoire de vérifier l'appartenance à un groupe dans plusieurs
- serveurs ldap :
- </p>
-
- <pre class="prettyprint lang-config"><AuthzProviderAlias ldap-group ldap-group-alias1 cn=my-group,o=ctx>
- AuthLDAPBindDN cn=youruser,o=ctx
- AuthLDAPBindPassword yourpassword
- AuthLDAPURL ldap://ldap.host/o=ctx
-</AuthzProviderAlias>
-
-<AuthzProviderAlias ldap-group ldap-group-alias2 cn=my-other-group,o=dev>
- AuthLDAPBindDN cn=yourotheruser,o=dev
- AuthLDAPBindPassword yourotherpassword
- AuthLDAPURL ldap://other.ldap.host/o=dev?cn
-</AuthzProviderAlias>
-
-Alias /secure /webpages/secure
-<Directory /webpages/secure>
- Require all granted
-
- AuthBasicProvider file
-
- AuthType Basic
- AuthName LDAP_Protected_Place
-
- #Opération logique implicite : OU inclusif
- Require ldap-group-alias1
- Require ldap-group-alias2
-</Directory></pre>
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authmerging" id="authmerging">Directive</a> <a name="AuthMerging" id="AuthMerging">AuthMerging</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit la manière dont chaque logique d'autorisation des
<li><a href="../howto/auth.html">Authentification, autorisation et
contrôle d'accès</a></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logic" id="logic">Conteneurs d'autorisation</a></h2>
+
+ <p>Les directives de conteneur d'autorisation <code class="directive"><a href="#requireall"><RequireAll></a></code>,
+ <code class="directive"><a href="#requireany"><RequireAny></a></code> et <code class="directive"><a href="#requirenone"><RequireNone></a></code>
+ peuvent être combinées entre elles et avec la directive <code class="directive"><a href="#require">Require</a></code> pour construire une
+ logique d'autorisation complexe.</p>
+
+ <p>L'exemple ci-dessous illustre la logique d'autorisation suivante.
+ Pour pouvoir accéder à la ressource, l'utilisateur doit être
+ l'utilisateur <code>superadmin</code>, ou appartenir aux deux
+ groupes LDAP <code>admins</code> et <code>Administrateurs</code> et
+ soit appartenir au groupe <code>ventes</code>, soit avoir
+ <code>ventes</code> comme valeur de l'attribut LDAP
+ <code>dept</code>. De plus, pour pouvoir accéder à la ressource,
+ l'utilisateur ne doit appartenir ni au groupe <code>temps</code>, ni
+ au groupe LDAP <code>Employés temporaires</code>.</p>
+
+ <pre class="prettyprint lang-config"><Directory /www/mydocs>
+ <RequireAll>
+ <RequireAny>
+ Require user superadmin
+ <RequireAll>
+ Require group admins
+ Require ldap-group cn=Administrateurs,o=Airius
+ <RequireAny>
+ Require group ventes
+ Require ldap-attribute dept="ventes"
+ </RequireAny>
+ </RequireAll>
+ </RequireAny>
+ <RequireNone>
+ Require group temps
+ Require ldap-group cn=Employés temporaires,o=Airius
+ </RequireNone>
+ </RequireAll>
+</Directory></pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="requiredirectives" id="requiredirectives">Les directives Require</a></h2>
+
+ <p>Le module <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> met à disposition des
+ fournisseurs d'autorisation génériques utilisables avec la directive
+ <code class="directive"><a href="#require">Require</a></code>.</p>
+
+ <h3><a name="reqenv" id="reqenv">Require env</a></h3>
+
+ <p>Le fournisseur <code>env</code> permet de contrôler l'accès au
+ serveur en fonction de l'existence d'une <a href="../env.html">variable d'environnement</a>. Lorsque <code>Require
+ env <var>env-variable</var></code> est spécifié, la requête se voit
+ autoriser l'accès si la variable d'environnement
+ <var>env-variable</var> existe. Le serveur permet de définir
+ facilement des variables d'environnement en fonction des
+ caractéristiques de la requête du client via les directives fournies
+ par le module <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>. Cette directive Require
+ env permet donc de contrôler l'accès en fonction des
+ valeurs des en-têtes de la requête HTTP tels que
+ <code>User-Agent</code> (type de navigateur), <code>Referer</code>,
+ entre autres.</p>
+
+ <pre class="prettyprint lang-config">SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
+<Directory /docroot>
+ Require env let_me_in
+</Directory></pre>
+
+
+ <p>Avec cet exemple, les navigateurs dont la chaîne user-agent
+ commence par <code>KnockKnock/2.0</code> se verront autoriser
+ l'accès, alors que tous les autres seront rejetés.</p>
+
+ <p>Lorsque le serveur cherche un chemin via une <a class="glossarylink" href="../glossary.html#subrequest" title="voir glossaire">sous-requête</a> interne (par exemple la
+ recherche d'un <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>), ou lorsqu'il génère un
+ listing du contenu d'un répertoire via le module
+ <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>, la sous-requête n'hérite pas des
+ variables d'environnement spécifiques à la requête. En outre, à cause
+ des phases de l'API auxquelles <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> prend
+ part, les directives <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> ne sont pas évaluées
+ séparément dans la sous-requête.</p>
+
+
+
+ <h3><a name="reqall" id="reqall">Require all</a></h3>
+
+ <p>Le fournisseur <code>all</code> reproduit la fonctionnalité
+ précédemment fournie par les directives 'Allow from all' et 'Deny
+ from all'. Il accepte un argument dont les deux valeurs possibles
+ sont : 'granted' ou 'denied'. Les exemples suivants autorisent ou
+ interdisent l'accès à toutes les requêtes.</p>
+
+ <pre class="prettyprint lang-config">Require all granted</pre>
+
+
+ <pre class="prettyprint lang-config">Require all denied</pre>
+
+
+
+
+ <h3><a name="reqmethod" id="reqmethod">Require method</a></h3>
+
+ <p>Le fournisseur <code>method</code> permet d'utiliser la méthode
+ HTTP dans le processus d'autorisation. Les méthodes GET et HEAD sont
+ ici considérées comme équivalentes. La méthode TRACE n'est pas
+ supportée par ce fournisseur ; utilisez à la place la directive
+ <code class="directive"><a href="../mod/core.html#traceenable">TraceEnable</a></code>.</p>
+
+ <p>Dans l'exemple suivant, seules les méthodes GET, HEAD, POST, et
+ OPTIONS sont autorisées :</p>
+
+ <pre class="prettyprint lang-config">Require method GET POST OPTIONS</pre>
+
+
+ <p>Dans l'exemple suivant, les méthodes GET, HEAD, POST, et OPTIONS
+ sont autorisées sans authentification, alors que toutes les autres
+ méthodes nécessitent un utilisateur valide :</p>
+
+ <pre class="prettyprint lang-config"><RequireAny>
+ Require method GET POST OPTIONS
+ Require valid-user
+</RequireAny></pre>
+
+
+
+ <h3><a name="reqexpr" id="reqexpr">Require expr</a></h3>
+
+ <p>Le fournisseur <code>expr</code> permet d'accorder l'autorisation
+ d'accès en fonction d'expressions arbitraires.</p>
+
+ <pre class="prettyprint lang-config">Require expr %{TIME_HOUR} -ge 9 && %{TIME_HOUR} -le 17</pre>
+
+
+ <pre class="prettyprint lang-config"><RequireAll>
+ Require expr "!(%{QUERY_STRING} =~ /secret/)"
+ Require expr "%{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"
+</RequireAll></pre>
+
+
+ <pre class="prettyprint lang-config">Require expr "!(%{QUERY_STRING} =~ /secret/) && %{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"</pre>
+
+
+ <p>La syntaxe de l'expression est décrite dans la documentation de <a href="../expr.html">ap_expr</a>.</p>
+
+ <p>Normalement, l'expression est évaluée avant l'authentification.
+ Cependant, si l'expression renvoie false et se réfère à la variable
+ <code>%{REMOTE_USER}</code>, le processus d'authentification sera
+ engagé et l'expression réévaluée.</p>
+
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="authzalias" id="authzalias">Création des alias du fournisseur
+d'autorisation</a></h2>
+
+ <p>Il est possible de créer des fournisseurs d'autorisation étendus
+ dans le fichier de configuration et de leur assigner un nom d'alias.
+ On peut ensuite utiliser ces fournisseurs aliasés dans une
+ directive <code class="directive"><a href="#require">Require</a></code> de
+ la même manière qu'on le ferait pour des fournisseurs d'autorisation
+ de base. En plus de la possibilité de créer et d'aliaser un
+ fournisseur étendu, le même fournisseur d'autorisation étendu peut
+ être référencé par diverses localisations.
+ </p>
+
+ <h3><a name="example" id="example">Exemple</a></h3>
+ <p>Dans l'exemple suivant, on crée deux alias de fournisseur
+ d'autorisation ldap différents basés sur le fournisseur
+ d'autorisation ldap-group. Il est ainsi possible pour un seul
+ répertoire de vérifier l'appartenance à un groupe dans plusieurs
+ serveurs ldap :
+ </p>
+
+ <pre class="prettyprint lang-config"><AuthzProviderAlias ldap-group ldap-group-alias1 cn=my-group,o=ctx>
+ AuthLDAPBindDN cn=youruser,o=ctx
+ AuthLDAPBindPassword yourpassword
+ AuthLDAPURL ldap://ldap.host/o=ctx
+</AuthzProviderAlias>
+
+<AuthzProviderAlias ldap-group ldap-group-alias2 cn=my-other-group,o=dev>
+ AuthLDAPBindDN cn=yourotheruser,o=dev
+ AuthLDAPBindPassword yourotherpassword
+ AuthLDAPURL ldap://other.ldap.host/o=dev?cn
+</AuthzProviderAlias>
+
+Alias /secure /webpages/secure
+<Directory /webpages/secure>
+ Require all granted
+
+ AuthBasicProvider file
+
+ AuthType Basic
+ AuthName LDAP_Protected_Place
+
+ #Opération logique implicite : OU inclusif
+ Require ldap-group-alias1
+ Require ldap-group-alias2
+</Directory></pre>
+
+
+
</div>
</div>
<div class="bottomlang">
<li><code class="directive"><a href="../mod/mod_dbd.html#dbdparams">DBDParams</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthzDBDLoginToReferer" id="AuthzDBDLoginToReferer">AuthzDBDLoginToReferer</a> <a name="authzdbdlogintoreferer" id="authzdbdlogintoreferer">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines whether to redirect the Client to the Referring
+page on successful login or logout if a <code>Referer</code> request
+header is present</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBDLoginToReferer On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzDBDLoginToReferer Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
+</table>
+ <p>In conjunction with <code>Require dbd-login</code> or
+ <code>Require dbd-logout</code>, this provides the option to
+ redirect the client back to the Referring page (the URL in
+ the <code>Referer</code> HTTP request header, if present).
+ When there is no <code>Referer</code> header,
+ <code>AuthzDBDLoginToReferer On</code> will be ignored.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthzDBDQuery" id="AuthzDBDQuery">AuthzDBDQuery</a> <a name="authzdbdquery" id="authzdbdquery">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify the SQL Query for the required operation</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBDQuery <var>query</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
+</table>
+ <p>The <code class="directive">AuthzDBDQuery</code> specifies an SQL
+ query to run. The purpose of the query depends on the
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive in
+ effect.</p>
+ <ul>
+ <li>When used with a <code>Require dbd-group</code> directive,
+ it specifies a query to look up groups for the current user. This is
+ the standard functionality of other authorization modules such as
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> and <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>.
+ The first column value of each row returned by the query statement
+ should be a string containing a group name. Zero, one, or more rows
+ may be returned.
+ <pre class="prettyprint lang-config">Require dbd-group
+AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"</pre>
+
+ </li>
+ <li>When used with a <code>Require dbd-login</code> or
+ <code>Require dbd-logout</code> directive, it will never deny access,
+ but will instead execute a SQL statement designed to log the user
+ in or out. The user must already be authenticated with
+ <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.
+ <pre class="prettyprint lang-config">Require dbd-login
+AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
+
+ </li>
+ </ul>
+ <p>In all cases, the user's ID will be passed as a single string
+ parameter when the SQL query is executed. It may be referenced within
+ the query statement using a <code>%s</code> format specifier.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthzDBDRedirectQuery" id="AuthzDBDRedirectQuery">AuthzDBDRedirectQuery</a> <a name="authzdbdredirectquery" id="authzdbdredirectquery">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify a query to look up a login page for the user</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBDRedirectQuery <var>query</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
+</table>
+ <p>Specifies an optional SQL query to use after successful login
+ (or logout) to redirect the user to a URL, which may be
+ specific to the user. The user's ID will be passed as a single string
+ parameter when the SQL query is executed. It may be referenced within
+ the query statement using a <code>%s</code> format specifier.</p>
+ <pre class="prettyprint lang-config">AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"</pre>
+
+ <p>The first column value of the first row returned by the query
+ statement should be a string containing a URL to which to redirect
+ the client. Subsequent rows will be ignored. If no rows are returned,
+ the client will not be redirected.</p>
+ <p>Note that <code class="directive">AuthzDBDLoginToReferer</code> takes
+ precedence if both are set.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
<p>Please read <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> documentation for more information
about security on this scope.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDBDLoginToReferer" id="AuthzDBDLoginToReferer">AuthzDBDLoginToReferer</a> <a name="authzdbdlogintoreferer" id="authzdbdlogintoreferer">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines whether to redirect the Client to the Referring
-page on successful login or logout if a <code>Referer</code> request
-header is present</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBDLoginToReferer On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzDBDLoginToReferer Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
-</table>
- <p>In conjunction with <code>Require dbd-login</code> or
- <code>Require dbd-logout</code>, this provides the option to
- redirect the client back to the Referring page (the URL in
- the <code>Referer</code> HTTP request header, if present).
- When there is no <code>Referer</code> header,
- <code>AuthzDBDLoginToReferer On</code> will be ignored.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDBDQuery" id="AuthzDBDQuery">AuthzDBDQuery</a> <a name="authzdbdquery" id="authzdbdquery">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify the SQL Query for the required operation</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBDQuery <var>query</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
-</table>
- <p>The <code class="directive">AuthzDBDQuery</code> specifies an SQL
- query to run. The purpose of the query depends on the
- <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive in
- effect.</p>
- <ul>
- <li>When used with a <code>Require dbd-group</code> directive,
- it specifies a query to look up groups for the current user. This is
- the standard functionality of other authorization modules such as
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> and <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>.
- The first column value of each row returned by the query statement
- should be a string containing a group name. Zero, one, or more rows
- may be returned.
- <pre class="prettyprint lang-config">Require dbd-group
-AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"</pre>
-
- </li>
- <li>When used with a <code>Require dbd-login</code> or
- <code>Require dbd-logout</code> directive, it will never deny access,
- but will instead execute a SQL statement designed to log the user
- in or out. The user must already be authenticated with
- <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.
- <pre class="prettyprint lang-config">Require dbd-login
-AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
-
- </li>
- </ul>
- <p>In all cases, the user's ID will be passed as a single string
- parameter when the SQL query is executed. It may be referenced within
- the query statement using a <code>%s</code> format specifier.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDBDRedirectQuery" id="AuthzDBDRedirectQuery">AuthzDBDRedirectQuery</a> <a name="authzdbdredirectquery" id="authzdbdredirectquery">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify a query to look up a login page for the user</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBDRedirectQuery <var>query</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
-</table>
- <p>Specifies an optional SQL query to use after successful login
- (or logout) to redirect the user to a URL, which may be
- specific to the user. The user's ID will be passed as a single string
- parameter when the SQL query is executed. It may be referenced within
- the query statement using a <code>%s</code> format specifier.</p>
- <pre class="prettyprint lang-config">AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"</pre>
-
- <p>The first column value of the first row returned by the query
- statement should be a string containing a URL to which to redirect
- the client. Subsequent rows will be ignored. If no rows are returned,
- the client will not be redirected.</p>
- <p>Note that <code class="directive">AuthzDBDLoginToReferer</code> takes
- precedence if both are set.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_authz_dbd.html" title="English"> en </a> |
<li><code class="directive"><a href="../mod/mod_dbd.html#dbdparams">DBDParams</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authzdbdlogintoreferer" id="authzdbdlogintoreferer">Directive</a> <a name="AuthzDBDLoginToReferer" id="AuthzDBDLoginToReferer">AuthzDBDLoginToReferer</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit si le client doit être redirigé vers la page
+d'origine en cas de connexion ou de déconnexion réussie si une en-tête
+de requête <code>Referer</code> est présente</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthzDBDLoginToReferer On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthzDBDLoginToReferer Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
+</table>
+ <p>Utilisée en conjonction avec <code>Require dbd-login</code> ou
+ <code>Require dbd-logout</code>, cette directive permet de rediriger
+ le client vers la page d'origine (l'URL contenue dans l'en-tête
+ de requête HTTP <code>Referer</code>, s'il est présent). En
+ l'absence d'en-tête <code>Referer</code>, la définition
+ <code>AuthzDBDLoginToReferer On</code> sera ignorée.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authzdbdquery" id="authzdbdquery">Directive</a> <a name="AuthzDBDQuery" id="AuthzDBDQuery">AuthzDBDQuery</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit la requête SQL pour l'opération
+requise</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthzDBDQuery <var>requête</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
+</table>
+ <p>La directive <code class="directive">AuthzDBDQuery</code> permet de
+ spécifier une requête SQL à exécuter. Le but de cette requête dépend
+ de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> en cours de
+ traitement.</p>
+ <ul>
+ <li>Avec la directive <code>Require dbd-group</code>, elle spécifie
+ une requête permettant de rechercher les groupes d'appartenance de
+ l'utilisateur courant. Ceci correspond à la fonctionnalité standard
+ d'autres modules d'autorisation comme
+ <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> et
+ <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>.
+ La première colonne de chaque enregistrement renvoyé par la requête
+ doit contenir une chaîne de caractères correspondant à un nom de
+ groupe. La requête peut renvoyer zéro, un ou plusieurs
+ enregistrements.
+ <pre class="prettyprint lang-config">Require dbd-group
+AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"</pre>
+
+ </li>
+ <li>Avec la directive <code>Require dbd-login</code> ou
+ <code>Require dbd-logout</code>, elle ne refusera jamais l'accès,
+ mais au contraire exécutera une requête SQL permettant d'enregistrer
+ la connexion ou la déconnexion de l'utilisateur. Ce dernier doit
+ être déjà authentifié avec <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.
+ <pre class="prettyprint lang-config">Require dbd-login
+AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
+
+ </li>
+ </ul>
+ <p>Dans tous les cas, l'identifiant utilisateur sera transmis comme
+ paramètre sous la forme d'une simple chaîne lorsque la requête SQL
+ sera exécutée. Il y sera fait référence dans la requête en utilisant
+ le spécificateur de format <code>%s</code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="authzdbdredirectquery" id="authzdbdredirectquery">Directive</a> <a name="AuthzDBDRedirectQuery" id="AuthzDBDRedirectQuery">AuthzDBDRedirectQuery</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une requête pour rechercher une page vers laquelle
+rediriger l'utilisateur après une connexion réussie</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthzDBDRedirectQuery <var>requête</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
+</table>
+ <p>Spécifie une requête SQL optionnelle à utiliser après une
+ connexion (ou une déconnexion) réussie pour rediriger l'utilisateur
+ vers une URL, qui peut être spécifique à l'utilisateur.
+ L'identifiant utilisateur sera transmis comme paramètre sous la
+ forme d'une simple chaîne lorsque la requête SQL sera exécutée. Il y
+ sera fait référence dans la requête en utilisant le spécificateur de
+ format <code>%s</code>.</p>
+ <pre class="prettyprint lang-config">AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"</pre>
+
+ <p>La première colonne du premier enregistrement renvoyé par la
+ requête doit contenir une chaîne de caractères correspondant à une
+ URL vers laquelle rediriger le client. Les enregistrements suivants
+ sont ignorés. Si aucun enregistrement n'est renvoyé, le client ne
+ sera pas redirigé.</p>
+ <p>Notez que <code class="directive">AuthzDBDLoginToReferer</code> l'emporte
+ sur cette directive si les deux sont définies.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="requiredirectives" id="requiredirectives">Les directives Require</a></h2>
<code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> pour plus d'informations à propos de la
sécurité dans ce domaine.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authzdbdlogintoreferer" id="authzdbdlogintoreferer">Directive</a> <a name="AuthzDBDLoginToReferer" id="AuthzDBDLoginToReferer">AuthzDBDLoginToReferer</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit si le client doit être redirigé vers la page
-d'origine en cas de connexion ou de déconnexion réussie si une en-tête
-de requête <code>Referer</code> est présente</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthzDBDLoginToReferer On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>AuthzDBDLoginToReferer Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
-</table>
- <p>Utilisée en conjonction avec <code>Require dbd-login</code> ou
- <code>Require dbd-logout</code>, cette directive permet de rediriger
- le client vers la page d'origine (l'URL contenue dans l'en-tête
- de requête HTTP <code>Referer</code>, s'il est présent). En
- l'absence d'en-tête <code>Referer</code>, la définition
- <code>AuthzDBDLoginToReferer On</code> sera ignorée.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authzdbdquery" id="authzdbdquery">Directive</a> <a name="AuthzDBDQuery" id="AuthzDBDQuery">AuthzDBDQuery</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit la requête SQL pour l'opération
-requise</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthzDBDQuery <var>requête</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
-</table>
- <p>La directive <code class="directive">AuthzDBDQuery</code> permet de
- spécifier une requête SQL à exécuter. Le but de cette requête dépend
- de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> en cours de
- traitement.</p>
- <ul>
- <li>Avec la directive <code>Require dbd-group</code>, elle spécifie
- une requête permettant de rechercher les groupes d'appartenance de
- l'utilisateur courant. Ceci correspond à la fonctionnalité standard
- d'autres modules d'autorisation comme
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> et
- <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>.
- La première colonne de chaque enregistrement renvoyé par la requête
- doit contenir une chaîne de caractères correspondant à un nom de
- groupe. La requête peut renvoyer zéro, un ou plusieurs
- enregistrements.
- <pre class="prettyprint lang-config">Require dbd-group
-AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"</pre>
-
- </li>
- <li>Avec la directive <code>Require dbd-login</code> ou
- <code>Require dbd-logout</code>, elle ne refusera jamais l'accès,
- mais au contraire exécutera une requête SQL permettant d'enregistrer
- la connexion ou la déconnexion de l'utilisateur. Ce dernier doit
- être déjà authentifié avec <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.
- <pre class="prettyprint lang-config">Require dbd-login
-AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
-
- </li>
- </ul>
- <p>Dans tous les cas, l'identifiant utilisateur sera transmis comme
- paramètre sous la forme d'une simple chaîne lorsque la requête SQL
- sera exécutée. Il y sera fait référence dans la requête en utilisant
- le spécificateur de format <code>%s</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="authzdbdredirectquery" id="authzdbdredirectquery">Directive</a> <a name="AuthzDBDRedirectQuery" id="AuthzDBDRedirectQuery">AuthzDBDRedirectQuery</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une requête pour rechercher une page vers laquelle
-rediriger l'utilisateur après une connexion réussie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AuthzDBDRedirectQuery <var>requête</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbd</td></tr>
-</table>
- <p>Spécifie une requête SQL optionnelle à utiliser après une
- connexion (ou une déconnexion) réussie pour rediriger l'utilisateur
- vers une URL, qui peut être spécifique à l'utilisateur.
- L'identifiant utilisateur sera transmis comme paramètre sous la
- forme d'une simple chaîne lorsque la requête SQL sera exécutée. Il y
- sera fait référence dans la requête en utilisant le spécificateur de
- format <code>%s</code>.</p>
- <pre class="prettyprint lang-config">AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"</pre>
-
- <p>La première colonne du premier enregistrement renvoyé par la
- requête doit contenir une chaîne de caractères correspondant à une
- URL vers laquelle rediriger le client. Les enregistrements suivants
- sont ignorés. Si aucun enregistrement n'est renvoyé, le client ne
- sera pas redirigé.</p>
- <p>Notez que <code class="directive">AuthzDBDLoginToReferer</code> l'emporte
- sur cette directive si les deux sont définies.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_authz_dbd.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
-
- <p>Apache's <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
- directives are used during the authorization phase to ensure that
- a user is allowed to access a resource. mod_authz_dbm extends the
- authorization types with <code>dbm-group</code>.</p>
-
- <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
- within the DBM require directives.</p>
-
-<h3><a name="reqgroup" id="reqgroup">Require dbm-group</a></h3>
-
- <p>This directive specifies group membership that is required for the
- user to gain access.</p>
-
- <pre class="prettyprint lang-config">Require dbm-group admin</pre>
-
-
-
-
-<h3><a name="reqfilegroup" id="reqfilegroup">Require dbm-file-group</a></h3>
-
- <p>When this directive is specified, the user must be a member of the group
- assigned to the file being accessed.</p>
-
- <pre class="prettyprint lang-config">Require dbm-file-group</pre>
-
-
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Example usage</a></h2>
-
-<p><em>Note that using mod_authz_dbm requires you to require <code>dbm-group</code>
-instead of <code>group</code>:</em>
-</p>
-<pre class="prettyprint lang-config"><Directory "/foo/bar">
- AuthType Basic
- AuthName "Secure Area"
- AuthBasicProvider dbm
- AuthDBMUserFile "site/data/users"
- AuthDBMGroupFile "site/data/users"
- Require dbm-group admin
-</Directory></pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDBMGroupFile" id="AuthDBMGroupFile">AuthDBMGroupFile</a> <a name="authdbmgroupfile" id="authdbmgroupfile">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of the database file containing the list
<p>It is crucial that whatever program you use to create your group
files is configured to use the same type of database.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
+
+ <p>Apache's <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ directives are used during the authorization phase to ensure that
+ a user is allowed to access a resource. mod_authz_dbm extends the
+ authorization types with <code>dbm-group</code>.</p>
+
+ <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
+ within the DBM require directives.</p>
+
+<h3><a name="reqgroup" id="reqgroup">Require dbm-group</a></h3>
+
+ <p>This directive specifies group membership that is required for the
+ user to gain access.</p>
+
+ <pre class="prettyprint lang-config">Require dbm-group admin</pre>
+
+
+
+
+<h3><a name="reqfilegroup" id="reqfilegroup">Require dbm-file-group</a></h3>
+
+ <p>When this directive is specified, the user must be a member of the group
+ assigned to the file being accessed.</p>
+
+ <pre class="prettyprint lang-config">Require dbm-file-group</pre>
+
+
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Example usage</a></h2>
+
+<p><em>Note that using mod_authz_dbm requires you to require <code>dbm-group</code>
+instead of <code>group</code>:</em>
+</p>
+<pre class="prettyprint lang-config"><Directory "/foo/bar">
+ AuthType Basic
+ AuthName "Secure Area"
+ AuthBasicProvider dbm
+ AuthDBMUserFile "site/data/users"
+ AuthDBMGroupFile "site/data/users"
+ Require dbm-group admin
+</Directory></pre>
+
</div>
</div>
<div class="bottomlang">
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
-
- <p>Les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> d'Apache permettent,
- au cours de la phase d'autorisation, de s'assurer qu'un utilisateur
- est bien autorisé à accéder à une ressource. mod_authz_dbm ajoute
- les types d'autorisation <code>dbm-group</code> et <code>dbm-file-group</code>.</p>
-
- <p>A partir de la version 2.4.8, les directives require DBM
- supportent les <a href="../expr.html">expressions</a>.</p>
-
-<h3><a name="reqgroup" id="reqgroup">Require dbm-group</a></h3>
-
- <p>Cette directive permet de spécifier à quel groupe un utilisateur
- doit appartenir pour obtenir l'autorisation d'accès.</p>
-
- <pre class="prettyprint lang-config">Require dbm-group admin</pre>
-
-
-
-
-<h3><a name="reqfilegroup" id="reqfilegroup">Require dbm-file-group</a></h3>
-
- <p>Lorsque cette directive est définie, l'utilisateur doit
- appartenir au groupe du fichier pour pouvoir y accéder.</p>
-
- <pre class="prettyprint lang-config">Require dbm-file-group</pre>
-
-
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Exemple d'utilisation</a></h2>
-
-<p><em>Notez que si vous utilisez mod_authz_dbm, le mot-clé pour les
-groupes d'authentification qui était auparavant <code>group</code> est
-maintenant <code>dbm-group</code> :</em>
-</p>
-<pre class="prettyprint lang-config"><Directory "/foo/bar">
- AuthType Basic
- AuthName "Secure Area"
- AuthBasicProvider dbm
- AuthDBMUserFile site/data/users
- AuthDBMGroupFile site/data/users
- Require dbm-group admin
-</Directory></pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authdbmgroupfile" id="authdbmgroupfile">Directive</a> <a name="AuthDBMGroupFile" id="AuthDBMGroupFile">AuthDBMGroupFile</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom du fichier de base de données qui liste
fichier de groupes, il est impératif que celui-ci soit configuré
pour utiliser le même type de base de données.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
+
+ <p>Les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> d'Apache permettent,
+ au cours de la phase d'autorisation, de s'assurer qu'un utilisateur
+ est bien autorisé à accéder à une ressource. mod_authz_dbm ajoute
+ les types d'autorisation <code>dbm-group</code> et <code>dbm-file-group</code>.</p>
+
+ <p>A partir de la version 2.4.8, les directives require DBM
+ supportent les <a href="../expr.html">expressions</a>.</p>
+
+<h3><a name="reqgroup" id="reqgroup">Require dbm-group</a></h3>
+
+ <p>Cette directive permet de spécifier à quel groupe un utilisateur
+ doit appartenir pour obtenir l'autorisation d'accès.</p>
+
+ <pre class="prettyprint lang-config">Require dbm-group admin</pre>
+
+
+
+
+<h3><a name="reqfilegroup" id="reqfilegroup">Require dbm-file-group</a></h3>
+
+ <p>Lorsque cette directive est définie, l'utilisateur doit
+ appartenir au groupe du fichier pour pouvoir y accéder.</p>
+
+ <pre class="prettyprint lang-config">Require dbm-file-group</pre>
+
+
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Exemple d'utilisation</a></h2>
+
+<p><em>Notez que si vous utilisez mod_authz_dbm, le mot-clé pour les
+groupes d'authentification qui était auparavant <code>group</code> est
+maintenant <code>dbm-group</code> :</em>
+</p>
+<pre class="prettyprint lang-config"><Directory "/foo/bar">
+ AuthType Basic
+ AuthName "Secure Area"
+ AuthBasicProvider dbm
+ AuthDBMUserFile site/data/users
+ AuthDBMGroupFile site/data/users
+ Require dbm-group admin
+</Directory></pre>
+
</div>
</div>
<div class="bottomlang">
<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDBMGroupFile" id="AuthDBMGroupFile">AuthDBMGroupFile</a> <a name="authdbmgroupfile" id="authdbmgroupfile">Áö½Ã¾î</a></h2>
<table class="directive">
»ç¿ëÇϵµ·Ï ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_dbm.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
-
- <p>Apache's <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
- directives are used during the authorization phase to ensure that
- a user is allowed to access a resource. mod_authz_groupfile extends the
- authorization types with <code>group</code> and <code>group-file</code>.
- </p>
-
- <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
- within the groupfile require directives.</p>
-
-<h3><a name="reqgroup" id="reqgroup">Require group</a></h3>
-
- <p>This directive specifies group membership that is required for the
- user to gain access.</p>
-
- <pre class="prettyprint lang-config">Require group admin</pre>
-
-
-
-
-<h3><a name="reqfilegroup" id="reqfilegroup">Require file-group</a></h3>
-
- <p>When this directive is specified, the user must be a member of the group
- assigned to the file being accessed.</p>
-
- <pre class="prettyprint lang-config">Require file-group</pre>
-
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthGroupFile" id="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile" id="authgroupfile">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of a text file containing the list
be able to download the <code class="directive">AuthGroupFile</code>.</p>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
+
+ <p>Apache's <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ directives are used during the authorization phase to ensure that
+ a user is allowed to access a resource. mod_authz_groupfile extends the
+ authorization types with <code>group</code> and <code>group-file</code>.
+ </p>
+
+ <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
+ within the groupfile require directives.</p>
+
+<h3><a name="reqgroup" id="reqgroup">Require group</a></h3>
+
+ <p>This directive specifies group membership that is required for the
+ user to gain access.</p>
+
+ <pre class="prettyprint lang-config">Require group admin</pre>
+
+
+
+
+<h3><a name="reqfilegroup" id="reqfilegroup">Require file-group</a></h3>
+
+ <p>When this directive is specified, the user must be a member of the group
+ assigned to the file being accessed.</p>
+
+ <pre class="prettyprint lang-config">Require file-group</pre>
+
+
+
+
</div>
</div>
<div class="bottomlang">
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
-
- <p>Les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> d'Apache permettent,
- au cours de la phase d'autorisation, de s'assurer qu'un utilisateur
- est bien autorisé à accéder à une ressource. mod_authz_groupfile ajoute
- les types d'autorisation <code>group</code> et <code>file-group</code>.
- </p>
-
- <p>A partir de la version 2.4.8, les directives require groupfile
- supportent les <a href="../expr.html">expressions</a>.</p>
-
-<h3><a name="reqgroup" id="reqgroup">Require group</a></h3>
-
- <p>Cette directive permet de spécifier à quel groupe un utilisateur
- doit appartenir pour obtenir l'autorisation d'accès.</p>
-
- <pre class="prettyprint lang-config">Require group admin</pre>
-
-
-
-
-<h3><a name="reqfilegroup" id="reqfilegroup">Require file-group</a></h3>
-
- <p>Lorsque cette directive est définie, l'utilisateur doit
- appartenir au groupe du fichier pour pouvoir y accéder.</p>
-
- <pre class="prettyprint lang-config">Require file-group</pre>
-
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="authgroupfile" id="authgroupfile">Directive</a> <a name="AuthGroupFile" id="AuthGroupFile">AuthGroupFile</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom d'un fichier texte contenant la liste des
clients pourraient le télécharger.</p>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="requiredirectives" id="requiredirectives">The Require Directives</a></h2>
+
+ <p>Les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> d'Apache permettent,
+ au cours de la phase d'autorisation, de s'assurer qu'un utilisateur
+ est bien autorisé à accéder à une ressource. mod_authz_groupfile ajoute
+ les types d'autorisation <code>group</code> et <code>file-group</code>.
+ </p>
+
+ <p>A partir de la version 2.4.8, les directives require groupfile
+ supportent les <a href="../expr.html">expressions</a>.</p>
+
+<h3><a name="reqgroup" id="reqgroup">Require group</a></h3>
+
+ <p>Cette directive permet de spécifier à quel groupe un utilisateur
+ doit appartenir pour obtenir l'autorisation d'accès.</p>
+
+ <pre class="prettyprint lang-config">Require group admin</pre>
+
+
+
+
+<h3><a name="reqfilegroup" id="reqfilegroup">Require file-group</a></h3>
+
+ <p>Lorsque cette directive est définie, l'utilisateur doit
+ appartenir au groupe du fichier pour pouvoir y accéder.</p>
+
+ <pre class="prettyprint lang-config">Require file-group</pre>
+
+
+
+
</div>
</div>
<div class="bottomlang">
<ul class="seealso">
<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthGroupFile" id="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile" id="authgroupfile">ディレクティブ</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_authz_groupfile.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthGroupFile" id="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile" id="authgroupfile">Áö½Ã¾î</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_groupfile.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#query">Autoindex Request Query Arguments</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Autoindex Request Query Arguments</a></h2>
-
-
- <p>Various query string arguments are available to give the client
- some control over the ordering of the directory listing, as well as
- what files are listed. If you do not wish to give the client this
- control, the <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> option disables that functionality.</p>
-
- <p>The column sorting headers themselves are self-referencing
- hyperlinks that add the sort query options shown below. Any
- option below may be added to any request for the directory
- resource.</p>
-
- <ul>
- <li><code>C=N</code> sorts the directory by file name</li>
-
- <li><code>C=M</code> sorts the directory by last-modified
- date, then file name</li>
-
- <li><code>C=S</code> sorts the directory by size, then file
- name</li>
-
- <li class="separate"><code>C=D</code> sorts the directory by description, then
- file name</li>
-
- <li><code>O=A</code> sorts the listing in Ascending
- Order</li>
-
- <li class="separate"><code>O=D</code> sorts the listing in Descending
- Order</li>
-
- <li><code>F=0</code> formats the listing as a simple list
- (not FancyIndexed)</li>
-
- <li><code>F=1</code> formats the listing as a FancyIndexed
- list</li>
-
- <li class="separate"><code>F=2</code> formats the listing as an
- HTMLTable FancyIndexed list</li>
-
- <li><code>V=0</code> disables version sorting</li>
-
- <li class="separate"><code>V=1</code> enables version sorting</li>
-
- <li><code>P=<var>pattern</var></code> lists only files matching
- the given <var>pattern</var></li>
- </ul>
-
- <p>Note that the 'P'attern query argument is tested
- <em>after</em> the usual <code class="directive"><a href="#indexignore">IndexIgnore</a></code> directives are processed,
- and all file names are still subjected to the same criteria as
- any other autoindex listing. The Query Arguments parser in
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> will stop abruptly when an unrecognized
- option is encountered. The Query Arguments must be well formed,
- according to the table above.</p>
-
- <p>The simple example below, which can be clipped and saved in
- a header.html file, illustrates these query options. Note that
- the unknown "X" argument, for the submit button, is listed last
- to assure the arguments are all parsed before mod_autoindex
- encounters the X=Go input.</p>
-
- <div class="example"><p><code>
- <form action="" method="get"><br />
- <span class="indent">
- Show me a <select name="F"><br />
- <span class="indent">
- <option value="0"> Plain list</option><br />
- <option value="1" selected="selected"> Fancy list</option><br />
- <option value="2"> Table list</option><br />
- </span>
- </select><br />
- Sorted by <select name="C"><br />
- <span class="indent">
- <option value="N" selected="selected"> Name</option><br />
- <option value="M"> Date Modified</option><br />
- <option value="S"> Size</option><br />
- <option value="D"> Description</option><br />
- </span>
- </select><br />
- <select name="O"><br />
- <span class="indent">
- <option value="A" selected="selected"> Ascending</option><br />
- <option value="D"> Descending</option><br />
- </span>
- </select><br />
- <select name="V"><br />
- <span class="indent">
- <option value="0" selected="selected"> in Normal order</option><br />
- <option value="1"> in Version order</option><br />
- </span>
- </select><br />
- Matching <input type="text" name="P" value="*" /><br />
- <input type="submit" name="X" value="Go" /><br />
- </span>
- </form>
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate text to display for a file, instead of an
<p>See also <code class="directive"><a href="#headername">HeaderName</a></code>, where this behavior is described in greater
detail.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="query" id="query">Autoindex Request Query Arguments</a></h2>
+
+
+ <p>Various query string arguments are available to give the client
+ some control over the ordering of the directory listing, as well as
+ what files are listed. If you do not wish to give the client this
+ control, the <code><a href="#indexoptions.ignoreclient">IndexOptions
+ IgnoreClient</a></code> option disables that functionality.</p>
+
+ <p>The column sorting headers themselves are self-referencing
+ hyperlinks that add the sort query options shown below. Any
+ option below may be added to any request for the directory
+ resource.</p>
+
+ <ul>
+ <li><code>C=N</code> sorts the directory by file name</li>
+
+ <li><code>C=M</code> sorts the directory by last-modified
+ date, then file name</li>
+
+ <li><code>C=S</code> sorts the directory by size, then file
+ name</li>
+
+ <li class="separate"><code>C=D</code> sorts the directory by description, then
+ file name</li>
+
+ <li><code>O=A</code> sorts the listing in Ascending
+ Order</li>
+
+ <li class="separate"><code>O=D</code> sorts the listing in Descending
+ Order</li>
+
+ <li><code>F=0</code> formats the listing as a simple list
+ (not FancyIndexed)</li>
+
+ <li><code>F=1</code> formats the listing as a FancyIndexed
+ list</li>
+
+ <li class="separate"><code>F=2</code> formats the listing as an
+ HTMLTable FancyIndexed list</li>
+
+ <li><code>V=0</code> disables version sorting</li>
+
+ <li class="separate"><code>V=1</code> enables version sorting</li>
+
+ <li><code>P=<var>pattern</var></code> lists only files matching
+ the given <var>pattern</var></li>
+ </ul>
+
+ <p>Note that the 'P'attern query argument is tested
+ <em>after</em> the usual <code class="directive"><a href="#indexignore">IndexIgnore</a></code> directives are processed,
+ and all file names are still subjected to the same criteria as
+ any other autoindex listing. The Query Arguments parser in
+ <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> will stop abruptly when an unrecognized
+ option is encountered. The Query Arguments must be well formed,
+ according to the table above.</p>
+
+ <p>The simple example below, which can be clipped and saved in
+ a header.html file, illustrates these query options. Note that
+ the unknown "X" argument, for the submit button, is listed last
+ to assure the arguments are all parsed before mod_autoindex
+ encounters the X=Go input.</p>
+
+ <div class="example"><p><code>
+ <form action="" method="get"><br />
+ <span class="indent">
+ Show me a <select name="F"><br />
+ <span class="indent">
+ <option value="0"> Plain list</option><br />
+ <option value="1" selected="selected"> Fancy list</option><br />
+ <option value="2"> Table list</option><br />
+ </span>
+ </select><br />
+ Sorted by <select name="C"><br />
+ <span class="indent">
+ <option value="N" selected="selected"> Name</option><br />
+ <option value="M"> Date Modified</option><br />
+ <option value="S"> Size</option><br />
+ <option value="D"> Description</option><br />
+ </span>
+ </select><br />
+ <select name="O"><br />
+ <span class="indent">
+ <option value="A" selected="selected"> Ascending</option><br />
+ <option value="D"> Descending</option><br />
+ </span>
+ </select><br />
+ <select name="V"><br />
+ <span class="indent">
+ <option value="0" selected="selected"> in Normal order</option><br />
+ <option value="1"> in Version order</option><br />
+ </span>
+ </select><br />
+ Matching <input type="text" name="P" value="*" /><br />
+ <input type="submit" name="X" value="Go" /><br />
+ </span>
+ </form>
+ </code></p></div>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#query">Arguments de la requête d'autoindexation</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Arguments de la requête d'autoindexation</a></h2>
-
-
- <p>La chaîne de paramètres de la requête peut contenir de nombreux
- arguments permettant dans une certaine mesure au client de contrôler
- l'ordre de l'index du répertoire, ainsi que la liste des fichiers à
- afficher. Si vous souhaitez désactiver cette fonctionnalité,
- utilisez l'option <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code>.</p>
-
- <p>Les en-têtes de tri des colonnes eux-mêmes sont des hyper-liens
- auto-référant qui ajoutent les options de tri à la requête énumérées
- ci-dessous qui peuvent être ajoutées à toute requête concernant la
- ressource répertoire.</p>
-
- <ul>
- <li><code>C=N</code> trie l'affichage en fonction du nom de
- fichier</li>
-
- <li><code>C=M</code> trie l'affichage en fonction de la date de
- dernière modification, puis du nom de fichier</li>
-
- <li><code>C=S</code> trie l'affichage en fonction de la taille,
- puis du nom de fichier</li>
-
- <li class="separate"><code>C=D</code> trie l'affichage en fonction
- de la description, puis du nom de fichier</li>
-
- <li><code>O=A</code> trie l'affichage selon l'ordre croissant</li>
-
- <li class="separate"><code>O=D</code> trie l'affichage selon
- l'ordre décroissant</li>
-
- <li><code>F=0</code> affiche le listing sous la forme d'une simple
- liste (sans FancyIndex)</li>
-
- <li><code>F=1</code> affiche le listing avec en-têtes de colonnes
- sous forme de liens hyper-textes (FancyIndexed)</li>
-
- <li class="separate"><code>F=2</code> affiche le listing sous
- forme de table HTML avec en-têtes de colonnes contenant des liens
- hyper-textes (FancyIndexed)</li>
-
- <li><code>V=0</code> désactive le tri en fonction de la
- version</li>
-
- <li class="separate"><code>V=1</code> active le tri en fonction de
- la version</li>
-
- <li><code>P=<var>modèle</var></code> n'affiche que les fichiers
- correspondant au <var>modèle</var> spécifié</li>
- </ul>
-
- <p>Notez que l'argument 'P' (pour Pattern) n'est testé
- qu'<em>après</em> que les directives habituelles <code class="directive"><a href="#indexignore">IndexIgnore</a></code> ont été traitées,
- et que tous les noms de fichiers sont encore assujettis aux mêmes
- critères que pour tout autre listing auto-indexé. L'interpréteur
- d'arguments de requête de <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> s'arrête
- immédiatement s'il rencontre une option non reconnue. Les arguments
- de requête doivent être bien formés, selon la table ci-dessus.</p>
-
- <p>Les options de requêtes sont illustrées par l'exemple ci-dessous,
- qui peut être copié et collé dans un fichier header.html. Notez que
- l'argument inconnu "X", pour le bouton submit, est introduit en
- dernier afin de s'assurer que tous les arguments ont été
- interprétés avant que mod_autoindex ne rencontre l'entrée X=Go.</p>
-
- <div class="example"><p><code>
- <form action="" method="get"><br />
- <span class="indent">
- Montre moi une <select name="F"><br />
- <span class="indent">
- <option value="0"> liste simple</option><br />
- <option value="1" selected="selected"> liste avec
- en-têtes</option><br />
- <option value="2"> liste avec en-tête sous forme de
- table</option><br />
- </span>
- </select><br />
- triée par <select name="C"><br />
- <span class="indent">
- <option value="N" selected="selected"> nom</option><br />
- <option value="M"> date de modification</option><br />
- <option value="S"> taille</option><br />
- <option value="D"> description</option><br />
- </span>
- </select><br />
- <select name="O"><br />
- <span class="indent">
- <option value="A" selected="selected"> croissant</option><br />
- <option value="D"> décroissant</option><br />
- </span>
- </select><br />
- <select name="V"><br />
- <span class="indent">
- <option value="0" selected="selected"> dans l'ordre
- normal</option><br />
- <option value="1"> en fonction de la version</option><br />
- </span>
- </select><br />
- correspondant à <input type="text" name="P" value="*" /><br />
- <input type="submit" name="X" value="Go" /><br />
- </span>
- </form>
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="addalt" id="addalt">Directive</a> <a name="AddAlt" id="AddAlt">AddAlt</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Texte optionnel à afficher à la place d'un icône pour un
<p>Voir aussi la directive <code class="directive"><a href="#headername">HeaderName</a></code>, où cette fonctionnalité est décrite plus en
détails.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="query" id="query">Arguments de la requête d'autoindexation</a></h2>
+
+
+ <p>La chaîne de paramètres de la requête peut contenir de nombreux
+ arguments permettant dans une certaine mesure au client de contrôler
+ l'ordre de l'index du répertoire, ainsi que la liste des fichiers à
+ afficher. Si vous souhaitez désactiver cette fonctionnalité,
+ utilisez l'option <code><a href="#indexoptions.ignoreclient">IndexOptions
+ IgnoreClient</a></code>.</p>
+
+ <p>Les en-têtes de tri des colonnes eux-mêmes sont des hyper-liens
+ auto-référant qui ajoutent les options de tri à la requête énumérées
+ ci-dessous qui peuvent être ajoutées à toute requête concernant la
+ ressource répertoire.</p>
+
+ <ul>
+ <li><code>C=N</code> trie l'affichage en fonction du nom de
+ fichier</li>
+
+ <li><code>C=M</code> trie l'affichage en fonction de la date de
+ dernière modification, puis du nom de fichier</li>
+
+ <li><code>C=S</code> trie l'affichage en fonction de la taille,
+ puis du nom de fichier</li>
+
+ <li class="separate"><code>C=D</code> trie l'affichage en fonction
+ de la description, puis du nom de fichier</li>
+
+ <li><code>O=A</code> trie l'affichage selon l'ordre croissant</li>
+
+ <li class="separate"><code>O=D</code> trie l'affichage selon
+ l'ordre décroissant</li>
+
+ <li><code>F=0</code> affiche le listing sous la forme d'une simple
+ liste (sans FancyIndex)</li>
+
+ <li><code>F=1</code> affiche le listing avec en-têtes de colonnes
+ sous forme de liens hyper-textes (FancyIndexed)</li>
+
+ <li class="separate"><code>F=2</code> affiche le listing sous
+ forme de table HTML avec en-têtes de colonnes contenant des liens
+ hyper-textes (FancyIndexed)</li>
+
+ <li><code>V=0</code> désactive le tri en fonction de la
+ version</li>
+
+ <li class="separate"><code>V=1</code> active le tri en fonction de
+ la version</li>
+
+ <li><code>P=<var>modèle</var></code> n'affiche que les fichiers
+ correspondant au <var>modèle</var> spécifié</li>
+ </ul>
+
+ <p>Notez que l'argument 'P' (pour Pattern) n'est testé
+ qu'<em>après</em> que les directives habituelles <code class="directive"><a href="#indexignore">IndexIgnore</a></code> ont été traitées,
+ et que tous les noms de fichiers sont encore assujettis aux mêmes
+ critères que pour tout autre listing auto-indexé. L'interpréteur
+ d'arguments de requête de <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> s'arrête
+ immédiatement s'il rencontre une option non reconnue. Les arguments
+ de requête doivent être bien formés, selon la table ci-dessus.</p>
+
+ <p>Les options de requêtes sont illustrées par l'exemple ci-dessous,
+ qui peut être copié et collé dans un fichier header.html. Notez que
+ l'argument inconnu "X", pour le bouton submit, est introduit en
+ dernier afin de s'assurer que tous les arguments ont été
+ interprétés avant que mod_autoindex ne rencontre l'entrée X=Go.</p>
+
+ <div class="example"><p><code>
+ <form action="" method="get"><br />
+ <span class="indent">
+ Montre moi une <select name="F"><br />
+ <span class="indent">
+ <option value="0"> liste simple</option><br />
+ <option value="1" selected="selected"> liste avec
+ en-têtes</option><br />
+ <option value="2"> liste avec en-tête sous forme de
+ table</option><br />
+ </span>
+ </select><br />
+ triée par <select name="C"><br />
+ <span class="indent">
+ <option value="N" selected="selected"> nom</option><br />
+ <option value="M"> date de modification</option><br />
+ <option value="S"> taille</option><br />
+ <option value="D"> description</option><br />
+ </span>
+ </select><br />
+ <select name="O"><br />
+ <span class="indent">
+ <option value="A" selected="selected"> croissant</option><br />
+ <option value="D"> décroissant</option><br />
+ </span>
+ </select><br />
+ <select name="V"><br />
+ <span class="indent">
+ <option value="0" selected="selected"> dans l'ordre
+ normal</option><br />
+ <option value="1"> en fonction de la version</option><br />
+ </span>
+ </select><br />
+ correspondant à <input type="text" name="P" value="*" /><br />
+ <input type="submit" name="X" value="Go" /><br />
+ </span>
+ </form>
+ </code></p></div>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#query">Autoindex リクエストクエリー引数</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Autoindex リクエストクエリー引数</a></h2>
-
-
- <p>Apache 2.0.23 で、
- コラムソートのためにクエリー引数を再編成して、
- 新しいクエリーオプションのグループを導入しました。
- 出力に対するクライアントのすべての制御を効率的に抹消
- できるように、
- <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> が導入されました。</p>
-
- <p>コラムソートのヘッダそれ自体が、
- 下記のソートクエリーオプションを付加する
- 自分自身を参照するリンクです。
- 下記のオプションのどれでも、
- ディレクトリリソースへのリクエストに加えることができます。</p>
-
- <ul>
- <li><code>C=N</code> は、ファイル名でソートします。</li>
-
- <li><code>C=M</code> は、更新日時、
- ディレクトリ、ファイル名の順でソートします。</li>
-
- <li><code>C=S</code> は、サイズ、
- ディレクトリ、ファイル名の順でソートします。</li>
-
- <li class="separate"><code>C=D</code> は、説明、
- ディレクトリ、ファイル名の順でソートします。</li>
-
- <li><code>O=A</code> は、昇順で表をソートします。</li>
-
- <li class="separate"><code>O=D</code> は、降順で表をソートします。</li>
-
- <li><code>F=0</code> は、単純な表の書式にします。
- (FancyIndex ではありません。)</li>
-
- <li><code>F=1</code> は、FancyIndex
- 表示の表の書式にします。</li>
-
- <li><code>F=2</code> は、表を HTML
- のテーブルを使った FancyIndex の書式にします。</li>
-
- <li><code>V=0</code>
- は、バージョンによるソートを無効にします。</li>
-
- <li class="separate"><code>V=1</code>
- は、バージョンによるソートを有効にします。</li>
-
- <li><code>P=<var>pattern</var></code>
- は、与えられた <var>pattern</var>
- に適合したファイルのみを表示します。</li>
- </ul>
-
- <p>"P (パターンの P)" クエリー引数は、
- 通常の <code class="directive"><a href="#indexignore">IndexIgnore</a></code>
- ディレクティブが処理された<em>後</em>に検査され、
- ファイル名全てが、他の autoindex
- リスト処理と同様の判定基準下に置かれ続ける
- ことに注意してください。
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> のクエリー引数パーサ (解析) は、
- 認識不能なオプションにぶつかると即座に停止します。
- クエリー引数は上の表に従って
- 正しい形式になっていなければなりません。</p>
-
- <p>下の単純な例は、これらのクエリーオプションを
- 表します。これをそのまま切り取って HEADER.html
- ファイルに保存することもできます。
- mod_autoindex が X=Go 入力にぶつかる前に
- 引数が全て解釈されるように、
- 未知の引数 "X" はリストの最後に置かれています。</p>
-
- <div class="example"><p><code>
- <form action="" method="get"><br />
- <span class="indent">
- Show me a <select name="F"><br />
- <span class="indent">
- <option value="0"> Plain list</option><br />
- <option value="1" selected="selected"> Fancy list</option><br />
- <option value="2"> Table list</option><br />
- </span>
- </select><br />
- Sorted by <select name="C"><br />
- <span class="indent">
- <option value="N" selected="selected"> Name</option><br />
- <option value="M"> Date Modified</option><br />
- <option value="S"> Size</option><br />
- <option value="D"> Description</option><br />
- </span>
- </select><br />
- <select name="O"><br />
- <span class="indent">
- <option value="A" selected="selected"> Ascending</option><br />
- <option value="D"> Descending</option><br />
- </span>
- </select><br />
- <select name="V"><br />
- <span class="indent">
- <option value="0" selected="selected"> in Normal order</option><br />
- <option value="1"> in Version order</option><br />
- </span>
- </select><br />
- Matching <input type="text" name="P" value="*" /><br />
- <input type="submit" name="X" value="Go" /><br />
- </span>
- </form>
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>アイコンの代わりに
<p>より詳細にまでこの挙動について記述している <code class="directive"><a href="#headername">HeaderName</a></code>
もご覧下さい。</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="query" id="query">Autoindex リクエストクエリー引数</a></h2>
+
+
+ <p>Apache 2.0.23 で、
+ コラムソートのためにクエリー引数を再編成して、
+ 新しいクエリーオプションのグループを導入しました。
+ 出力に対するクライアントのすべての制御を効率的に抹消
+ できるように、
+ <code><a href="#indexoptions.ignoreclient">IndexOptions
+ IgnoreClient</a></code> が導入されました。</p>
+
+ <p>コラムソートのヘッダそれ自体が、
+ 下記のソートクエリーオプションを付加する
+ 自分自身を参照するリンクです。
+ 下記のオプションのどれでも、
+ ディレクトリリソースへのリクエストに加えることができます。</p>
+
+ <ul>
+ <li><code>C=N</code> は、ファイル名でソートします。</li>
+
+ <li><code>C=M</code> は、更新日時、
+ ディレクトリ、ファイル名の順でソートします。</li>
+
+ <li><code>C=S</code> は、サイズ、
+ ディレクトリ、ファイル名の順でソートします。</li>
+
+ <li class="separate"><code>C=D</code> は、説明、
+ ディレクトリ、ファイル名の順でソートします。</li>
+
+ <li><code>O=A</code> は、昇順で表をソートします。</li>
+
+ <li class="separate"><code>O=D</code> は、降順で表をソートします。</li>
+
+ <li><code>F=0</code> は、単純な表の書式にします。
+ (FancyIndex ではありません。)</li>
+
+ <li><code>F=1</code> は、FancyIndex
+ 表示の表の書式にします。</li>
+
+ <li><code>F=2</code> は、表を HTML
+ のテーブルを使った FancyIndex の書式にします。</li>
+
+ <li><code>V=0</code>
+ は、バージョンによるソートを無効にします。</li>
+
+ <li class="separate"><code>V=1</code>
+ は、バージョンによるソートを有効にします。</li>
+
+ <li><code>P=<var>pattern</var></code>
+ は、与えられた <var>pattern</var>
+ に適合したファイルのみを表示します。</li>
+ </ul>
+
+ <p>"P (パターンの P)" クエリー引数は、
+ 通常の <code class="directive"><a href="#indexignore">IndexIgnore</a></code>
+ ディレクティブが処理された<em>後</em>に検査され、
+ ファイル名全てが、他の autoindex
+ リスト処理と同様の判定基準下に置かれ続ける
+ ことに注意してください。
+ <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> のクエリー引数パーサ (解析) は、
+ 認識不能なオプションにぶつかると即座に停止します。
+ クエリー引数は上の表に従って
+ 正しい形式になっていなければなりません。</p>
+
+ <p>下の単純な例は、これらのクエリーオプションを
+ 表します。これをそのまま切り取って HEADER.html
+ ファイルに保存することもできます。
+ mod_autoindex が X=Go 入力にぶつかる前に
+ 引数が全て解釈されるように、
+ 未知の引数 "X" はリストの最後に置かれています。</p>
+
+ <div class="example"><p><code>
+ <form action="" method="get"><br />
+ <span class="indent">
+ Show me a <select name="F"><br />
+ <span class="indent">
+ <option value="0"> Plain list</option><br />
+ <option value="1" selected="selected"> Fancy list</option><br />
+ <option value="2"> Table list</option><br />
+ </span>
+ </select><br />
+ Sorted by <select name="C"><br />
+ <span class="indent">
+ <option value="N" selected="selected"> Name</option><br />
+ <option value="M"> Date Modified</option><br />
+ <option value="S"> Size</option><br />
+ <option value="D"> Description</option><br />
+ </span>
+ </select><br />
+ <select name="O"><br />
+ <span class="indent">
+ <option value="A" selected="selected"> Ascending</option><br />
+ <option value="D"> Descending</option><br />
+ </span>
+ </select><br />
+ <select name="V"><br />
+ <span class="indent">
+ <option value="0" selected="selected"> in Normal order</option><br />
+ <option value="1"> in Version order</option><br />
+ </span>
+ </select><br />
+ Matching <input type="text" name="P" value="*" /><br />
+ <input type="submit" name="X" value="Go" /><br />
+ </span>
+ </form>
+ </code></p></div>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#query">Autoindex ¿äû ¾Æ±Ô¸ÕÆ®</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Autoindex ¿äû ¾Æ±Ô¸ÕÆ®</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ 2.0.23´Â ¿¼ø¼¿¡ ´ëÇÑ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ Á¤¸®ÇÏ°í,
- »õ·Î¿î ¿É¼ÇµéÀ» Ãß°¡Çß´Ù. Ãâ·ÂÀ» Ŭ¶óÀ̾ðÆ®°¡ Á¶ÀýÇÒ ¼ö
- ¾øµµ·Ï ¸¸µå´Â <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> ¿É¼ÇÀÌ Ãß°¡µÇ¾ú´Ù.</p>
-
- <p>¿¼ø¼ À̸§Àº ¾Æ·¡ ³ª¿Â ¼ø¼ ¿äû ¿É¼ÇÀ» ´õÇÑ ÀÚ±âÂüÁ¶
- ¸µÅ©´Ù. ¾Æ·¡ ¿É¼ÇÀº µð·ºÅ丮 ÀÚ¿ø¿¡ ´ëÇÑ ¾î¶² ¿äû¿¡µµ
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <ul>
- <li><code>C=N</code>Àº ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li><code>C=M</code>Àº ÃÖ±Ù ¼öÁ¤ÀÏ ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li><code>C=S</code>´Â Å©±â ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li class="separate"><code>C=D</code>´Â ¼³¸í ¼ø, ±×¸®°í ÆÄÀϸí
- ¼øÀÌ´Ù</li>
-
- <li><code>O=A</code>´Â ¿À¸§Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
-
- <li class="separate"><code>O=D</code>´Â ³»¸²Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
-
- <li><code>F=0</code>Àº (FancyIndexed°¡ ¾Æ´Ñ) °£´ÜÇÑ ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
-
- <li><code>F=1</code>Àº FancyIndexed ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
-
- <li class="separate"><code>F=2</code>´Â HTMLTable FancyIndexed ¸ñ·Ï
- Çü½ÄÀÌ´Ù</li>
-
- <li><code>V=0</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÏÁö ¾Ê´Â´Ù</li>
-
- <li class="separate"><code>V=1</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÑ´Ù</li>
-
- <li><code>P=<var>pattern</var></code>Àº ÁÖ¾îÁø <var>pattern</var>¿¡
- ÇØ´çÇÏ´Â ÆÄÀϸ¸À» ¸ñ·ÏÀ¸·Î ¸¸µç´Ù</li>
- </ul>
-
- <p>'P'attern ¾Æ±Ô¸ÕÆ®´Â ÀϹÝÀûÀÎ <code class="directive"><a href="#indexignore">IndexIgnore</a></code> Áö½Ã¾î¸¦ ó¸®ÇÑ <em>ÈÄ¿¡</em>
- °Ë»çÇϱ⶧¹®¿¡, ¸ñ·ÏÀº ´Ù¸¥ autoindex Á¶°ÇÀ» µû¸§À» ÁÖÀÇÇ϶ó.
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>ÀÇ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀ϶§
- ¾Ë ¼ö ¾ø´Â ¿É¼ÇÀ» ¹ß°ßÇÏ¸é ´õ ÀÌ»ó ÀÐÁö¾Ê´Â´Ù. ¿äû ¾Æ±Ô¸ÕÆ®´Â
- À§ÀÇ Ç¥¿¡ µû¶ó ¸¸µé¾î¾ß ÇÑ´Ù.</p>
-
- <p>header.html ÆÄÀÏ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾Æ·¡ °£´ÜÇÑ ¿¹Á¦´Â
- ÀÌ ¿É¼ÇµéÀ» ¼³¸íÇÑ´Ù. submit ¹öÅÏÀÇ ¾Ë ¼ö ¾ø´Â "X" ¾Æ±Ô¸ÕÆ®´Â
- mod_autoindex°¡ X=Go Àü±îÁö ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀÓÀ»
- È®ÀÎÇϱâÀ§ÇØ ¸¶Áö¸·¿¡ »ç¿ëÇß´Ù.</p>
-
- <div class="example"><p><code>
- <form action="" method="get"><br />
- <span class="indent">
- Show me a <select name="F"><br />
- <span class="indent">
- <option value="0"> Plain list</option><br />
- <option value="1" selected="selected"> Fancy list</option><br />
- <option value="2"> Table list</option><br />
- </span>
- </select><br />
- Sorted by <select name="C"><br />
- <span class="indent">
- <option value="N" selected="selected"> Name</option><br />
- <option value="M"> Date Modified</option><br />
- <option value="S"> Size</option><br />
- <option value="D"> Description</option><br />
- </span>
- </select><br />
- <select name="O"><br />
- <span class="indent">
- <option value="A" selected="selected"> Ascending</option><br />
- <option value="D"> Descending</option><br />
- </span>
- </select><br />
- <select name="V"><br />
- <span class="indent">
- <option value="0" selected="selected"> in Normal order</option><br />
- <option value="1"> in Version order</option><br />
- </span>
- </select><br />
- Matching <input type="text" name="P" value="*" /><br />
- <input type="submit" name="X" value="Go" /><br />
- </span>
- </form>
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀϸíÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ ¼³¸í±Û</td></tr>
<p>ÀÌ µ¿ÀÛÀ» ÀÚ¼¼È÷ ¼³¸íÇÑ <code class="directive"><a href="#headername">HeaderName</a></code>µµ Âü°íÇ϶ó.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="query" id="query">Autoindex ¿äû ¾Æ±Ô¸ÕÆ®</a></h2>
+
+
+ <p>¾ÆÆÄÄ¡ 2.0.23´Â ¿¼ø¼¿¡ ´ëÇÑ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ Á¤¸®ÇÏ°í,
+ »õ·Î¿î ¿É¼ÇµéÀ» Ãß°¡Çß´Ù. Ãâ·ÂÀ» Ŭ¶óÀ̾ðÆ®°¡ Á¶ÀýÇÒ ¼ö
+ ¾øµµ·Ï ¸¸µå´Â <code><a href="#indexoptions.ignoreclient">IndexOptions
+ IgnoreClient</a></code> ¿É¼ÇÀÌ Ãß°¡µÇ¾ú´Ù.</p>
+
+ <p>¿¼ø¼ À̸§Àº ¾Æ·¡ ³ª¿Â ¼ø¼ ¿äû ¿É¼ÇÀ» ´õÇÑ ÀÚ±âÂüÁ¶
+ ¸µÅ©´Ù. ¾Æ·¡ ¿É¼ÇÀº µð·ºÅ丮 ÀÚ¿ø¿¡ ´ëÇÑ ¾î¶² ¿äû¿¡µµ
+ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
+
+ <ul>
+ <li><code>C=N</code>Àº ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
+
+ <li><code>C=M</code>Àº ÃÖ±Ù ¼öÁ¤ÀÏ ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
+
+ <li><code>C=S</code>´Â Å©±â ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
+
+ <li class="separate"><code>C=D</code>´Â ¼³¸í ¼ø, ±×¸®°í ÆÄÀϸí
+ ¼øÀÌ´Ù</li>
+
+ <li><code>O=A</code>´Â ¿À¸§Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
+
+ <li class="separate"><code>O=D</code>´Â ³»¸²Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
+
+ <li><code>F=0</code>Àº (FancyIndexed°¡ ¾Æ´Ñ) °£´ÜÇÑ ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
+
+ <li><code>F=1</code>Àº FancyIndexed ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
+
+ <li class="separate"><code>F=2</code>´Â HTMLTable FancyIndexed ¸ñ·Ï
+ Çü½ÄÀÌ´Ù</li>
+
+ <li><code>V=0</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÏÁö ¾Ê´Â´Ù</li>
+
+ <li class="separate"><code>V=1</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÑ´Ù</li>
+
+ <li><code>P=<var>pattern</var></code>Àº ÁÖ¾îÁø <var>pattern</var>¿¡
+ ÇØ´çÇÏ´Â ÆÄÀϸ¸À» ¸ñ·ÏÀ¸·Î ¸¸µç´Ù</li>
+ </ul>
+
+ <p>'P'attern ¾Æ±Ô¸ÕÆ®´Â ÀϹÝÀûÀÎ <code class="directive"><a href="#indexignore">IndexIgnore</a></code> Áö½Ã¾î¸¦ ó¸®ÇÑ <em>ÈÄ¿¡</em>
+ °Ë»çÇϱ⶧¹®¿¡, ¸ñ·ÏÀº ´Ù¸¥ autoindex Á¶°ÇÀ» µû¸§À» ÁÖÀÇÇ϶ó.
+ <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>ÀÇ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀ϶§
+ ¾Ë ¼ö ¾ø´Â ¿É¼ÇÀ» ¹ß°ßÇÏ¸é ´õ ÀÌ»ó ÀÐÁö¾Ê´Â´Ù. ¿äû ¾Æ±Ô¸ÕÆ®´Â
+ À§ÀÇ Ç¥¿¡ µû¶ó ¸¸µé¾î¾ß ÇÑ´Ù.</p>
+
+ <p>header.html ÆÄÀÏ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾Æ·¡ °£´ÜÇÑ ¿¹Á¦´Â
+ ÀÌ ¿É¼ÇµéÀ» ¼³¸íÇÑ´Ù. submit ¹öÅÏÀÇ ¾Ë ¼ö ¾ø´Â "X" ¾Æ±Ô¸ÕÆ®´Â
+ mod_autoindex°¡ X=Go Àü±îÁö ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀÓÀ»
+ È®ÀÎÇϱâÀ§ÇØ ¸¶Áö¸·¿¡ »ç¿ëÇß´Ù.</p>
+
+ <div class="example"><p><code>
+ <form action="" method="get"><br />
+ <span class="indent">
+ Show me a <select name="F"><br />
+ <span class="indent">
+ <option value="0"> Plain list</option><br />
+ <option value="1" selected="selected"> Fancy list</option><br />
+ <option value="2"> Table list</option><br />
+ </span>
+ </select><br />
+ Sorted by <select name="C"><br />
+ <span class="indent">
+ <option value="N" selected="selected"> Name</option><br />
+ <option value="M"> Date Modified</option><br />
+ <option value="S"> Size</option><br />
+ <option value="D"> Description</option><br />
+ </span>
+ </select><br />
+ <select name="O"><br />
+ <span class="indent">
+ <option value="A" selected="selected"> Ascending</option><br />
+ <option value="D"> Descending</option><br />
+ </span>
+ </select><br />
+ <select name="V"><br />
+ <span class="indent">
+ <option value="0" selected="selected"> in Normal order</option><br />
+ <option value="1"> in Version order</option><br />
+ </span>
+ </select><br />
+ Matching <input type="text" name="P" value="*" /><br />
+ <input type="submit" name="X" value="Go" /><br />
+ </span>
+ </form>
+ </code></p></div>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#query">Sütun Sıralamada Sorgu Seçenekleri</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Sütun Sıralamada Sorgu Seçenekleri</a></h2>
-
-
- <p>İstemciye, dizin içeriğini listelerken neleri hangi sırada
- listeleyeceğini belirleyebilmesi için içerik üzerinde biraz denetim
- sağlayabileceği çeşitli sorgu dizgesi bileşenleri sağlanmıştır.
- Çıktı üzerinde kullanıcı denetimini tamamen ortadan kaldırmak için
- <code class="directive"><a href="#indexoptions">IndexOptions</a></code> yönergesinin
- <code><a href="#indexoptions.ignoreclient">IgnoreClient</a></code>
- seçeneği kullanılabilir.</p>
-
- <p>Sütun sıralama başlıklarının her biri hedefi kendisi olan birer hiper
- bağ olup aşağıda sıralanan sorgu seçeneklerini kullanırlar. Bu
- seçeneklerin her biri her dizin içerik listesi isteğine eklenebilir.</p>
-
- <ul>
- <li><code>C=N</code> dizini dosya adına göre sıralar</li>
-
- <li><code>C=M</code> dizini son değişiklik zamanına ve ardından dosya
- ismine göre sıralar.</li>
-
- <li><code>C=S</code> dizini boyuta ve ardından dosya adına göre
- sıralar</li>
-
- <li class="separate"><code>C=D</code> dizini açıklamaya ve ardından
- dosya adına göre sıralar.</li>
-
- <li><code>O=A</code> artan sıralama uygulanır.</li>
-
- <li class="separate"><code>O=D</code> azalan sıralama uygulanır.</li>
-
- <li><code>F=0</code> listeleme basit listeleme biçiminde yapılır
- (<code>FancyIndexing</code> seçeneği ile etkinleştirilen biçimde
- değil)</li>
-
- <li><code>F=1</code> listeleme <code>FancyIndexing</code> seçeneği ile
- etkinleştirilen biçimde yapılır</li>
-
- <li class="separate"><code>F=2</code> listeleme <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code> ve
- <code><a href="#indexoptions.htmltable">HTMLTable</a></code> seçeneği
- ile etkinleştirilen biçimde yapılır.</li>
-
- <li><code>V=0</code> sürüme göre sıralama iptal edilir.</li>
-
- <li class="separate"><code>V=1</code> sürüme göre sıralama etkin
- kılınır.</li>
-
- <li><code>P=<var>kalıp</var></code> sadece belirtilen
- <code><em>kalıp</em></code> ile eşleşen dosyalar istelenir.</li>
- </ul>
-
- <p><code>P=<var>kalıp</var></code> sorgu seçeneğinin normalde <code class="directive"><a href="#indexignore">IndexIgnore</a></code> yönergesi işleme
- sokulduktan sonra değerlendirildiğine ve dosya isimlerinin diğer
- kendiliğinden içerik listeleme koşullarının konusu olmaya devam ettiğine
- dikkat ediniz. <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> modülündeki Sorgu
- Seçenekleri çözümleyicisi tanımadığı bir seçeneğe rastlar rastlamaz
- işlemi durdurur. Sorgu Seçenekleri yukarıda belirtilene uygun olarak iyi
- biçimli olmak zorundadır.</p>
-
- <p>Aşağıdaki basit örnekte sorgu seçeneklerinin kullanımı gösterilmiştir.
- Son satırda bulunan "submit" düğmesindeki tanınmayan "X" girdisine
- dikkat ediniz. "X=Göster" girdisi tüm seçenekler işlendikten sonra
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> tarafından son argüman olarak ele
- alınacak ve çözümleme işlemi o noktada duracaktır.</p>
-
- <div class="example"><pre><form action="" method="get">
- <input type="text" name="P" value="*" /> ile eşleşen
- <select name="C">
- <option value="N" selected="selected">isme</option>
- <option value="M"> değişiklik tarihine</option>
- <option value="S"> boyuta</option>
- <option value="D"> açıklamaya</option>
- </select> göre
- <select name="O">
- <option value="A" selected="selected"> artan</option>
- <option value="D"> azalan</option>
- </select>
- <select name="V">
- <option value="0" selected="selected">normal</option>
- <option value="1"> sürümlü</option>
- </select> sıralamayla bir
- <select name="F">
- <option value="0"> basit liste</option>
- <option value="1" selected="selected"> süslü liste</option>
- <option value="2"> tablolu liste</option>
- </select>
- <input type="submit" name="X" value="Göster" />
-</form></pre></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">Yönergesi</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Dosyaya göre seçilen simgenin yerinde gösterilecek metni belirler.
<p>Ayrıca bu davranışın daha ayrıntılı ele alındığı <code class="directive"><a href="#headername">HeaderName</a></code> yönergesine de
bakınız.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="query" id="query">Sütun Sıralamada Sorgu Seçenekleri</a></h2>
+
+
+ <p>İstemciye, dizin içeriğini listelerken neleri hangi sırada
+ listeleyeceğini belirleyebilmesi için içerik üzerinde biraz denetim
+ sağlayabileceği çeşitli sorgu dizgesi bileşenleri sağlanmıştır.
+ Çıktı üzerinde kullanıcı denetimini tamamen ortadan kaldırmak için
+ <code class="directive"><a href="#indexoptions">IndexOptions</a></code> yönergesinin
+ <code><a href="#indexoptions.ignoreclient">IgnoreClient</a></code>
+ seçeneği kullanılabilir.</p>
+
+ <p>Sütun sıralama başlıklarının her biri hedefi kendisi olan birer hiper
+ bağ olup aşağıda sıralanan sorgu seçeneklerini kullanırlar. Bu
+ seçeneklerin her biri her dizin içerik listesi isteğine eklenebilir.</p>
+
+ <ul>
+ <li><code>C=N</code> dizini dosya adına göre sıralar</li>
+
+ <li><code>C=M</code> dizini son değişiklik zamanına ve ardından dosya
+ ismine göre sıralar.</li>
+
+ <li><code>C=S</code> dizini boyuta ve ardından dosya adına göre
+ sıralar</li>
+
+ <li class="separate"><code>C=D</code> dizini açıklamaya ve ardından
+ dosya adına göre sıralar.</li>
+
+ <li><code>O=A</code> artan sıralama uygulanır.</li>
+
+ <li class="separate"><code>O=D</code> azalan sıralama uygulanır.</li>
+
+ <li><code>F=0</code> listeleme basit listeleme biçiminde yapılır
+ (<code>FancyIndexing</code> seçeneği ile etkinleştirilen biçimde
+ değil)</li>
+
+ <li><code>F=1</code> listeleme <code>FancyIndexing</code> seçeneği ile
+ etkinleştirilen biçimde yapılır</li>
+
+ <li class="separate"><code>F=2</code> listeleme <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code> ve
+ <code><a href="#indexoptions.htmltable">HTMLTable</a></code> seçeneği
+ ile etkinleştirilen biçimde yapılır.</li>
+
+ <li><code>V=0</code> sürüme göre sıralama iptal edilir.</li>
+
+ <li class="separate"><code>V=1</code> sürüme göre sıralama etkin
+ kılınır.</li>
+
+ <li><code>P=<var>kalıp</var></code> sadece belirtilen
+ <code><em>kalıp</em></code> ile eşleşen dosyalar istelenir.</li>
+ </ul>
+
+ <p><code>P=<var>kalıp</var></code> sorgu seçeneğinin normalde <code class="directive"><a href="#indexignore">IndexIgnore</a></code> yönergesi işleme
+ sokulduktan sonra değerlendirildiğine ve dosya isimlerinin diğer
+ kendiliğinden içerik listeleme koşullarının konusu olmaya devam ettiğine
+ dikkat ediniz. <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> modülündeki Sorgu
+ Seçenekleri çözümleyicisi tanımadığı bir seçeneğe rastlar rastlamaz
+ işlemi durdurur. Sorgu Seçenekleri yukarıda belirtilene uygun olarak iyi
+ biçimli olmak zorundadır.</p>
+
+ <p>Aşağıdaki basit örnekte sorgu seçeneklerinin kullanımı gösterilmiştir.
+ Son satırda bulunan "submit" düğmesindeki tanınmayan "X" girdisine
+ dikkat ediniz. "X=Göster" girdisi tüm seçenekler işlendikten sonra
+ <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> tarafından son argüman olarak ele
+ alınacak ve çözümleme işlemi o noktada duracaktır.</p>
+
+ <div class="example"><pre><form action="" method="get">
+ <input type="text" name="P" value="*" /> ile eşleşen
+ <select name="C">
+ <option value="N" selected="selected">isme</option>
+ <option value="M"> değişiklik tarihine</option>
+ <option value="S"> boyuta</option>
+ <option value="D"> açıklamaya</option>
+ </select> göre
+ <select name="O">
+ <option value="A" selected="selected"> artan</option>
+ <option value="D"> azalan</option>
+ </select>
+ <select name="V">
+ <option value="0" selected="selected">normal</option>
+ <option value="1"> sürümlü</option>
+ </select> sıralamayla bir
+ <select name="F">
+ <option value="0"> basit liste</option>
+ <option value="1" selected="selected"> süslü liste</option>
+ <option value="2"> tablolu liste</option>
+ </select>
+ <input type="submit" name="X" value="Göster" />
+</form></pre></div>
+
</div>
</div>
<div class="bottomlang">
<ul class="seealso">
<li><a href="../filter.html">Filters</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BufferSize" id="BufferSize">BufferSize</a> <a name="buffersize" id="buffersize">Directive</a></h2>
<table class="directive">
The default is 128 kilobytes.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_buffer.html" title="English"> en </a> |
<ul class="seealso">
<li><a href="../filter.html">Les filtres</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="buffersize" id="buffersize">Directive</a> <a name="BufferSize" id="BufferSize">BufferSize</a></h2>
<table class="directive">
128 ko.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_buffer.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../caching.html">Caching Guide</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Related Modules and Directives</a></h2>
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li><li><code class="module"><a href="../mod/mod_cache_socache.html">mod_cache_socache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocache">CacheSocache</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxtime">CacheSocacheMaxTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemintime">CacheSocacheMinTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxsize">CacheSocacheMaxSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadsize">CacheSocacheReadSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadtime">CacheSocacheReadTime</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="sampleconf" id="sampleconf">Sample Configuration</a></h2>
- <div class="example"><h3>Sample httpd.conf</h3><pre class="prettyprint lang-config">#
-# Sample Cache Configuration
-#
-LoadModule cache_module modules/mod_cache.so
-<IfModule mod_cache.c>
- LoadModule cache_disk_module modules/mod_cache_disk.so
- <IfModule mod_cache_disk.c>
- CacheRoot c:/cacheroot
- CacheEnable disk /
- CacheDirLevels 5
- CacheDirLength 3
- </IfModule>
-
- # When acting as a proxy, don't cache the list of security updates
- CacheDisable http://security.update.server/update-list/
-</IfModule></pre>
-</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="thunderingherd" id="thunderingherd">Avoiding the Thundering Herd</a></h2>
- <p>When a cached entry becomes stale, <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> will submit
- a conditional request to the backend, which is expected to confirm whether the
- cached entry is still fresh, and send an updated entity if not.</p>
- <p>A small but finite amount of time exists between the time the cached entity
- becomes stale, and the time the stale entity is fully refreshed. On a busy
- server, a significant number of requests might arrive during this time, and
- cause a <strong>thundering herd</strong> of requests to strike the backend
- suddenly and unpredictably.</p>
- <p>To keep the thundering herd at bay, the <code class="directive">CacheLock</code>
- directive can be used to define a directory in which locks are created for
- URLs <strong>in flight</strong>. The lock is used as a <strong>hint</strong>
- by other requests to either suppress an attempt to cache (someone else has
- gone to fetch the entity), or to indicate that a stale entry is being refreshed
- (stale content will be returned in the mean time).
- </p>
- <h3>Initial caching of an entry</h3>
-
- <p>When an entity is cached for the first time, a lock will be created for the
- entity until the response has been fully cached. During the lifetime of the
- lock, the cache will suppress the second and subsequent attempt to cache the
- same entity. While this doesn't hold back the thundering herd, it does stop
- the cache attempting to cache the same entity multiple times simultaneously.
- </p>
-
- <h3>Refreshment of a stale entry</h3>
-
- <p>When an entity reaches its freshness lifetime and becomes stale, a lock
- will be created for the entity until the response has either been confirmed as
- still fresh, or replaced by the backend. During the lifetime of the lock, the
- second and subsequent incoming request will cause stale data to be returned,
- and the thundering herd is kept at bay.</p>
-
- <h3>Locks and Cache-Control: no-cache</h3>
-
- <p>Locks are used as a <strong>hint only</strong> to enable the cache to be
- more gentle on backend servers, however the lock can be overridden if necessary.
- If the client sends a request with a Cache-Control header forcing a reload, any
- lock that may be present will be ignored, and the client's request will be
- honored immediately and the cached entry refreshed.</p>
- <p>As a further safety mechanism, locks have a configurable maximum age.
- Once this age has been reached, the lock is removed, and a new request is
- given the opportunity to create a new lock. This maximum age can be set using
- the <code class="directive">CacheLockMaxAge</code> directive, and defaults to 5
- seconds.
- </p>
-
- <h3>Example configuration</h3>
-
- <div class="example"><h3>Enabling the cache lock</h3><pre class="prettyprint lang-config">#
-# Enable the cache lock
-#
-<IfModule mod_cache.c>
- CacheLock on
- CacheLockPath /tmp/mod_cache-lock
- CacheLockMaxAge 5
-</IfModule></pre>
-</div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="finecontrol" id="finecontrol">Fine Control with the CACHE Filter</a></h2>
- <p>Under the default mode of cache operation, the cache runs as a quick handler,
- short circuiting the majority of server processing and offering the highest
- cache performance available.</p>
-
- <p>In this mode, the cache <strong>bolts onto</strong> the front of the server,
- acting as if a free standing RFC 2616 caching proxy had been placed in front of
- the server.</p>
-
- <p>While this mode offers the best performance, the administrator may find that
- under certain circumstances they may want to perform further processing on the
- request after the request is cached, such as to inject personalisation into the
- cached page, or to apply authorization restrictions to the content. Under these
- circumstances, an administrator is often forced to place independent reverse
- proxy servers either behind or in front of the caching server to achieve this.</p>
-
- <p>To solve this problem the <code class="directive"><a href="#cachequickhandler">CacheQuickHandler
- </a></code> directive can be set to <strong>off</strong>, and the server will
- process all phases normally handled by a non-cached request, including the
- <strong>authentication and authorization</strong> phases.</p>
-
- <p>In addition, the administrator may optionally specify the <strong>precise point
- within the filter chain</strong> where caching is to take place by adding the
- <strong>CACHE</strong> filter to the output filter chain.</p>
-
- <p>For example, to cache content before applying compression to the response,
- place the <strong>CACHE</strong> filter before the <strong>DEFLATE</strong>
- filter as in the example below:</p>
-
- <pre class="prettyprint lang-config"># Cache content before optional compression
-CacheQuickHandler off
-AddOutputFilterByType CACHE;DEFLATE text/plain</pre>
-
-
- <p>Another option is to have content cached before personalisation is applied
- by <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> (or another content processing filter). In this
- example templates containing tags understood by
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> are cached before being parsed:</p>
-
- <pre class="prettyprint lang-config"># Cache content before mod_include and mod_deflate
-CacheQuickHandler off
-AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html</pre>
-
-
- <p>You may place the <strong>CACHE</strong> filter anywhere you wish within the
- filter chain. In this example, content is cached after being parsed by
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>, but before being processed by
- <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>:</p>
-
- <pre class="prettyprint lang-config"># Cache content between mod_include and mod_deflate
-CacheQuickHandler off
-AddOutputFilterByType INCLUDES;CACHE;DEFLATE text/html</pre>
-
-
- <div class="warning"><h3>Warning:</h3>If the location of the
- <strong>CACHE</strong> filter in the filter chain is changed for any reason,
- you may need to <strong>flush your cache</strong> to ensure that your data
- served remains consistent. <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> is not in a position
- to enforce this for you.</div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="status" id="status">Cache Status and Logging</a></h2>
- <p>Once <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> has made a decision as to whether or not
- an entity is to be served from cache, the detailed reason for the decision
- is written to the subprocess environment within the request under the
- <strong>cache-status</strong> key. This reason can be logged by the
- <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> directive as
- follows:</p>
-
- <pre class="prettyprint lang-config">LogFormat "%{cache-status}e ..."</pre>
-
-
- <p>Based on the caching decision made, the reason is also written to the
- subprocess environment under one the following four keys, as appropriate:</p>
-
- <dl>
- <dt>cache-hit</dt><dd>The response was served from cache.</dd>
- <dt>cache-revalidate</dt><dd>The response was stale and was successfully
- revalidated, then served from cache.</dd>
- <dt>cache-miss</dt><dd>The response was served from the upstream server.</dd>
- <dt>cache-invalidate</dt><dd>The cached entity was invalidated by a request
- method other than GET or HEAD.</dd>
- </dl>
-
- <p>This makes it possible to support conditional logging of cached requests
- as per the following example:</p>
-
- <pre class="prettyprint lang-config">CustomLog cached-requests.log common env=cache-hit
-CustomLog uncached-requests.log common env=cache-miss
-CustomLog revalidated-requests.log common env=cache-revalidate
-CustomLog invalidated-requests.log common env=cache-invalidate</pre>
-
-
- <p>For module authors, a hook called <var>cache_status</var> is available,
- allowing modules to respond to the caching outcomes above in customised
- ways.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheDefaultExpire" id="CacheDefaultExpire">CacheDefaultExpire</a> <a name="cachedefaultexpire" id="cachedefaultexpire">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The default duration to cache a document when no expiry date is specified.</td></tr>
<li><code class="directive"><a href="#cachestorenostore">CacheStoreNoStore</a></code></li>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="related" id="related">Related Modules and Directives</a></h2>
+ <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li><li><code class="module"><a href="../mod/mod_cache_socache.html">mod_cache_socache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocache">CacheSocache</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxtime">CacheSocacheMaxTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemintime">CacheSocacheMinTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxsize">CacheSocacheMaxSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadsize">CacheSocacheReadSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadtime">CacheSocacheReadTime</a></code></li></ul></td></tr></table>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="sampleconf" id="sampleconf">Sample Configuration</a></h2>
+ <div class="example"><h3>Sample httpd.conf</h3><pre class="prettyprint lang-config">#
+# Sample Cache Configuration
+#
+LoadModule cache_module modules/mod_cache.so
+<IfModule mod_cache.c>
+ LoadModule cache_disk_module modules/mod_cache_disk.so
+ <IfModule mod_cache_disk.c>
+ CacheRoot c:/cacheroot
+ CacheEnable disk /
+ CacheDirLevels 5
+ CacheDirLength 3
+ </IfModule>
+
+ # When acting as a proxy, don't cache the list of security updates
+ CacheDisable http://security.update.server/update-list/
+</IfModule></pre>
+</div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="thunderingherd" id="thunderingherd">Avoiding the Thundering Herd</a></h2>
+ <p>When a cached entry becomes stale, <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> will submit
+ a conditional request to the backend, which is expected to confirm whether the
+ cached entry is still fresh, and send an updated entity if not.</p>
+ <p>A small but finite amount of time exists between the time the cached entity
+ becomes stale, and the time the stale entity is fully refreshed. On a busy
+ server, a significant number of requests might arrive during this time, and
+ cause a <strong>thundering herd</strong> of requests to strike the backend
+ suddenly and unpredictably.</p>
+ <p>To keep the thundering herd at bay, the <code class="directive">CacheLock</code>
+ directive can be used to define a directory in which locks are created for
+ URLs <strong>in flight</strong>. The lock is used as a <strong>hint</strong>
+ by other requests to either suppress an attempt to cache (someone else has
+ gone to fetch the entity), or to indicate that a stale entry is being refreshed
+ (stale content will be returned in the mean time).
+ </p>
+ <h3>Initial caching of an entry</h3>
+
+ <p>When an entity is cached for the first time, a lock will be created for the
+ entity until the response has been fully cached. During the lifetime of the
+ lock, the cache will suppress the second and subsequent attempt to cache the
+ same entity. While this doesn't hold back the thundering herd, it does stop
+ the cache attempting to cache the same entity multiple times simultaneously.
+ </p>
+
+ <h3>Refreshment of a stale entry</h3>
+
+ <p>When an entity reaches its freshness lifetime and becomes stale, a lock
+ will be created for the entity until the response has either been confirmed as
+ still fresh, or replaced by the backend. During the lifetime of the lock, the
+ second and subsequent incoming request will cause stale data to be returned,
+ and the thundering herd is kept at bay.</p>
+
+ <h3>Locks and Cache-Control: no-cache</h3>
+
+ <p>Locks are used as a <strong>hint only</strong> to enable the cache to be
+ more gentle on backend servers, however the lock can be overridden if necessary.
+ If the client sends a request with a Cache-Control header forcing a reload, any
+ lock that may be present will be ignored, and the client's request will be
+ honored immediately and the cached entry refreshed.</p>
+ <p>As a further safety mechanism, locks have a configurable maximum age.
+ Once this age has been reached, the lock is removed, and a new request is
+ given the opportunity to create a new lock. This maximum age can be set using
+ the <code class="directive">CacheLockMaxAge</code> directive, and defaults to 5
+ seconds.
+ </p>
+
+ <h3>Example configuration</h3>
+
+ <div class="example"><h3>Enabling the cache lock</h3><pre class="prettyprint lang-config">#
+# Enable the cache lock
+#
+<IfModule mod_cache.c>
+ CacheLock on
+ CacheLockPath /tmp/mod_cache-lock
+ CacheLockMaxAge 5
+</IfModule></pre>
+</div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="finecontrol" id="finecontrol">Fine Control with the CACHE Filter</a></h2>
+ <p>Under the default mode of cache operation, the cache runs as a quick handler,
+ short circuiting the majority of server processing and offering the highest
+ cache performance available.</p>
+
+ <p>In this mode, the cache <strong>bolts onto</strong> the front of the server,
+ acting as if a free standing RFC 2616 caching proxy had been placed in front of
+ the server.</p>
+
+ <p>While this mode offers the best performance, the administrator may find that
+ under certain circumstances they may want to perform further processing on the
+ request after the request is cached, such as to inject personalisation into the
+ cached page, or to apply authorization restrictions to the content. Under these
+ circumstances, an administrator is often forced to place independent reverse
+ proxy servers either behind or in front of the caching server to achieve this.</p>
+
+ <p>To solve this problem the <code class="directive"><a href="#cachequickhandler">CacheQuickHandler
+ </a></code> directive can be set to <strong>off</strong>, and the server will
+ process all phases normally handled by a non-cached request, including the
+ <strong>authentication and authorization</strong> phases.</p>
+
+ <p>In addition, the administrator may optionally specify the <strong>precise point
+ within the filter chain</strong> where caching is to take place by adding the
+ <strong>CACHE</strong> filter to the output filter chain.</p>
+
+ <p>For example, to cache content before applying compression to the response,
+ place the <strong>CACHE</strong> filter before the <strong>DEFLATE</strong>
+ filter as in the example below:</p>
+
+ <pre class="prettyprint lang-config"># Cache content before optional compression
+CacheQuickHandler off
+AddOutputFilterByType CACHE;DEFLATE text/plain</pre>
+
+
+ <p>Another option is to have content cached before personalisation is applied
+ by <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> (or another content processing filter). In this
+ example templates containing tags understood by
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> are cached before being parsed:</p>
+
+ <pre class="prettyprint lang-config"># Cache content before mod_include and mod_deflate
+CacheQuickHandler off
+AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html</pre>
+
+
+ <p>You may place the <strong>CACHE</strong> filter anywhere you wish within the
+ filter chain. In this example, content is cached after being parsed by
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>, but before being processed by
+ <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>:</p>
+
+ <pre class="prettyprint lang-config"># Cache content between mod_include and mod_deflate
+CacheQuickHandler off
+AddOutputFilterByType INCLUDES;CACHE;DEFLATE text/html</pre>
+
+
+ <div class="warning"><h3>Warning:</h3>If the location of the
+ <strong>CACHE</strong> filter in the filter chain is changed for any reason,
+ you may need to <strong>flush your cache</strong> to ensure that your data
+ served remains consistent. <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> is not in a position
+ to enforce this for you.</div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="status" id="status">Cache Status and Logging</a></h2>
+ <p>Once <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> has made a decision as to whether or not
+ an entity is to be served from cache, the detailed reason for the decision
+ is written to the subprocess environment within the request under the
+ <strong>cache-status</strong> key. This reason can be logged by the
+ <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> directive as
+ follows:</p>
+
+ <pre class="prettyprint lang-config">LogFormat "%{cache-status}e ..."</pre>
+
+
+ <p>Based on the caching decision made, the reason is also written to the
+ subprocess environment under one the following four keys, as appropriate:</p>
+
+ <dl>
+ <dt>cache-hit</dt><dd>The response was served from cache.</dd>
+ <dt>cache-revalidate</dt><dd>The response was stale and was successfully
+ revalidated, then served from cache.</dd>
+ <dt>cache-miss</dt><dd>The response was served from the upstream server.</dd>
+ <dt>cache-invalidate</dt><dd>The cached entity was invalidated by a request
+ method other than GET or HEAD.</dd>
+ </dl>
+
+ <p>This makes it possible to support conditional logging of cached requests
+ as per the following example:</p>
+
+ <pre class="prettyprint lang-config">CustomLog cached-requests.log common env=cache-hit
+CustomLog uncached-requests.log common env=cache-miss
+CustomLog revalidated-requests.log common env=cache-revalidate
+CustomLog invalidated-requests.log common env=cache-invalidate</pre>
+
+
+ <p>For module authors, a hook called <var>cache_status</var> is available,
+ allowing modules to respond to the caching outcomes above in customised
+ ways.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_cache.html" title="English"> en </a> |
cache</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Modules apparentés et directives</a></h2>
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_socache.html">mod_cache_socache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocache">CacheSocache</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxtime">CacheSocacheMaxTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemintime">CacheSocacheMinTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxsize">CacheSocacheMaxSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadsize">CacheSocacheReadSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadtime">CacheSocacheReadTime</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="sampleconf" id="sampleconf">Exemple de configuration</a></h2>
- <div class="example"><h3>Extrait de httpd.conf</h3><pre class="prettyprint lang-config">#
-# Exemple de configuration du cache
-#
-LoadModule cache_module modules/mod_cache.so
-<IfModule mod_cache.c>
- LoadModule cache_disk_module modules/mod_cache_disk.so
- <IfModule mod_cache_disk.c>
- CacheRoot c:/cacheroot
- CacheEnable disk /
- CacheDirLevels 5
- CacheDirLength 3
- </IfModule>
-
- # Lorsqu'on sert de mandataire, on ne met pas en cache la liste
-# des mises à jour de sécurité
- CacheDisable http://security.update.server/update-list/
-</IfModule></pre>
-</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="thunderingherd" id="thunderingherd">Eviter une tempête de requête</a></h2>
- <p>Lorsqu'une entrée du cache est périmée, <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>
- soumet une requête conditionnelle au processus d'arrière-plan, qui est
- censé confirmer la validité de l'entrée du cache, ou dans la négative
- envoyer une entrée mise à jour.</p>
- <p>Un court mais non négligeable laps de temps existe entre le moment
- où l'entrée du cache est périmée, et le moment où elle est mise à
- jour. Sur un serveur fortement chargé, un certain nombre de requêtes
- peut arriver pendant ce laps de temps, et provoquer une
- <strong>tempête</strong> de requêtes susceptibles de saturer le
- processus d'arrière-plan de manière soudaine et imprédictible.</p>
- <p>Pour contenir cette tempête, on peut utiliser la directive
- <code class="directive">CacheLock</code> afin de définir un répertoire où
- seront créés <strong>à la volée</strong> des verrous pour les URLs.
- Ces verrous sont utilisés comme autant d'<strong>indications</strong>
- par les autres requêtes, soit pour empêcher une tentative de mise en
- cache (un autre processus est en train de récupérer l'entité), soit
- pour indiquer qu'une entrée périmée est en cours de mise à jour
- (pendant ce temps, c'est le contenu périmé qui sera renvoyé).
- </p>
- <h3>Mise en cache initiale d'une entrée</h3>
-
- <p>Lorsqu'une entité est mise en cache pour la première fois, un
- verrou est créé pour cette entité jusqu'à ce que la réponse ait été
- entièrement mise en cache. Pendant la durée de vie du verrou, le
- cache va empêcher une seconde tentative de mise en cache de la même
- entité. Bien que cela ne suffise pas à contenir la tempête de
- requêtes, toute tentative de mettre en cache la même entité
- plusieurs fois simultanément est stoppée.
- </p>
-
- <h3>Mise à jour d'une entrée périmée</h3>
-
- <p>Lorsqu'une entrée atteint la limite de sa durée de vie, et
- devient par conséquent périmée, un verrou est créé pour cette entité
- jusqu'à ce que la réponse ait été soit confirmée comme encore
- valide, soit remplacée par le processus d'arrière-plan. Pendant la
- durée de vie du verrou, une seconde requête entrante va provoquer le
- renvoi de la donnée périmée, et la tempête de requêtes sera
- contenue.</p>
-
- <h3>Verrous et en-tête Cache-Control: no-cache</h3>
-
- <p>Les verrous ne sont utilisés <strong>qu'à titre
- indicatif</strong> pour enjoindre le cache à être plus coopératif
- avec les serveurs d'arrière-plan, et il est possible de passer outre
- si nécessaire. Si le client envoie une requête contenant un en-tête
- Cache-Control imposant un nouveau téléchargement de l'entité, tout
- verrou éventuel sera ignoré, la requête du client sera honorée
- immédiatement, et l'entrée du cache mise à jour.</p>
-
- <p>Comme mécanisme de sécurité supplémentaire, la durée de vie
- maximale des verrous est configurable. Lorsque cette limite est
- atteinte, le verrou est supprimé et une autre requête peut alors en
- créer un nouveau. Cette durée de vie peut être définie via la
- directive <code class="directive">CacheLockMaxAge</code>, et sa valeur par
- défaut est de 5 secondes.
- </p>
-
- <h3>Exemple de configuration</h3>
-
- <div class="example"><h3>Activation du verrouillage du cache</h3><pre class="prettyprint lang-config">#
-# Active le verrouillage du cache
-#
-<IfModule mod_cache.c>
- CacheLock on
- CacheLockPath /tmp/mod_cache-lock
- CacheLockMaxAge 5
-</IfModule></pre>
-</div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="finecontrol" id="finecontrol">Contrôle fin via le filtre CACHE</a></h2>
- <p>Dans son mode de fonctionnement par défaut, le cache s'exécute sous
- la forme d'un gestionnaire rapide, court-circuitant la majorité des
- traitements du serveur et fournissant ainsi une mise en cache
- possédant les plus hautes performances disponibles.</p>
-
- <p>Dans ce mode, le cache <strong>s'incruste</strong> devant le
- serveur, comme si un mandataire de mise en cache indépendant RFC 2616
- était placé devant ce dernier.</p>
-
- <p>Bien que que ce mode offre les meilleures performances, les
- administrateurs peuvent souhaiter, dans certaines circonstances,
- effectuer des traitements sur la requête après que cette dernière ait
- été mise en cache, comme ajouter du contenu personnalisé à la page
- mise en cache, ou appliquer des restrictions d'autorisations au
- contenu. Pour y parvenir, l'administrateur sera alors souvent forcé de
- placer des serveurs mandataires inverses indépendants soit derrière,
- soit devant le serveur de mise en cache.</p>
-
- <p>Pour résoudre ce problème, la directive <code class="directive"><a href="#cachequickhandler">CacheQuickHandler</a></code> peut être définie à
- <strong>off</strong>, afin que le serveur traite toutes les phases
- normalement exécutées par une requête non mise en cache, y compris les
- phases <strong>d'authentification et d'autorisation</strong>.</p>
-
- <p>En outre, l'administrateur peut éventuellement spécifier le
- <strong>point précis dans la chaîne de filtrage</strong> où devra
- intervenir la mise en cache en ajoutant le filtre
- <strong>CACHE</strong> à la chaîne de filtrage en sortie.</p>
-
- <p>Par exemple, pour mettre en cache le contenu avant d'appliquer une
- compression à la réponse, placez le filtre <strong>CACHE</strong>
- avant le filtre <strong>DEFLATE</strong> comme dans l'exemple suivant
- :</p>
-
- <pre class="prettyprint lang-config"># Mise en cache du contenu avant la compression optionnelle
-CacheQuickHandler off
-AddOutputFilterByType CACHE;DEFLATE text/plain</pre>
-
-
- <p>Une autre possibilité consiste à mettre en cache le contenu avant
- l'ajout de contenu personnalisé via <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> (ou
- tout autre filtre de traitement de contenu). Dans l'exemple suivant,
- les modèles contenant des balises comprises par
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> sont mis en cache avant d'être
- interprétés :</p>
-
- <pre class="prettyprint lang-config"># Mise en cache du contenu avant l'intervention de mod_include et
- # mod_deflate
-CacheQuickHandler off
-AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html</pre>
-
-
- <p>Vous pouvez insérer le filtre <strong>CACHE</strong> en tout point
- de la chaîne de filtrage. Dans l'exemple suivant, le contenu est mis
- en cache après avoir été interprété par <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>,
- mais avant d'être traité par <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> :</p>
-
- <pre class="prettyprint lang-config"># Mise en cache du contenu entre les interventions de mod_include et
- # mod_deflate
-CacheQuickHandler off
-AddOutputFilterByType INCLUDES;CACHE;DEFLATE text/html</pre>
-
-
- <div class="warning"><h3>Avertissement :</h3>Si pour une raison
- ou pour une autre, le point d'insertion du filtre
- <strong>CACHE</strong> dans la chaîne de filtrage est modifié, vous
- devez <strong>vider votre cache</strong> pour être sûr que les données
- servies soient à jour. En effet, <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> n'est pas
- en mesure d'effectuer cette opération à votre place.</div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="status" id="status">Etat du cache et journalisation</a></h2>
- <p>Lorsque <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> a décidé s'il devait ou non
- servir une entité depuis le cache, les raisons précises de cette
- décision sont enregistrées dans l'environnement du sous-processus
- interne à la requête sous la clé <strong>cache-status</strong>.
- Cette information peut être journalisée via la directive <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> comme suit :</p>
-
- <pre class="prettyprint lang-config">LogFormat "%{cache-status}e ..."</pre>
-
-
- <p>En fonction de la décision prise, l'information est aussi écrite
- dans l'environnement du sous-processus sous une des quatre clés
- suivantes :</p>
-
- <dl>
- <dt>cache-hit</dt><dd>Le contenu a été servi depuis le cache.</dd>
- <dt>cache-revalidate</dt><dd>Le contenu du cache était périmé, a été
- mis à jour avec succès, puis servi depuis le cache.</dd>
- <dt>cache-miss</dt><dd>Le contenu n'était pas dans le cache et a été
- servi directement depuis le serveur demandé.</dd>
- <dt>cache-invalidate</dt><dd>L'entité du cache est devenue invalide
- suite à une requête d'un type autre que GET ou HEAD.</dd>
- </dl>
-
- <p>Il est alors possible d'envisager une journalisation conditionnelle
- du traitement des requêtes par rapport au cache comme dans l'exemple
- suivant :</p>
-
- <pre class="prettyprint lang-config">CustomLog cached-requests.log common env=cache-hit
-CustomLog uncached-requests.log common env=cache-miss
-CustomLog revalidated-requests.log common env=cache-revalidate
-CustomLog invalidated-requests.log common env=cache-invalidate</pre>
-
-
- <p>Pour les concepteurs de modules, une accroche (hook) nommée
- <var>cache_status</var> est disponible et permet aux modules de
- répondre aux résultats de la vérification du cache ci-dessus de manière
- personnalisée.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="cachedefaultexpire" id="cachedefaultexpire">Directive</a> <a name="CacheDefaultExpire" id="CacheDefaultExpire">CacheDefaultExpire</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>La durée par défaut de mise en cache d'un document
<li><code class="directive"><a href="#cacheignorecachecontrol">CacheIgnoreCacheControl</a></code></li>
<li><code class="directive"><a href="#cachestorenostore">CacheStoreNoStore</a></code></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="related" id="related">Modules apparentés et directives</a></h2>
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_socache.html">mod_cache_socache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocache">CacheSocache</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxtime">CacheSocacheMaxTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemintime">CacheSocacheMinTime</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachemaxsize">CacheSocacheMaxSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadsize">CacheSocacheReadSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_socache.html#cachesocachereadtime">CacheSocacheReadTime</a></code></li></ul></td></tr></table>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="sampleconf" id="sampleconf">Exemple de configuration</a></h2>
+ <div class="example"><h3>Extrait de httpd.conf</h3><pre class="prettyprint lang-config">#
+# Exemple de configuration du cache
+#
+LoadModule cache_module modules/mod_cache.so
+<IfModule mod_cache.c>
+ LoadModule cache_disk_module modules/mod_cache_disk.so
+ <IfModule mod_cache_disk.c>
+ CacheRoot c:/cacheroot
+ CacheEnable disk /
+ CacheDirLevels 5
+ CacheDirLength 3
+ </IfModule>
+
+ # Lorsqu'on sert de mandataire, on ne met pas en cache la liste
+# des mises à jour de sécurité
+ CacheDisable http://security.update.server/update-list/
+</IfModule></pre>
+</div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="thunderingherd" id="thunderingherd">Eviter une tempête de requête</a></h2>
+ <p>Lorsqu'une entrée du cache est périmée, <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>
+ soumet une requête conditionnelle au processus d'arrière-plan, qui est
+ censé confirmer la validité de l'entrée du cache, ou dans la négative
+ envoyer une entrée mise à jour.</p>
+ <p>Un court mais non négligeable laps de temps existe entre le moment
+ où l'entrée du cache est périmée, et le moment où elle est mise à
+ jour. Sur un serveur fortement chargé, un certain nombre de requêtes
+ peut arriver pendant ce laps de temps, et provoquer une
+ <strong>tempête</strong> de requêtes susceptibles de saturer le
+ processus d'arrière-plan de manière soudaine et imprédictible.</p>
+ <p>Pour contenir cette tempête, on peut utiliser la directive
+ <code class="directive">CacheLock</code> afin de définir un répertoire où
+ seront créés <strong>à la volée</strong> des verrous pour les URLs.
+ Ces verrous sont utilisés comme autant d'<strong>indications</strong>
+ par les autres requêtes, soit pour empêcher une tentative de mise en
+ cache (un autre processus est en train de récupérer l'entité), soit
+ pour indiquer qu'une entrée périmée est en cours de mise à jour
+ (pendant ce temps, c'est le contenu périmé qui sera renvoyé).
+ </p>
+ <h3>Mise en cache initiale d'une entrée</h3>
+
+ <p>Lorsqu'une entité est mise en cache pour la première fois, un
+ verrou est créé pour cette entité jusqu'à ce que la réponse ait été
+ entièrement mise en cache. Pendant la durée de vie du verrou, le
+ cache va empêcher une seconde tentative de mise en cache de la même
+ entité. Bien que cela ne suffise pas à contenir la tempête de
+ requêtes, toute tentative de mettre en cache la même entité
+ plusieurs fois simultanément est stoppée.
+ </p>
+
+ <h3>Mise à jour d'une entrée périmée</h3>
+
+ <p>Lorsqu'une entrée atteint la limite de sa durée de vie, et
+ devient par conséquent périmée, un verrou est créé pour cette entité
+ jusqu'à ce que la réponse ait été soit confirmée comme encore
+ valide, soit remplacée par le processus d'arrière-plan. Pendant la
+ durée de vie du verrou, une seconde requête entrante va provoquer le
+ renvoi de la donnée périmée, et la tempête de requêtes sera
+ contenue.</p>
+
+ <h3>Verrous et en-tête Cache-Control: no-cache</h3>
+
+ <p>Les verrous ne sont utilisés <strong>qu'à titre
+ indicatif</strong> pour enjoindre le cache à être plus coopératif
+ avec les serveurs d'arrière-plan, et il est possible de passer outre
+ si nécessaire. Si le client envoie une requête contenant un en-tête
+ Cache-Control imposant un nouveau téléchargement de l'entité, tout
+ verrou éventuel sera ignoré, la requête du client sera honorée
+ immédiatement, et l'entrée du cache mise à jour.</p>
+
+ <p>Comme mécanisme de sécurité supplémentaire, la durée de vie
+ maximale des verrous est configurable. Lorsque cette limite est
+ atteinte, le verrou est supprimé et une autre requête peut alors en
+ créer un nouveau. Cette durée de vie peut être définie via la
+ directive <code class="directive">CacheLockMaxAge</code>, et sa valeur par
+ défaut est de 5 secondes.
+ </p>
+
+ <h3>Exemple de configuration</h3>
+
+ <div class="example"><h3>Activation du verrouillage du cache</h3><pre class="prettyprint lang-config">#
+# Active le verrouillage du cache
+#
+<IfModule mod_cache.c>
+ CacheLock on
+ CacheLockPath /tmp/mod_cache-lock
+ CacheLockMaxAge 5
+</IfModule></pre>
+</div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="finecontrol" id="finecontrol">Contrôle fin via le filtre CACHE</a></h2>
+ <p>Dans son mode de fonctionnement par défaut, le cache s'exécute sous
+ la forme d'un gestionnaire rapide, court-circuitant la majorité des
+ traitements du serveur et fournissant ainsi une mise en cache
+ possédant les plus hautes performances disponibles.</p>
+
+ <p>Dans ce mode, le cache <strong>s'incruste</strong> devant le
+ serveur, comme si un mandataire de mise en cache indépendant RFC 2616
+ était placé devant ce dernier.</p>
+
+ <p>Bien que que ce mode offre les meilleures performances, les
+ administrateurs peuvent souhaiter, dans certaines circonstances,
+ effectuer des traitements sur la requête après que cette dernière ait
+ été mise en cache, comme ajouter du contenu personnalisé à la page
+ mise en cache, ou appliquer des restrictions d'autorisations au
+ contenu. Pour y parvenir, l'administrateur sera alors souvent forcé de
+ placer des serveurs mandataires inverses indépendants soit derrière,
+ soit devant le serveur de mise en cache.</p>
+
+ <p>Pour résoudre ce problème, la directive <code class="directive"><a href="#cachequickhandler">CacheQuickHandler</a></code> peut être définie à
+ <strong>off</strong>, afin que le serveur traite toutes les phases
+ normalement exécutées par une requête non mise en cache, y compris les
+ phases <strong>d'authentification et d'autorisation</strong>.</p>
+
+ <p>En outre, l'administrateur peut éventuellement spécifier le
+ <strong>point précis dans la chaîne de filtrage</strong> où devra
+ intervenir la mise en cache en ajoutant le filtre
+ <strong>CACHE</strong> à la chaîne de filtrage en sortie.</p>
+
+ <p>Par exemple, pour mettre en cache le contenu avant d'appliquer une
+ compression à la réponse, placez le filtre <strong>CACHE</strong>
+ avant le filtre <strong>DEFLATE</strong> comme dans l'exemple suivant
+ :</p>
+
+ <pre class="prettyprint lang-config"># Mise en cache du contenu avant la compression optionnelle
+CacheQuickHandler off
+AddOutputFilterByType CACHE;DEFLATE text/plain</pre>
+
+
+ <p>Une autre possibilité consiste à mettre en cache le contenu avant
+ l'ajout de contenu personnalisé via <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> (ou
+ tout autre filtre de traitement de contenu). Dans l'exemple suivant,
+ les modèles contenant des balises comprises par
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> sont mis en cache avant d'être
+ interprétés :</p>
+
+ <pre class="prettyprint lang-config"># Mise en cache du contenu avant l'intervention de mod_include et
+ # mod_deflate
+CacheQuickHandler off
+AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html</pre>
+
+
+ <p>Vous pouvez insérer le filtre <strong>CACHE</strong> en tout point
+ de la chaîne de filtrage. Dans l'exemple suivant, le contenu est mis
+ en cache après avoir été interprété par <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>,
+ mais avant d'être traité par <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> :</p>
+
+ <pre class="prettyprint lang-config"># Mise en cache du contenu entre les interventions de mod_include et
+ # mod_deflate
+CacheQuickHandler off
+AddOutputFilterByType INCLUDES;CACHE;DEFLATE text/html</pre>
+
+
+ <div class="warning"><h3>Avertissement :</h3>Si pour une raison
+ ou pour une autre, le point d'insertion du filtre
+ <strong>CACHE</strong> dans la chaîne de filtrage est modifié, vous
+ devez <strong>vider votre cache</strong> pour être sûr que les données
+ servies soient à jour. En effet, <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> n'est pas
+ en mesure d'effectuer cette opération à votre place.</div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="status" id="status">Etat du cache et journalisation</a></h2>
+ <p>Lorsque <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> a décidé s'il devait ou non
+ servir une entité depuis le cache, les raisons précises de cette
+ décision sont enregistrées dans l'environnement du sous-processus
+ interne à la requête sous la clé <strong>cache-status</strong>.
+ Cette information peut être journalisée via la directive <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> comme suit :</p>
+
+ <pre class="prettyprint lang-config">LogFormat "%{cache-status}e ..."</pre>
+
+
+ <p>En fonction de la décision prise, l'information est aussi écrite
+ dans l'environnement du sous-processus sous une des quatre clés
+ suivantes :</p>
+
+ <dl>
+ <dt>cache-hit</dt><dd>Le contenu a été servi depuis le cache.</dd>
+ <dt>cache-revalidate</dt><dd>Le contenu du cache était périmé, a été
+ mis à jour avec succès, puis servi depuis le cache.</dd>
+ <dt>cache-miss</dt><dd>Le contenu n'était pas dans le cache et a été
+ servi directement depuis le serveur demandé.</dd>
+ <dt>cache-invalidate</dt><dd>L'entité du cache est devenue invalide
+ suite à une requête d'un type autre que GET ou HEAD.</dd>
+ </dl>
+
+ <p>Il est alors possible d'envisager une journalisation conditionnelle
+ du traitement des requêtes par rapport au cache comme dans l'exemple
+ suivant :</p>
+
+ <pre class="prettyprint lang-config">CustomLog cached-requests.log common env=cache-hit
+CustomLog uncached-requests.log common env=cache-miss
+CustomLog revalidated-requests.log common env=cache-revalidate
+CustomLog invalidated-requests.log common env=cache-invalidate</pre>
+
+
+ <p>Pour les concepteurs de modules, une accroche (hook) nommée
+ <var>cache_status</var> est disponible et permet aux modules de
+ répondre aux résultats de la vérification du cache ci-dessus de manière
+ personnalisée.</p>
+
</div>
</div>
<div class="bottomlang">
<li><a href="../caching.html">キャッシュ機能</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">関連モジュールとディレクティブ</a></h2>
- <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li><li><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_dist.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachesize">MCacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="sampleconf" id="sampleconf">サンプル設定</a></h2>
- <div class="example"><h3>Sample httpd.conf</h3><p><code>
- #<br />
- # Sample Cache Configuration<br />
- #<br />
- LoadModule cache_module modules/mod_cache.so<br />
- <br />
- <IfModule mod_cache.c><br />
- <span class="indent">
- #LoadModule cache_disk_module modules/mod_cache_disk.so<br />
- # If you want to use mod_cache_disk instead of mod_mem_cache,<br />
- # uncomment the line above and comment out the LoadModule line below.<br />
- <IfModule mod_cache_disk.c><br />
- <span class="indent">
- CacheRoot c:/cacheroot<br />
- CacheEnable disk /<br />
- CacheDirLevels 5<br />
- CacheDirLength 3<br />
- </span>
- </IfModule> <br />
- <br />
- LoadModule mem_cache_module modules/mod_mem_cache.so<br />
- <IfModule mod_mem_cache.c><br />
- <span class="indent">
- CacheEnable mem /<br />
- MCacheSize 4096<br />
- MCacheMaxObjectCount 100<br />
- MCacheMinObjectSize 1<br />
- MCacheMaxObjectSize 2048<br />
- </span>
- </IfModule><br />
- <br />
- # When acting as a proxy, don't cache the list of security updates<br />
- CacheDisable http://security.update.server/update-list/<br />
- </span>
- </IfModule>
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheDefaultExpire" id="CacheDefaultExpire">CacheDefaultExpire</a> <a name="cachedefaultexpire" id="cachedefaultexpire">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>期日が指定されていないときにドキュメントをキャッシュするデフォルトの期間</td></tr>
<li><code class="directive"><a href="#cachestorenostore">CacheStoreNoStore</a></code></li>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="related" id="related">関連モジュールとディレクティブ</a></h2>
+ <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li><li><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_dist.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachesize">MCacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></code></li></ul></td></tr></table>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="sampleconf" id="sampleconf">サンプル設定</a></h2>
+ <div class="example"><h3>Sample httpd.conf</h3><p><code>
+ #<br />
+ # Sample Cache Configuration<br />
+ #<br />
+ LoadModule cache_module modules/mod_cache.so<br />
+ <br />
+ <IfModule mod_cache.c><br />
+ <span class="indent">
+ #LoadModule cache_disk_module modules/mod_cache_disk.so<br />
+ # If you want to use mod_cache_disk instead of mod_mem_cache,<br />
+ # uncomment the line above and comment out the LoadModule line below.<br />
+ <IfModule mod_cache_disk.c><br />
+ <span class="indent">
+ CacheRoot c:/cacheroot<br />
+ CacheEnable disk /<br />
+ CacheDirLevels 5<br />
+ CacheDirLength 3<br />
+ </span>
+ </IfModule> <br />
+ <br />
+ LoadModule mem_cache_module modules/mod_mem_cache.so<br />
+ <IfModule mod_mem_cache.c><br />
+ <span class="indent">
+ CacheEnable mem /<br />
+ MCacheSize 4096<br />
+ MCacheMaxObjectCount 100<br />
+ MCacheMinObjectSize 1<br />
+ MCacheMaxObjectSize 2048<br />
+ </span>
+ </IfModule><br />
+ <br />
+ # When acting as a proxy, don't cache the list of security updates<br />
+ CacheDisable http://security.update.server/update-list/<br />
+ </span>
+ </IfModule>
+ </code></p></div>
+</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_cache.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#sampleconf">¼³Á¤¿¹</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾î</a></h2>
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li><li><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachesize">CacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcinterval">CacheGcInterval</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheexpirycheck">CacheExpiryCheck</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachetimemargin">CacheTimeMargin</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcdaily">CacheGcDaily</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcunused">CacheGcUnused</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcclean">CacheGcClean</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcmemusage">CacheGcMemUsage</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachesize">MCacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="sampleconf" id="sampleconf">¼³Á¤¿¹</a></h2>
- <div class="example"><h3>Sample httpd.conf</h3><p><code>
- #<br />
- # ¿¹Á¦ ij½¬ ¼³Á¤<br />
- #<br />
- LoadModule cache_module modules/mod_cache.so<br />
- <br />
- <IfModule mod_cache.c><br />
- <span class="indent">
- #LoadModule cache_disk_module modules/mod_cache_disk.so<br />
- <IfModule mod_cache_disk.c><br />
- <span class="indent">
- CacheRoot c:/cacheroot<br />
- CacheSize 256<br />
- CacheEnable disk /<br />
- CacheDirLevels 5<br />
- CacheDirLength 3<br />
- </span>
- </IfModule> <br />
- <br />
- LoadModule mem_cache_module modules/mod_mem_cache.so<br />
- <IfModule mod_mem_cache.c><br />
- <span class="indent">
- CacheEnable mem /<br />
- MCacheSize 4096<br />
- MCacheMaxObjectCount 100<br />
- MCacheMinObjectSize 1<br />
- MCacheMaxObjectSize 2048<br />
- </span>
- </IfModule><br />
- </span>
- </IfModule>
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheDefaultExpire" id="CacheDefaultExpire">CacheDefaultExpire</a> <a name="cachedefaultexpire" id="cachedefaultexpire">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸¸±â½Ã°£À» ÁöÁ¤ÇÏÁö¾ÊÀº ¹®¼¸¦ ij½¬ÇÒ ±âº» ±â°£.</td></tr>
<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
</table><p>Documentation not yet translated. Please see English version of document.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="related" id="related">°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾î</a></h2>
+ <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li><li><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachesize">CacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcinterval">CacheGcInterval</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheexpirycheck">CacheExpiryCheck</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachetimemargin">CacheTimeMargin</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcdaily">CacheGcDaily</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcunused">CacheGcUnused</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcclean">CacheGcClean</a></code></li><li><code class="directive"><a href="../mod/mod_cache_disk.html#cachegcmemusage">CacheGcMemUsage</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachesize">MCacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></code></li></ul></td></tr></table>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="sampleconf" id="sampleconf">¼³Á¤¿¹</a></h2>
+ <div class="example"><h3>Sample httpd.conf</h3><p><code>
+ #<br />
+ # ¿¹Á¦ ij½¬ ¼³Á¤<br />
+ #<br />
+ LoadModule cache_module modules/mod_cache.so<br />
+ <br />
+ <IfModule mod_cache.c><br />
+ <span class="indent">
+ #LoadModule cache_disk_module modules/mod_cache_disk.so<br />
+ <IfModule mod_cache_disk.c><br />
+ <span class="indent">
+ CacheRoot c:/cacheroot<br />
+ CacheSize 256<br />
+ CacheEnable disk /<br />
+ CacheDirLevels 5<br />
+ CacheDirLength 3<br />
+ </span>
+ </IfModule> <br />
+ <br />
+ LoadModule mem_cache_module modules/mod_mem_cache.so<br />
+ <IfModule mod_mem_cache.c><br />
+ <span class="indent">
+ CacheEnable mem /<br />
+ MCacheSize 4096<br />
+ MCacheMaxObjectCount 100<br />
+ MCacheMinObjectSize 1<br />
+ MCacheMaxObjectSize 2048<br />
+ </span>
+ </IfModule><br />
+ </span>
+ </IfModule>
+ </code></p></div>
+</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cache.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_cache_socache.html">mod_cache_socache</a></code></li>
<li><a href="../caching.html">Caching Guide</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheDirLength" id="CacheDirLength">CacheDirLength</a> <a name="cachedirlength" id="cachedirlength">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_cache_disk.html" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_cache_socache.html">mod_cache_socache</a></code></li>
<li><a href="../caching.html">Guide de la mise en cache</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="cachedirlength" id="cachedirlength">Directive</a> <a name="CacheDirLength" id="CacheDirLength">CacheDirLength</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_cache_disk.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#cacheroot">CacheRoot</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheDirLength" id="CacheDirLength">CacheDirLength</a> <a name="cachedirlength" id="cachedirlength">ディレクティブ</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_cache_disk.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#cacheroot">CacheRoot</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheDirLength" id="CacheDirLength">CacheDirLength</a> <a name="cachedirlength" id="cachedirlength">Áö½Ã¾î</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cache_disk.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li>
<li><a href="../caching.html">Caching Guide</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheSocache" id="CacheSocache">CacheSocache</a> <a name="cachesocache" id="cachesocache">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_cache_socache.html" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code></li>
<li><a href="../caching.html">Guide de la mise en cache</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="cachesocache" id="cachesocache">Directive</a> <a name="CacheSocache" id="CacheSocache">CacheSocache</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_cache_socache.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
<li><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="MetaDir" id="MetaDir">MetaDir</a> <a name="metadir" id="metadir">Directive</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_cern_meta.html" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
<li><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="metadir" id="metadir">Directive</a> <a name="MetaDir" id="MetaDir">MetaDir</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_cern_meta.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
<li><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="MetaDir" id="MetaDir">MetaDir</a> <a name="metadir" id="metadir">Áö½Ã¾î</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cern_meta.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="http://www.ietf.org/rfc/rfc3875">CGI Specification</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the CGI script error logfile</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p>The <code class="directive">ScriptLog</code> directive sets the CGI
+ script error logfile. If no <code class="directive">ScriptLog</code> is given,
+ no error log is created. If given, any CGI errors are logged into the
+ filename given as argument. If this is a relative file or path it is
+ taken relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.
+ </p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ScriptLog logs/cgi_log</pre>
+</div>
+
+ <p>This log will be opened as the user the child processes run
+ as, <em>i.e.</em> the user specified in the main <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> directive. This means that
+ either the directory the script log is in needs to be writable
+ by that user or the file needs to be manually created and set
+ to be writable by that user. If you place the script log in
+ your main logs directory, do <strong>NOT</strong> change the
+ directory permissions to make it writable by the user the child
+ processes run as.</p>
+
+ <p>Note that script logging is meant to be a debugging feature
+ when writing CGI scripts, and is not meant to be activated
+ continuously on running servers. It is not optimized for speed
+ or efficiency, and may have security problems if used in a
+ manner other than that for which it was designed.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum amount of PUT or POST requests that will be recorded
+in the scriptlog</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLogBuffer <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p>The size of any PUT or POST entity body that is logged to
+ the file is limited, to prevent the log file growing too big
+ too quickly if large bodies are being received. By default, up
+ to 1024 bytes are logged, but this can be changed with this
+ directive.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size limit of the CGI script logfile</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p><code class="directive">ScriptLogLength</code> can be used to limit the
+ size of the CGI script logfile. Since the logfile logs a lot of
+ information per CGI error (all request headers, all script output)
+ it can grow to be a big file. To prevent problems due to unbounded
+ growth, this directive can be used to set an maximum file-size for
+ the CGI logfile. If the file exceeds this size, no more
+ information will be written to it.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="env" id="env">CGI Environment variables</a></h2>
<p>The server will set the CGI environment variables as described
<p>(The %stdout and %stderr parts may be missing if the script did
not output anything on standard output or standard error).</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the CGI script error logfile</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>The <code class="directive">ScriptLog</code> directive sets the CGI
- script error logfile. If no <code class="directive">ScriptLog</code> is given,
- no error log is created. If given, any CGI errors are logged into the
- filename given as argument. If this is a relative file or path it is
- taken relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.
- </p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ScriptLog logs/cgi_log</pre>
-</div>
-
- <p>This log will be opened as the user the child processes run
- as, <em>i.e.</em> the user specified in the main <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> directive. This means that
- either the directory the script log is in needs to be writable
- by that user or the file needs to be manually created and set
- to be writable by that user. If you place the script log in
- your main logs directory, do <strong>NOT</strong> change the
- directory permissions to make it writable by the user the child
- processes run as.</p>
-
- <p>Note that script logging is meant to be a debugging feature
- when writing CGI scripts, and is not meant to be activated
- continuously on running servers. It is not optimized for speed
- or efficiency, and may have security problems if used in a
- manner other than that for which it was designed.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLogBuffer <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>The size of any PUT or POST entity body that is logged to
- the file is limited, to prevent the log file growing too big
- too quickly if large bodies are being received. By default, up
- to 1024 bytes are logged, but this can be changed with this
- directive.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size limit of the CGI script logfile</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLogLength</code> can be used to limit the
- size of the CGI script logfile. Since the logfile logs a lot of
- information per CGI error (all request headers, all script output)
- it can grow to be a big file. To prevent problems due to unbounded
- growth, this directive can be used to set an maximum file-size for
- the CGI logfile. If the file exceeds this size, no more
- information will be written to it.</p>
-
</div>
</div>
<div class="bottomlang">
CGI</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="scriptlog" id="scriptlog">Directive</a> <a name="ScriptLog" id="ScriptLog">ScriptLog</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Chemin du fichier journal des erreurs du script
+CGI</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ScriptLog <var>chemin fichier</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p>La directive <code class="directive">ScriptLog</code> définit
+ le chemin du fichier journal des erreurs du script CGI. Si cette
+ directive n'est pas définie, aucune journalisation des erreurs n'est
+ effectuée. Si elle est définie, toute erreur CGI sera enregistrée
+ dans le fichier dont le nom est fourni en argument. S'il s'agit d'un
+ chemin de fichier relatif, il est considéré par rapport au
+ répertoire défini par la directive <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.
+ </p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ScriptLog logs/cgi_log</pre>
+</div>
+
+ <p>Ce journal sera ouvert par l'utilisateur sous lequel les
+ processus enfants s'exécutent, c'est à dire l'utilisateur spécifié
+ par la directive du serveur <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code>. Ceci implique que soit le
+ répertoire dans lequel se trouve le journal doit être accessible en
+ écriture pour cet utilisateur, soit le fichier doit être créé
+ manuellement et accessible en écriture pour cet utilisateur. Si vous
+ placez le journal du script dans votre répertoire principal des
+ journaux, ne modifiez <strong>PAS</strong> les permissions de ce
+ dernier afin de le le rendre accessible en écriture par
+ l'utilisateur sous lequel les processus enfants s'exécutent.</p>
+
+ <p>Notez que l'on ne doit activer la journalisation des scripts
+ qu'à des fins de débogage lors de l'écriture de scripts CGI, et non
+ de manière permanente sur un serveur en production. Elle n'est pas
+ optimisée en ce qui concerne la vitesse et l'efficacité, et peut
+ présenter des problèmes de sécurité si on l'utilise dans un cadre
+ autre que celui pour lequel elle a été conçue.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="scriptlogbuffer" id="scriptlogbuffer">Directive</a> <a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille maximale des requêtes PUT ou POST qui seront
+enregistrées dans le journal du script</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ScriptLogBuffer <var>octets</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p>Cette directive limite la taille du corps de toute
+ entité PUT ou POST qui sera enregistrée dans le journal, afin
+ de prévenir une croissance trop importante et trop rapide du fichier
+ journal due à la réception de corps de requête de grandes tailles.
+ Cette directive modifie cette taille maximale, dont la
+ valeur par défaut est de 1024 octets.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="scriptloglength" id="scriptloglength">Directive</a> <a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille maximale du fichier journal des scripts
+CGI</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ScriptLogLength <var>octets</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p>La directive <code class="directive">ScriptLogLength</code>
+ définit la taille maximale du fichier journal des scripts CGI. Comme
+ le fichier journal accumule une grande quantité d'informations par
+ erreur CGI (tous les en-têtes de la requête, toutes les sorties du
+ script), il peut vite atteindre une grande taille. En limitant la
+ taille du fichier, cette directive permet d'éviter les problèmes que
+ causerait sa croissance sans limites. Lorsque le fichier a atteint
+ cette taille maximale, plus aucune information n'y est
+ enregistrée.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="env" id="env">Les variables d'environnement CGI</a></h2>
<p>Le serveur va définir les variables d'environnement CGI comme
n'a rien envoyé sur la sortie standard ou la sortie
d'erreurs).</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="scriptlog" id="scriptlog">Directive</a> <a name="ScriptLog" id="ScriptLog">ScriptLog</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Chemin du fichier journal des erreurs du script
-CGI</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ScriptLog <var>chemin fichier</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>La directive <code class="directive">ScriptLog</code> définit
- le chemin du fichier journal des erreurs du script CGI. Si cette
- directive n'est pas définie, aucune journalisation des erreurs n'est
- effectuée. Si elle est définie, toute erreur CGI sera enregistrée
- dans le fichier dont le nom est fourni en argument. S'il s'agit d'un
- chemin de fichier relatif, il est considéré par rapport au
- répertoire défini par la directive <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.
- </p>
-
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ScriptLog logs/cgi_log</pre>
-</div>
-
- <p>Ce journal sera ouvert par l'utilisateur sous lequel les
- processus enfants s'exécutent, c'est à dire l'utilisateur spécifié
- par la directive du serveur <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code>. Ceci implique que soit le
- répertoire dans lequel se trouve le journal doit être accessible en
- écriture pour cet utilisateur, soit le fichier doit être créé
- manuellement et accessible en écriture pour cet utilisateur. Si vous
- placez le journal du script dans votre répertoire principal des
- journaux, ne modifiez <strong>PAS</strong> les permissions de ce
- dernier afin de le le rendre accessible en écriture par
- l'utilisateur sous lequel les processus enfants s'exécutent.</p>
-
- <p>Notez que l'on ne doit activer la journalisation des scripts
- qu'à des fins de débogage lors de l'écriture de scripts CGI, et non
- de manière permanente sur un serveur en production. Elle n'est pas
- optimisée en ce qui concerne la vitesse et l'efficacité, et peut
- présenter des problèmes de sécurité si on l'utilise dans un cadre
- autre que celui pour lequel elle a été conçue.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="scriptlogbuffer" id="scriptlogbuffer">Directive</a> <a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille maximale des requêtes PUT ou POST qui seront
-enregistrées dans le journal du script</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ScriptLogBuffer <var>octets</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>Cette directive limite la taille du corps de toute
- entité PUT ou POST qui sera enregistrée dans le journal, afin
- de prévenir une croissance trop importante et trop rapide du fichier
- journal due à la réception de corps de requête de grandes tailles.
- Cette directive modifie cette taille maximale, dont la
- valeur par défaut est de 1024 octets.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="scriptloglength" id="scriptloglength">Directive</a> <a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille maximale du fichier journal des scripts
-CGI</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ScriptLogLength <var>octets</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>La directive <code class="directive">ScriptLogLength</code>
- définit la taille maximale du fichier journal des scripts CGI. Comme
- le fichier journal accumule une grande quantité d'informations par
- erreur CGI (tous les en-têtes de la requête, toutes les sorties du
- script), il peut vite atteindre une grande taille. En limitant la
- taille du fichier, cette directive permet d'éviter les problèmes que
- causerait sa croissance sans limites. Lorsque le fichier a atteint
- cette taille maximale, plus aucune information n'y est
- enregistrée.</p>
-
</div>
</div>
<div class="bottomlang">
<li><a href="http://www.ietf.org/rfc/rfc3875">CGI 規格書</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>CGI スクリプトのエラーログファイルの場所</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p><code class="directive">ScriptLog</code> ディレクティブは CGI スクリプトの
+ エラーログファイルを設定します。<code class="directive">ScriptLog</code> が
+ 設定されていないときは、
+ エラーログは作成されません。設定されているときは、CGI
+ のエラーはすべて引数として与えられているファイル名にログされます。
+ 相対パスで指定されているときは、
+ <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>からの相対パスとして
+ 扱われます。</p>
+
+ <div class="example"><h3>例</h3><pre class="prettyprint lang-config">ScriptLog logs/cgi_log</pre>
+</div>
+
+ <p>このログは子プロセスが実行されているユーザとしてオープンされます。
+ <em>すなわち</em>、<code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> ディレクティブで指定された
+ ユーザです。これは、スクリプトログが書かれるディレクトリがそのユーザで
+ 書き込み可能か、スクリプトファイルが手動で作成され、そのユーザで
+ 書き込み可能になっている必要があるということです。スクリプトログを
+ アクセスログなどのためのログディレクトリに書かれるようにしたときは、
+ そのディレクトリを子プロセスを実行しているユーザの権限で
+ 書き込み可能には<strong>しない</strong>ようにしてください。</p>
+
+ <p>スクリプトのログ収集は CGI スクリプトを書くときの
+ デバッグ用の機能として意図されていて、通常のサーバで
+ 常に使用されるようには意図されていないということに注意してください。
+ 速度や効率は最適化されておらず、設計された以外の方法で使用されると
+ セキュリティの問題があるかもしれません。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>スクリプトログに記録される PUT や POST リクエストの内容の上限</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ScriptLogBuffer <em>bytes</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p>大きな本体を受け取ったときにログファイルがすぐに大きくなりすぎる
+ 問題を避けるために、ファイルにログ収集される PUT と POST
+ の本体の大きさは制限されています。デフォルトでは、1024
+ バイトまでがログ収集されますが、
+ このディレクティブはそれを変更することができます。
+ </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>CGI スクリプトのログファイルの大きさの上限</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p><code class="directive">ScriptLogLength</code> は CGI スクリプトのログファイル
+ の大きさを制限するために使用することができます。ログファイルは
+ CGI のエラー毎に大量の情報 (リクエストのすべてのヘッダ、
+ すべての出力)をログしますので、すぐに大きなファイルになります。
+ この大きさの制限がないことによる問題を防ぐために、
+ このディレクティブを使って CGI のログファイルの
+ 最大のファイルサイズを設定することができます。
+ ファイルがこの大きさを超えた場合は、それ以上は書き込まれません。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="env" id="env">CGI 環境変数</a></h2>
<p>サーバは <a href="http://www.ietf.org/rfc/rfc3875">CGI
<p>(スクリプトが標準出力や標準エラーに何も出力しなかった場合は、
%stdout や %stderr はありません)。</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>CGI スクリプトのエラーログファイルの場所</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLog</code> ディレクティブは CGI スクリプトの
- エラーログファイルを設定します。<code class="directive">ScriptLog</code> が
- 設定されていないときは、
- エラーログは作成されません。設定されているときは、CGI
- のエラーはすべて引数として与えられているファイル名にログされます。
- 相対パスで指定されているときは、
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>からの相対パスとして
- 扱われます。</p>
-
- <div class="example"><h3>例</h3><pre class="prettyprint lang-config">ScriptLog logs/cgi_log</pre>
-</div>
-
- <p>このログは子プロセスが実行されているユーザとしてオープンされます。
- <em>すなわち</em>、<code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> ディレクティブで指定された
- ユーザです。これは、スクリプトログが書かれるディレクトリがそのユーザで
- 書き込み可能か、スクリプトファイルが手動で作成され、そのユーザで
- 書き込み可能になっている必要があるということです。スクリプトログを
- アクセスログなどのためのログディレクトリに書かれるようにしたときは、
- そのディレクトリを子プロセスを実行しているユーザの権限で
- 書き込み可能には<strong>しない</strong>ようにしてください。</p>
-
- <p>スクリプトのログ収集は CGI スクリプトを書くときの
- デバッグ用の機能として意図されていて、通常のサーバで
- 常に使用されるようには意図されていないということに注意してください。
- 速度や効率は最適化されておらず、設計された以外の方法で使用されると
- セキュリティの問題があるかもしれません。</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>スクリプトログに記録される PUT や POST リクエストの内容の上限</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ScriptLogBuffer <em>bytes</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>大きな本体を受け取ったときにログファイルがすぐに大きくなりすぎる
- 問題を避けるために、ファイルにログ収集される PUT と POST
- の本体の大きさは制限されています。デフォルトでは、1024
- バイトまでがログ収集されますが、
- このディレクティブはそれを変更することができます。
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>CGI スクリプトのログファイルの大きさの上限</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLogLength</code> は CGI スクリプトのログファイル
- の大きさを制限するために使用することができます。ログファイルは
- CGI のエラー毎に大量の情報 (リクエストのすべてのヘッダ、
- すべての出力)をログしますので、すぐに大きなファイルになります。
- この大きさの制限がないことによる問題を防ぐために、
- このディレクティブを使って CGI のログファイルの
- 最大のファイルサイズを設定することができます。
- ファイルがこの大きさを超えた場合は、それ以上は書き込まれません。</p>
-
</div>
</div>
<div class="bottomlang">
<li><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Ç¥ÁØ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ® ¿À·ù·Î±×ÆÄÀÏÀÇ À§Ä¡</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p><code class="directive">ScriptLog</code> Áö½Ã¾î´Â CGI ½ºÅ©¸³Æ®
+ ¿À·ù·Î±×ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù. <code class="directive">ScriptLog</code>¸¦
+ »ç¿ëÇÏÁö¾ÊÀ¸¸é ¿À·ù·Î±×¸¦ ¸¸µéÁö ¾Ê´Â´Ù. »ç¿ëÇÏ¸é ¾Æ±Ô¸ÕÆ®·Î
+ ÁöÁ¤ÇÑ ÆÄÀÏ¿¡ CGI ¿À·ù¸¦ ±â·ÏÇÑ´Ù. »ó´ë°æ·Î¸¦ ÁöÁ¤Çϸé
+ <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡ »ó´ë°æ·Î·Î
+ ¹Þ¾ÆµéÀδÙ.
+ </p>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ ScriptLog logs/cgi_log
+ </code></p></div>
+
+ <p>ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ, <em>Áï</em> <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> Áö½Ã¾î·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ
+ ±ÇÇÑÀ¸·Î ·Î±×¸¦ ¿¬´Ù. ±×·¡¼ ±× »ç¿ëÀÚ°¡ ½ºÅ©¸³Æ® ·Î±×°¡
+ ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ ÀÖ´øÁö, Á÷Á¢ ¹Ì¸® ÆÄÀÏÀ» ¸¸µé¾î¼
+ ±× »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ» Áà¾ß ÇÑ´Ù. ½ºÅ©¸³Æ® ·Î±×¸¦ ÁÖ ·Î±×
+ µð·ºÅ丮¿¡ µÐ´Ù¸é ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ»
+ ÁÖ±âÀ§ÇØ µð·ºÅ丮 ±ÇÇÑÀ» º¯°æÇÏÁö <strong>¸¶¶ó</strong>.</p>
+
+ <p>½ºÅ©¸³Æ® ·Î±×´Â CGI ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ¶§ µð¹ö±ëÀ» À§ÇÑ
+ ¿ëµµÀÌÁö ¼¹ö¸¦ ½ÇÇàÇÏ´Â µ¿¾È °è¼Ó »ç¿ëÇϱâÀ§ÇÔÀÌ ¾Æ´ÔÀ»
+ ÁÖÀÇÇ϶ó. ¼Óµµ¿Í È¿À²¼º¸é¿¡¼ ÃÖÀûÈ°¡ ¾ÈµÇÀÖ°í, ¼³°èÇÑ
+ ¸ñÀûÀÌ¿ÜÀÇ ¹æ¹ýÀ¸·Î »ç¿ëÇÏ¸é º¸¾È»ó ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ºÅ©¸³Æ® ·Î±×¿¡ ±â·ÏÇÒ PUT ȤÀº POST ¿äûÀÇ ÃÖ´ë·®</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLogBuffer <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p>Å« ³»¿ëÀ» ¹Þ¾Æ¼ ·Î±×ÆÄÀÏÀÌ ³Ê¹« »¡¸® Ä¿Áö´Â Çö»óÀ» ¸·±âÀ§ÇØ
+ ÆÄÀÏ¿¡ ±â·ÏÇÒ PUT ȤÀº POST ³»¿ëÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. ±âº»ÀûÀ¸·Î
+ 1024 ¹ÙÀÌÆ®±îÁö ·Î±×¿¡ ±â·ÏÇÏÁö¸¸, ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
+ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ® ·Î±×ÆÄÀÏÀÇ Å©±â Á¦ÇÑ</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
+</table>
+ <p><code class="directive">ScriptLogLength</code>´Â CGI ½ºÅ©¸³Æ®
+ ·Î±×ÆÄÀÏÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. CGI ¿À·ù°¡ ¹ß»ýÇÒ¶§¸¶´Ù (¸ðµç
+ ¿äû Çì´õ, ¸ðµç ½ºÅ©¸³Æ® Ãâ·Â µî) ¸¹Àº Á¤º¸°¡ ·Î±×¿¡
+ ±â·ÏµÇ±â¶§¹®¿¡ ÆÄÀÏÀÌ ¸Å¿ì Ä¿Áú ¼ö ÀÖ´Ù. ÆÄÀÏÀÌ ¹«ÇÑÈ÷ Ä¿Áö´Â
+ ¹®Á¦¸¦ ¸·±âÀ§ÇØ ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© CGI ·Î±×ÆÄÀÏÀÇ ÃÖ´ë
+ ÆÄÀÏÅ©±â¸¦ ¼³Á¤ÇÑ´Ù. ÆÄÀÏÀÇ Å©±â°¡ ¼³Á¤ÇÑ °ªÀ» ³ÑÀ¸¸é ´õ
+ ÀÌ»ó Á¤º¸¸¦ ±â·ÏÇÏÁö¾Ê´Â´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="env" id="env">CGI ȯ°æº¯¼ö</a></h2>
<p>¼¹ö´Â ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Ç¥ÁØ</a>ÀÌ ¼³¸íÇÏ´Â
<p>(½ºÅ©¸³Æ®°¡ Ç¥ÁØÃâ·ÂÀ̳ª Ç¥ÁØ¿À·ù¿¡ ¾Æ¹« ³»¿ëµµ Ãâ·ÂÇÏÁö
¾Ê¾Ò´Ù¸é %stdout°ú %stderr ºÎºÐÀº »ý·«µÉ ¼ö ÀÖ´Ù).</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ® ¿À·ù·Î±×ÆÄÀÏÀÇ À§Ä¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLog</code> Áö½Ã¾î´Â CGI ½ºÅ©¸³Æ®
- ¿À·ù·Î±×ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù. <code class="directive">ScriptLog</code>¸¦
- »ç¿ëÇÏÁö¾ÊÀ¸¸é ¿À·ù·Î±×¸¦ ¸¸µéÁö ¾Ê´Â´Ù. »ç¿ëÇÏ¸é ¾Æ±Ô¸ÕÆ®·Î
- ÁöÁ¤ÇÑ ÆÄÀÏ¿¡ CGI ¿À·ù¸¦ ±â·ÏÇÑ´Ù. »ó´ë°æ·Î¸¦ ÁöÁ¤Çϸé
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡ »ó´ë°æ·Î·Î
- ¹Þ¾ÆµéÀδÙ.
- </p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- ScriptLog logs/cgi_log
- </code></p></div>
-
- <p>ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ, <em>Áï</em> <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> Áö½Ã¾î·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ
- ±ÇÇÑÀ¸·Î ·Î±×¸¦ ¿¬´Ù. ±×·¡¼ ±× »ç¿ëÀÚ°¡ ½ºÅ©¸³Æ® ·Î±×°¡
- ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ ÀÖ´øÁö, Á÷Á¢ ¹Ì¸® ÆÄÀÏÀ» ¸¸µé¾î¼
- ±× »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ» Áà¾ß ÇÑ´Ù. ½ºÅ©¸³Æ® ·Î±×¸¦ ÁÖ ·Î±×
- µð·ºÅ丮¿¡ µÐ´Ù¸é ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ»
- ÁÖ±âÀ§ÇØ µð·ºÅ丮 ±ÇÇÑÀ» º¯°æÇÏÁö <strong>¸¶¶ó</strong>.</p>
-
- <p>½ºÅ©¸³Æ® ·Î±×´Â CGI ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ¶§ µð¹ö±ëÀ» À§ÇÑ
- ¿ëµµÀÌÁö ¼¹ö¸¦ ½ÇÇàÇÏ´Â µ¿¾È °è¼Ó »ç¿ëÇϱâÀ§ÇÔÀÌ ¾Æ´ÔÀ»
- ÁÖÀÇÇ϶ó. ¼Óµµ¿Í È¿À²¼º¸é¿¡¼ ÃÖÀûÈ°¡ ¾ÈµÇÀÖ°í, ¼³°èÇÑ
- ¸ñÀûÀÌ¿ÜÀÇ ¹æ¹ýÀ¸·Î »ç¿ëÇÏ¸é º¸¾È»ó ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ºÅ©¸³Æ® ·Î±×¿¡ ±â·ÏÇÒ PUT ȤÀº POST ¿äûÀÇ ÃÖ´ë·®</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLogBuffer <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>Å« ³»¿ëÀ» ¹Þ¾Æ¼ ·Î±×ÆÄÀÏÀÌ ³Ê¹« »¡¸® Ä¿Áö´Â Çö»óÀ» ¸·±âÀ§ÇØ
- ÆÄÀÏ¿¡ ±â·ÏÇÒ PUT ȤÀº POST ³»¿ëÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. ±âº»ÀûÀ¸·Î
- 1024 ¹ÙÀÌÆ®±îÁö ·Î±×¿¡ ±â·ÏÇÏÁö¸¸, ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ® ·Î±×ÆÄÀÏÀÇ Å©±â Á¦ÇÑ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLogLength</code>´Â CGI ½ºÅ©¸³Æ®
- ·Î±×ÆÄÀÏÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. CGI ¿À·ù°¡ ¹ß»ýÇÒ¶§¸¶´Ù (¸ðµç
- ¿äû Çì´õ, ¸ðµç ½ºÅ©¸³Æ® Ãâ·Â µî) ¸¹Àº Á¤º¸°¡ ·Î±×¿¡
- ±â·ÏµÇ±â¶§¹®¿¡ ÆÄÀÏÀÌ ¸Å¿ì Ä¿Áú ¼ö ÀÖ´Ù. ÆÄÀÏÀÌ ¹«ÇÑÈ÷ Ä¿Áö´Â
- ¹®Á¦¸¦ ¸·±âÀ§ÇØ ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© CGI ·Î±×ÆÄÀÏÀÇ ÃÖ´ë
- ÆÄÀÏÅ©±â¸¦ ¼³Á¤ÇÑ´Ù. ÆÄÀÏÀÇ Å©±â°¡ ¼³Á¤ÇÑ °ªÀ» ³ÑÀ¸¸é ´õ
- ÀÌ»ó Á¤º¸¸¦ ±â·ÏÇÏÁö¾Ê´Â´Ù.</p>
-
</div>
</div>
<div class="bottomlang">
<li><a href="../suexec.html">Running CGI programs under different
user IDs</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CGIDScriptTimeout" id="CGIDScriptTimeout">CGIDScriptTimeout</a> <a name="cgidscripttimeout" id="cgidscripttimeout">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_cgid.html" title="English"> en </a> |
<li><a href="../suexec.html">Exécution de programmes CGI sous des
utilisateurs différents</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="cgidscripttimeout" id="cgidscripttimeout">Directive</a> <a name="CGIDScriptTimeout" id="CGIDScriptTimeout">CGIDScriptTimeout</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_cgid.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
<li><a href="../suexec.html">CGI プログラムを違うユーザ ID で実行する</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CGIDScriptTimeout" id="CGIDScriptTimeout">CGIDScriptTimeout</a> <a name="cgidscripttimeout" id="cgidscripttimeout">ディレクティブ</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_cgid.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../suexec.html">´Ù¸¥ »ç¿ëÀÚ ID·Î CGI ÇÁ·Î±×·¥
½ÇÇàÇϱâ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CGIDScriptTimeout" id="CGIDScriptTimeout">CGIDScriptTimeout</a> <a name="cgidscripttimeout" id="cgidscripttimeout">Áö½Ã¾î</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cgid.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#problems">Common Problems</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="problems" id="problems">Common Problems</a></h2>
-
- <h3>Invalid character set names</h3>
-
- <p>The character set name parameters of <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code> and
- <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>
- must be acceptable to the translation mechanism used by
- <a class="glossarylink" href="../glossary.html#apr" title="see glossary">APR</a> on the system where
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> is deployed. These character
- set names are not standardized and are usually not the same as
- the corresponding values used in http headers. Currently, APR
- can only use iconv(3), so you can easily test your character set
- names using the iconv(1) program, as follows:</p>
-
- <div class="example"><p><code>
- iconv -f charsetsourceenc-value -t charsetdefault-value
- </code></p></div>
-
-
- <h3>Mismatch between character set of content and translation
- rules</h3>
-
- <p>If the translation rules don't make sense for the content,
- translation can fail in various ways, including:</p>
-
- <ul>
- <li>The translation mechanism may return a bad return code,
- and the connection will be aborted.</li>
-
- <li>The translation mechanism may silently place special
- characters (e.g., question marks) in the output buffer when
- it cannot translate the input buffer.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CharsetDefault" id="CharsetDefault">CharsetDefault</a> <a name="charsetdefault" id="charsetdefault">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Charset to translate into</td></tr>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="problems" id="problems">Common Problems</a></h2>
+
+ <h3>Invalid character set names</h3>
+
+ <p>The character set name parameters of <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code> and
+ <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>
+ must be acceptable to the translation mechanism used by
+ <a class="glossarylink" href="../glossary.html#apr" title="see glossary">APR</a> on the system where
+ <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> is deployed. These character
+ set names are not standardized and are usually not the same as
+ the corresponding values used in http headers. Currently, APR
+ can only use iconv(3), so you can easily test your character set
+ names using the iconv(1) program, as follows:</p>
+
+ <div class="example"><p><code>
+ iconv -f charsetsourceenc-value -t charsetdefault-value
+ </code></p></div>
+
+
+ <h3>Mismatch between character set of content and translation
+ rules</h3>
+
+ <p>If the translation rules don't make sense for the content,
+ translation can fail in various ways, including:</p>
+
+ <ul>
+ <li>The translation mechanism may return a bad return code,
+ and the connection will be aborted.</li>
+
+ <li>The translation mechanism may silently place special
+ characters (e.g., question marks) in the output buffer when
+ it cannot translate the input buffer.</li>
+ </ul>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#problems">Problèmes courants</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="problems" id="problems">Problèmes courants</a></h2>
-
- <h3>Noms de jeux de caractères non valides</h3>
-
- <p>Les noms des jeux de caractères passés en paramètres aux
- directives <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code> et
- <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>
- doivent être reconnus par le mécanisme de traduction utilisé par
- <a class="glossarylink" href="../glossary.html#apr" title="voir glossaire">APR</a> sur le système où
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> est utilisé. Ces noms de jeux de
- caractères ne sont pas standardisés, et sont en général différents
- des valeurs qui leur correspondent dans les en-têtes HTTP.
- Actuellement, APR ne peut utiliser que iconv(3) ; vous pouvez donc
- tester facilement vos noms de jeux de caractères en utilisant le
- programme iconv(1), de la manière suivante :</p>
-
- <div class="example"><p><code>
- iconv -f valeur-charsetsourceenc -t valeur-charsetdefault
- </code></p></div>
-
-
- <h3>Incompatibilité entre le jeu de caractères du
- contenu et les règles de traduction</h3>
-
- <p>Si les règles de traduction ne peuvent s'appliquer au contenu,
- la traduction peut échouer avec des conséquences diverses, comme
- :</p>
-
- <ul>
- <li>Le mécanisme de traduction peut renvoyer un mauvais code de
- retour, et la connexion sera interrompue.</li>
-
- <li>Le mécanisme de traduction peut insérer silencieusement des
- caractères spéciaux (par exemple des points d'interrogation) dans
- le tampon de sortie lorsqu'il n'est pas en mesure de traduire le
- tampon d'entrée.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="charsetdefault" id="charsetdefault">Directive</a> <a name="CharsetDefault" id="CharsetDefault">CharsetDefault</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Jeu de caractère vers lequel la traduction doit
valide du point de vue du système.
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="problems" id="problems">Problèmes courants</a></h2>
+
+ <h3>Noms de jeux de caractères non valides</h3>
+
+ <p>Les noms des jeux de caractères passés en paramètres aux
+ directives <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code> et
+ <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>
+ doivent être reconnus par le mécanisme de traduction utilisé par
+ <a class="glossarylink" href="../glossary.html#apr" title="voir glossaire">APR</a> sur le système où
+ <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> est utilisé. Ces noms de jeux de
+ caractères ne sont pas standardisés, et sont en général différents
+ des valeurs qui leur correspondent dans les en-têtes HTTP.
+ Actuellement, APR ne peut utiliser que iconv(3) ; vous pouvez donc
+ tester facilement vos noms de jeux de caractères en utilisant le
+ programme iconv(1), de la manière suivante :</p>
+
+ <div class="example"><p><code>
+ iconv -f valeur-charsetsourceenc -t valeur-charsetdefault
+ </code></p></div>
+
+
+ <h3>Incompatibilité entre le jeu de caractères du
+ contenu et les règles de traduction</h3>
+
+ <p>Si les règles de traduction ne peuvent s'appliquer au contenu,
+ la traduction peut échouer avec des conséquences diverses, comme
+ :</p>
+
+ <ul>
+ <li>Le mécanisme de traduction peut renvoyer un mauvais code de
+ retour, et la connexion sera interrompue.</li>
+
+ <li>Le mécanisme de traduction peut insérer silencieusement des
+ caractères spéciaux (par exemple des points d'interrogation) dans
+ le tampon de sortie lorsqu'il n'est pas en mesure de traduire le
+ tampon d'entrée.</li>
+ </ul>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#problems">ÀϹÝÀûÀÎ ¹®Á¦Á¡</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="problems" id="problems">ÀϹÝÀûÀÎ ¹®Á¦Á¡</a></h2>
-
- <h3>À߸øµÈ ¹®ÀÚÁýÇÕ À̸§</h3>
-
- <p><code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ
- ARP ¹ø¿ª±â´ÉÀÌ <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code>¿Í
- <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>ÀÇ
- ÆĶó¹ÌÅÍÀÎ ¹®ÀÚÁýÇÕ À̸§À» ó¸®ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¹®ÀÚÁýÇÕ
- À̸§Àº Ç¥ÁØȵÇÁö ¾Ê¾Ò°í, http Çì´õ¿¡ »ç¿ëÇÏ´Â °ª°ú Ç×»ó
- °°Áö´Â ¾Ê´Ù. ÇöÀç APRÀº iconv(3)¸¸À» »ç¿ëÇϱ⶧¹®¿¡,
- ´ÙÀ½°ú °°ÀÌ iconv(1) ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ƯÁ¤ ¹®ÀÚÁýÇÕ
- À̸§À» »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- iconv -f charsetsourceenc-value -t charsetdefault-value
- </code></p></div>
-
-
- <h3>³»¿ë°ú º¯È¯±ÔÄ¢ÀÇ ¹®ÀÚÁýÇÕÀÌ ¼·Î ´Ù¸§</h3>
-
- <p>º¯È¯±ÔÄ¢ÀÌ »óȲ¿¡ ¸ÂÁö¾ÊÀ¸¸é ´ÙÀ½°ú °°Àº ¿©·¯ ¹æ½ÄÀ¸·Î
- º¯È¯ÀÌ ½ÇÆÐÇÒ ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li>º¯È¯±â´ÉÀÌ ½ÇÆÐ ¹ÝȯÄڵ带 ¹ÝȯÇÏ°í ¿¬°áÀÌ ²÷¾îÁú
- ¼ö ÀÖ´Ù.</li>
-
- <li>ÀԷ¹öÆÛ¸¦ º¯È¯ÇÏÁö ¸øÇÒ¶§ Ãâ·Â¹öÆÛ¿¡ ´ë½Å Ưº°ÇÑ
- ¹®ÀÚ¸¦ (¿¹, ¹°À½Ç¥) ÀûÀ» ¼ö ÀÖ´Ù.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CharsetDefault" id="CharsetDefault">CharsetDefault</a> <a name="charsetdefault" id="charsetdefault">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>º¯È¯ÇÒ ¹®ÀÚÁýÇÕ</td></tr>
<p>Solaris 8ÀÇ iconv°¡ ÀÌ ¿¹Á¦ÀÇ ¹®ÀÚÁýÇÕÀ» Áö¿øÇÑ´Ù.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="problems" id="problems">ÀϹÝÀûÀÎ ¹®Á¦Á¡</a></h2>
+
+ <h3>À߸øµÈ ¹®ÀÚÁýÇÕ À̸§</h3>
+
+ <p><code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ
+ ARP ¹ø¿ª±â´ÉÀÌ <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code>¿Í
+ <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>ÀÇ
+ ÆĶó¹ÌÅÍÀÎ ¹®ÀÚÁýÇÕ À̸§À» ó¸®ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¹®ÀÚÁýÇÕ
+ À̸§Àº Ç¥ÁØȵÇÁö ¾Ê¾Ò°í, http Çì´õ¿¡ »ç¿ëÇÏ´Â °ª°ú Ç×»ó
+ °°Áö´Â ¾Ê´Ù. ÇöÀç APRÀº iconv(3)¸¸À» »ç¿ëÇϱ⶧¹®¿¡,
+ ´ÙÀ½°ú °°ÀÌ iconv(1) ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ƯÁ¤ ¹®ÀÚÁýÇÕ
+ À̸§À» »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Ù:</p>
+
+ <div class="example"><p><code>
+ iconv -f charsetsourceenc-value -t charsetdefault-value
+ </code></p></div>
+
+
+ <h3>³»¿ë°ú º¯È¯±ÔÄ¢ÀÇ ¹®ÀÚÁýÇÕÀÌ ¼·Î ´Ù¸§</h3>
+
+ <p>º¯È¯±ÔÄ¢ÀÌ »óȲ¿¡ ¸ÂÁö¾ÊÀ¸¸é ´ÙÀ½°ú °°Àº ¿©·¯ ¹æ½ÄÀ¸·Î
+ º¯È¯ÀÌ ½ÇÆÐÇÒ ¼ö ÀÖ´Ù:</p>
+
+ <ul>
+ <li>º¯È¯±â´ÉÀÌ ½ÇÆÐ ¹ÝȯÄڵ带 ¹ÝȯÇÏ°í ¿¬°áÀÌ ²÷¾îÁú
+ ¼ö ÀÖ´Ù.</li>
+
+ <li>ÀԷ¹öÆÛ¸¦ º¯È¯ÇÏÁö ¸øÇÒ¶§ Ãâ·Â¹öÆÛ¿¡ ´ë½Å Ưº°ÇÑ
+ ¹®ÀÚ¸¦ (¿¹, ¹°À½Ç¥) ÀûÀ» ¼ö ÀÖ´Ù.</li>
+ </ul>
+
</div>
</div>
<div class="bottomlang">
<li><a href="http://www.webdav.org">WebDAV Resources</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable WebDAV HTTP methods</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Dav Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>Use the <code class="directive">Dav</code> directive to enable the
+ WebDAV HTTP methods for the given container:</p>
+
+ <pre class="prettyprint lang-config"><Location "/foo">
+ Dav On
+</Location></pre>
+
+
+ <p>The value <code>On</code> is actually an alias for the default
+ provider <code>filesystem</code> which is served by the <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> module. Note, that once you have DAV enabled
+ for some location, it <em>cannot</em> be disabled for sublocations.
+ For a complete configuration example have a look at the <a href="#example">section above</a>.</p>
+
+ <div class="warning">
+ Do not enable WebDAV until you have secured your server. Otherwise
+ everyone will be able to distribute files on your system.
+ </div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allow PROPFIND, Depth: Infinity requests</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DavDepthInfinity off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>Use the <code class="directive">DavDepthInfinity</code> directive to
+ allow the processing of <code>PROPFIND</code> requests containing the
+ header 'Depth: Infinity'. Because this type of request could constitute
+ a denial-of-service attack, by default it is not allowed.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Minimum amount of time the server holds a lock on
+a DAV resource</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DavMinTimeout 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>When a client requests a DAV resource lock, it can also
+ specify a time when the lock will be automatically removed by
+ the server. This value is only a request, and the server can
+ ignore it or inform the client of an arbitrary value.</p>
+
+ <p>Use the <code class="directive">DavMinTimeout</code> directive to specify, in
+ seconds, the minimum lock timeout to return to a client.
+ Microsoft Web Folders defaults to a timeout of 120 seconds; the
+ <code class="directive">DavMinTimeout</code> can override this to a higher value
+ (like 600 seconds) to reduce the chance of the client losing
+ the lock due to network latency.</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config"><Location "/MSWord">
+ DavMinTimeout 600
+</Location></pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="example" id="example">Enabling WebDAV</a></h2>
<p>To enable <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>, add the following to a
used to access the output of the PHP scripts, and
<code>http://example.com/php-source</code> can be used with a DAV
client to manipulate them.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable WebDAV HTTP methods</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Dav Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Use the <code class="directive">Dav</code> directive to enable the
- WebDAV HTTP methods for the given container:</p>
-
- <pre class="prettyprint lang-config"><Location "/foo">
- Dav On
-</Location></pre>
-
-
- <p>The value <code>On</code> is actually an alias for the default
- provider <code>filesystem</code> which is served by the <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> module. Note, that once you have DAV enabled
- for some location, it <em>cannot</em> be disabled for sublocations.
- For a complete configuration example have a look at the <a href="#example">section above</a>.</p>
-
- <div class="warning">
- Do not enable WebDAV until you have secured your server. Otherwise
- everyone will be able to distribute files on your system.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allow PROPFIND, Depth: Infinity requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DavDepthInfinity off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Use the <code class="directive">DavDepthInfinity</code> directive to
- allow the processing of <code>PROPFIND</code> requests containing the
- header 'Depth: Infinity'. Because this type of request could constitute
- a denial-of-service attack, by default it is not allowed.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Minimum amount of time the server holds a lock on
-a DAV resource</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DavMinTimeout 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>When a client requests a DAV resource lock, it can also
- specify a time when the lock will be automatically removed by
- the server. This value is only a request, and the server can
- ignore it or inform the client of an arbitrary value.</p>
-
- <p>Use the <code class="directive">DavMinTimeout</code> directive to specify, in
- seconds, the minimum lock timeout to return to a client.
- Microsoft Web Folders defaults to a timeout of 120 seconds; the
- <code class="directive">DavMinTimeout</code> can override this to a higher value
- (like 600 seconds) to reduce the chance of the client losing
- the lock due to network latency.</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config"><Location "/MSWord">
- DavMinTimeout 600
-</Location></pre>
-</div>
-
</div>
</div>
<div class="bottomlang">
<li><a href="http://www.webdav.org">Ressources WebDAV</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="dav" id="dav">Directive</a> <a name="Dav" id="Dav">Dav</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active les méthodes HTTP WebDAV</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Dav On|Off|<var>nom fournisseur</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Dav Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>La directive <code class="directive">Dav</code> active les
+ méthodes HTTP WebDAV pour le conteneur condidéré :</p>
+
+ <pre class="prettyprint lang-config"><Location /foo>
+ Dav On
+</Location></pre>
+
+
+ <p>La valeur <code>On</code> est en fait un alias vers le
+ fournisseur par défaut <code>filesystem</code> implémenté par le
+ module <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>. Notez que lorsque DAV est activé
+ pour un conteneur, on <em>ne peut pas</em> le désactiver pour ses
+ sous-conteneurs. Pour un exemple de configuration complet,
+ reportez-vous à la <a href="#example">section précédente</a>.</p>
+
+ <div class="warning">
+ N'activez pas WebDAV tant que votre serveur n'est pas sécurisé. Si
+ vous passez outre cette recommandation, tout le monde pourra
+ enregistrer des fichiers sur votre système.
+ </div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="davdepthinfinity" id="davdepthinfinity">Directive</a> <a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Autorise les requêtes PROPFIND avec en-tête Depth:
+Infinity</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>DavDepthInfinity off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>La directive <code class="directive">DavDepthInfinity</code>
+ autorise le traitement des requêtes <code>PROPFIND</code>
+ contenant l'en-tête Depth: Infinity. Par défaut, ce type de requête
+ n'est pas autorisé, car il peut favoriser les attaques de type Déni
+ de service.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="davmintimeout" id="davmintimeout">Directive</a> <a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée minimale pendant laquelle le serveur maintient un
+verrou sur une ressource DAV</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>DavMinTimeout <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>DavMinTimeout 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>Lorsqu'un client demande le verrouillage d'une ressource DAV, il
+ peut aussi spécifier une durée au bout de laquelle le verrou sera
+ automatiquement supprimé par le serveur. Cette valeur ne constitue
+ qu'une requête, et le serveur peut l'ignorer ou informer le client
+ qu'il va utiliser une valeur arbitraire.</p>
+
+ <p>La directive <code class="directive">DavMinTimeout</code>
+ spécifie, en secondes, la durée minimale de verrouillage à renvoyer
+ au client. Les Répertoires Web de Microsoft présentent une durée par
+ défaut de 120 secondes ; la directive
+ <code class="directive">DavMinTimeout</code> permet de définir une valeur
+ supérieure (par exemple 600 secondes), afin de réduire les risques
+ de perte du verrou par le client suite à une surcharge du
+ réseau.</p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Location /MSWord>
+ DavMinTimeout 600
+</Location></pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="example" id="example">Activation de WebDAV</a></h2>
<p>Pour activer le module <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>, ajoutez la ligne
l'exécution des scripts PHP, et
<code>http://example.com/php-source</code> pour les manipuler avec
DAV.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="dav" id="dav">Directive</a> <a name="Dav" id="Dav">Dav</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active les méthodes HTTP WebDAV</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Dav On|Off|<var>nom fournisseur</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Dav Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>La directive <code class="directive">Dav</code> active les
- méthodes HTTP WebDAV pour le conteneur condidéré :</p>
-
- <pre class="prettyprint lang-config"><Location /foo>
- Dav On
-</Location></pre>
-
-
- <p>La valeur <code>On</code> est en fait un alias vers le
- fournisseur par défaut <code>filesystem</code> implémenté par le
- module <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>. Notez que lorsque DAV est activé
- pour un conteneur, on <em>ne peut pas</em> le désactiver pour ses
- sous-conteneurs. Pour un exemple de configuration complet,
- reportez-vous à la <a href="#example">section précédente</a>.</p>
-
- <div class="warning">
- N'activez pas WebDAV tant que votre serveur n'est pas sécurisé. Si
- vous passez outre cette recommandation, tout le monde pourra
- enregistrer des fichiers sur votre système.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="davdepthinfinity" id="davdepthinfinity">Directive</a> <a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Autorise les requêtes PROPFIND avec en-tête Depth:
-Infinity</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>DavDepthInfinity off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>La directive <code class="directive">DavDepthInfinity</code>
- autorise le traitement des requêtes <code>PROPFIND</code>
- contenant l'en-tête Depth: Infinity. Par défaut, ce type de requête
- n'est pas autorisé, car il peut favoriser les attaques de type Déni
- de service.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="davmintimeout" id="davmintimeout">Directive</a> <a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée minimale pendant laquelle le serveur maintient un
-verrou sur une ressource DAV</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>DavMinTimeout <var>secondes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>DavMinTimeout 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Lorsqu'un client demande le verrouillage d'une ressource DAV, il
- peut aussi spécifier une durée au bout de laquelle le verrou sera
- automatiquement supprimé par le serveur. Cette valeur ne constitue
- qu'une requête, et le serveur peut l'ignorer ou informer le client
- qu'il va utiliser une valeur arbitraire.</p>
-
- <p>La directive <code class="directive">DavMinTimeout</code>
- spécifie, en secondes, la durée minimale de verrouillage à renvoyer
- au client. Les Répertoires Web de Microsoft présentent une durée par
- défaut de 120 secondes ; la directive
- <code class="directive">DavMinTimeout</code> permet de définir une valeur
- supérieure (par exemple 600 secondes), afin de réduire les risques
- de perte du verrou par le client suite à une surcharge du
- réseau.</p>
-
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config"><Location /MSWord>
- DavMinTimeout 600
-</Location></pre>
-</div>
-
</div>
</div>
<div class="bottomlang">
<li><a href="http://www.webdav.org">WebDAV Resources</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>WebDAV HTTP メソッドを有効にします</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>Dav Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>与えられたコンテナで WebDAV HTTP メソッドが使えるようにするには
+ 次のようにします。</p>
+
+ <pre class="prettyprint lang-config"><Location /foo>
+ Dav On
+</Location></pre>
+
+
+ <p><code>On</code> という指定は実際には <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
+ で提供されているデフォルトのプロバイダ、<code>filesystem</code>
+ へのエイリアスになっています。一度あるロケーションで DAV
+ を有効にした後は、そのサブロケーションで<em>無効化することはできない</em>
+ ということに注意してください。完全な設定例は<a href="#example">上記のセクション</a> をご覧下さい。</p>
+
+ <div class="warning">
+ サーバのセキュリティが確保できるまで WebDAV を有効にしないでください。
+ そうしなければ誰でもそのサーバでファイルを配布することができるように
+ なってしまいます。
+ </div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>PROPFIND, Depth: Infinity リクエストを許可します</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DavDepthInfinity off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>'Depth: Infinity' を含んでいる
+ <code>PROPFIND</code> リクエストを処理できるようにするには、
+ <code class="directive">DavDepthInfinity</code>
+ ディレクティブを使います。このタイプのリクエストは
+ denial-of-service アタックとなりうるので、
+ デフォルトでは許可されていません。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>サーバが DAV リソースのロックを維持する最小時間です。
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DavMinTimeout 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>クライアントが DAV リソースロックを要求した場合、
+ ロックがサーバによって自動的に解除されるまでの時間を
+ 同時に指定することができます。この値は単なるリクエストであって、
+ サーバはこれを無視することもできますし、
+ 任意の値をクライアントに通知することもできます。</p>
+
+ <p>クライアントに戻すロックタイムアウトの最小時間を、
+ 秒で、指定するために <code class="directive">DavMinTimeout</code>
+ ディレクティブを使います。
+ マイクロソフトのウェブフォルダのデフォルトでは 120 秒ですが;
+ ネットワークの遅延のせいでクライアントがロックを失うのを減らすために、
+ <code class="directive">DavMinTimeout</code> を使って
+ これをもっと大きな値 (例えば 600 秒) に上書きできます。</p>
+
+ <div class="example"><h3>例</h3><pre class="prettyprint lang-config"><Location /MSWord>
+ DavMinTimeout 600
+</Location></pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="example" id="example">Enabling WebDAV</a></h2>
<p>mod_dav を有効にするには、<code>httpd.conf</code>
出力をアクセスするために使うことができ、
<code>http://example.com/php-source</code> を DAV クライアントによる
が操作のために使うことができます。</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>WebDAV HTTP メソッドを有効にします</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>Dav Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_dav</td></tr>
-</table>
- <p>与えられたコンテナで WebDAV HTTP メソッドが使えるようにするには
- 次のようにします。</p>
-
- <pre class="prettyprint lang-config"><Location /foo>
- Dav On
-</Location></pre>
-
-
- <p><code>On</code> という指定は実際には <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
- で提供されているデフォルトのプロバイダ、<code>filesystem</code>
- へのエイリアスになっています。一度あるロケーションで DAV
- を有効にした後は、そのサブロケーションで<em>無効化することはできない</em>
- ということに注意してください。完全な設定例は<a href="#example">上記のセクション</a> をご覧下さい。</p>
-
- <div class="warning">
- サーバのセキュリティが確保できるまで WebDAV を有効にしないでください。
- そうしなければ誰でもそのサーバでファイルを配布することができるように
- なってしまいます。
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>PROPFIND, Depth: Infinity リクエストを許可します</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DavDepthInfinity off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_dav</td></tr>
-</table>
- <p>'Depth: Infinity' を含んでいる
- <code>PROPFIND</code> リクエストを処理できるようにするには、
- <code class="directive">DavDepthInfinity</code>
- ディレクティブを使います。このタイプのリクエストは
- denial-of-service アタックとなりうるので、
- デフォルトでは許可されていません。</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>サーバが DAV リソースのロックを維持する最小時間です。
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DavMinTimeout 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_dav</td></tr>
-</table>
- <p>クライアントが DAV リソースロックを要求した場合、
- ロックがサーバによって自動的に解除されるまでの時間を
- 同時に指定することができます。この値は単なるリクエストであって、
- サーバはこれを無視することもできますし、
- 任意の値をクライアントに通知することもできます。</p>
-
- <p>クライアントに戻すロックタイムアウトの最小時間を、
- 秒で、指定するために <code class="directive">DavMinTimeout</code>
- ディレクティブを使います。
- マイクロソフトのウェブフォルダのデフォルトでは 120 秒ですが;
- ネットワークの遅延のせいでクライアントがロックを失うのを減らすために、
- <code class="directive">DavMinTimeout</code> を使って
- これをもっと大きな値 (例えば 600 秒) に上書きできます。</p>
-
- <div class="example"><h3>例</h3><pre class="prettyprint lang-config"><Location /MSWord>
- DavMinTimeout 600
-</Location></pre>
-</div>
-
</div>
</div>
<div class="bottomlang">
<li><a href="http://www.webdav.org">WebDAV Á¤º¸</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>WebDAV HTTP ¸Þ½áµå¸¦ ½ÃÀÛÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Dav Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>ÁöÁ¤ÇÑ À§Ä¡¿¡¼ WebDAV HTTP ¸Þ½áµå¸¦ »ç¿ëÇÏ·Á¸é
+ <code class="directive">Dav</code> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù:</p>
+
+ <div class="example"><p><code>
+ <Location /foo><br />
+ <span class="indent">
+ Dav On<br />
+ </span>
+ </Location>
+ </code></p></div>
+
+ <p><code>On</code> °ªÀº ½ÇÁ¦·Î <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
+ ¸ðµâÀÌ Á¦°øÇÏ´Â ±âº» Á¦°øÀÚÀÎ <code>filesystem</code>ÀÇ
+ º°ÄªÀÌ´Ù. ¾î¶² À§Ä¡¿¡¼ DAV¸¦ ½ÃÀÛÇϸé ÇÏÀ§°ø°£¿¡¼ DAV¸¦
+ »ç¿ë¾ÈÇϵµ·Ï ¼³Á¤ÇÒ ¼ö <em>¾øÀ½À»</em> ÁÖÀÇÇ϶ó. ¿ÏÀüÇÑ
+ ¼³Á¤¿¹´Â <a href="#example">À§ÀÇ Àý</a>À» Âü°íÇ϶ó.</p>
+
+ <div class="warning">
+ ¼¹ö¸¦ ¾ÈÀüÇÏ°Ô ±¸¼ºÇÒ¶§±îÁö WebDAVÀ» »ç¿ëÇÏÁö ¸¶¶ó. ±×·¸Áö
+ ¾ÊÀ¸¸é ´©±¸¶óµµ ¼¹ö¸¦ ÅëÇØ ÆÄÀÏÀ» ºÐ¹èÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
+ </div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>PROPFINDÀÇ Depth: Infinity ¿äûÀ» Çã°¡ÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DavDepthInfinity off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
+</table>
+ <p><code class="directive">DavDepthInfinity</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
+ 'Depth: Infinity' Çì´õ¸¦ °¡Áø <code>PROPFIND</code> ¿äûÀ»
+ Çã°¡ÇÑ´Ù. ÀÌ·± ¿äûÀ» »ç¿ëÇÏ¿© ¼ºñ½º°ÅºÎ °ø°ÝÀÌ °¡´ÉÇϱâ
+ ¶§¹®¿¡ ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö ¾Ê´Â´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼¹ö°¡ DAV ÀÚ¿ø¿¡ ´ëÇØ À¯ÁöÇÒ Àá±ÝÀÇ Ãּҽð£</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DavMinTimeout 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
+</table>
+ <p>Ŭ¶óÀ̾ðÆ®°¡ DAV ÀÚ¿ø¿¡ Àá±Ý(lock)À» ¿äûÇÒ¶§ ¼¹ö°¡
+ ¾Ë¾Æ¼ Àá±ÝÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Â ½Ã°£À» °°ÀÌ ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. ÀÌ °ªÀº
+ ´ÜÁö ¿äûÀÏ»ÓÀ̸ç, ¼¹ö´Â Ŭ¶óÀ̾ðÆ®°¡ ¿äûÇÑ °ªÀ» ¹«½ÃÇÏ°í
+ Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÓÀÇÀÇ ½Ã°£À» ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</p>
+
+ <p><code class="directive">DavMinTimeout</code> Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô
+ º¸³¾ ÃÖ¼Ò Àá±Ý ½Ã°£À» (ÃÊ´ÜÀ§) ÁöÁ¤ÇÑ´Ù. Microsoft Web Folders´Â
+ ±âº»°ªÀ¸·Î 120 Ãʸ¦ »ç¿ëÇÑ´Ù. <code class="directive">DavMinTimeout</code>¿¡
+ (600 ÃÊ¿Í °°ÀÌ) ´õ ³ôÀº °ªÀ» »ç¿ëÇϸé Ŭ¶óÀ̾ðÆ®°¡ ³×Æ®¿÷
+ Áö¿¬¶§¹®¿¡ Àá±ÝÀ» ÀҰԵǴ °æ¿ì¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.</p>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ <Location /MSWord><br />
+ <span class="indent">
+ DavMinTimeout 600<br />
+ </span>
+ </Location>
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="example" id="example">WebDAV »ç¿ëÇϱâ</a></h2>
<p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>¸¦ »ç¿ëÇÏ·Á¸é <code>httpd.conf</code>
<code>http://example.com/php-source</code>·Î´Â DAV Ŭ¶óÀ̾ðÆ®¿¡¼
½ºÅ©¸³Æ®¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>WebDAV HTTP ¸Þ½áµå¸¦ ½ÃÀÛÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Dav Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
-</table>
- <p>ÁöÁ¤ÇÑ À§Ä¡¿¡¼ WebDAV HTTP ¸Þ½áµå¸¦ »ç¿ëÇÏ·Á¸é
- <code class="directive">Dav</code> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- <Location /foo><br />
- <span class="indent">
- Dav On<br />
- </span>
- </Location>
- </code></p></div>
-
- <p><code>On</code> °ªÀº ½ÇÁ¦·Î <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
- ¸ðµâÀÌ Á¦°øÇÏ´Â ±âº» Á¦°øÀÚÀÎ <code>filesystem</code>ÀÇ
- º°ÄªÀÌ´Ù. ¾î¶² À§Ä¡¿¡¼ DAV¸¦ ½ÃÀÛÇϸé ÇÏÀ§°ø°£¿¡¼ DAV¸¦
- »ç¿ë¾ÈÇϵµ·Ï ¼³Á¤ÇÒ ¼ö <em>¾øÀ½À»</em> ÁÖÀÇÇ϶ó. ¿ÏÀüÇÑ
- ¼³Á¤¿¹´Â <a href="#example">À§ÀÇ Àý</a>À» Âü°íÇ϶ó.</p>
-
- <div class="warning">
- ¼¹ö¸¦ ¾ÈÀüÇÏ°Ô ±¸¼ºÇÒ¶§±îÁö WebDAVÀ» »ç¿ëÇÏÁö ¸¶¶ó. ±×·¸Áö
- ¾ÊÀ¸¸é ´©±¸¶óµµ ¼¹ö¸¦ ÅëÇØ ÆÄÀÏÀ» ºÐ¹èÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>PROPFINDÀÇ Depth: Infinity ¿äûÀ» Çã°¡ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DavDepthInfinity off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
-</table>
- <p><code class="directive">DavDepthInfinity</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- 'Depth: Infinity' Çì´õ¸¦ °¡Áø <code>PROPFIND</code> ¿äûÀ»
- Çã°¡ÇÑ´Ù. ÀÌ·± ¿äûÀ» »ç¿ëÇÏ¿© ¼ºñ½º°ÅºÎ °ø°ÝÀÌ °¡´ÉÇϱâ
- ¶§¹®¿¡ ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼¹ö°¡ DAV ÀÚ¿ø¿¡ ´ëÇØ À¯ÁöÇÒ Àá±ÝÀÇ Ãּҽð£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DavMinTimeout 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Ŭ¶óÀ̾ðÆ®°¡ DAV ÀÚ¿ø¿¡ Àá±Ý(lock)À» ¿äûÇÒ¶§ ¼¹ö°¡
- ¾Ë¾Æ¼ Àá±ÝÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Â ½Ã°£À» °°ÀÌ ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. ÀÌ °ªÀº
- ´ÜÁö ¿äûÀÏ»ÓÀ̸ç, ¼¹ö´Â Ŭ¶óÀ̾ðÆ®°¡ ¿äûÇÑ °ªÀ» ¹«½ÃÇÏ°í
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÓÀÇÀÇ ½Ã°£À» ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</p>
-
- <p><code class="directive">DavMinTimeout</code> Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô
- º¸³¾ ÃÖ¼Ò Àá±Ý ½Ã°£À» (ÃÊ´ÜÀ§) ÁöÁ¤ÇÑ´Ù. Microsoft Web Folders´Â
- ±âº»°ªÀ¸·Î 120 Ãʸ¦ »ç¿ëÇÑ´Ù. <code class="directive">DavMinTimeout</code>¿¡
- (600 ÃÊ¿Í °°ÀÌ) ´õ ³ôÀº °ªÀ» »ç¿ëÇϸé Ŭ¶óÀ̾ðÆ®°¡ ³×Æ®¿÷
- Áö¿¬¶§¹®¿¡ Àá±ÝÀ» ÀҰԵǴ °æ¿ì¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- <Location /MSWord><br />
- <span class="indent">
- DavMinTimeout 600<br />
- </span>
- </Location>
- </code></p></div>
-
-</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dav.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DavLockDB" id="DavLockDB">DavLockDB</a> <a name="davlockdb" id="davlockdb">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_dav_fs.html" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="davlockdb" id="davlockdb">Directive</a> <a name="DavLockDB" id="DavLockDB">DavLockDB</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_dav_fs.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DavLockDB" id="DavLockDB">DavLockDB</a> <a name="davlockdb" id="davlockdb">ディレクティブ</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_dav_fs.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DavLockDB" id="DavLockDB">DavLockDB</a> <a name="davlockdb" id="davlockdb">Áö½Ã¾î</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dav_fs.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DavGenericLockDB" id="DavGenericLockDB">DavGenericLockDB</a> <a name="davgenericlockdb" id="davgenericlockdb">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_dav_lock.html" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="davgenericlockdb" id="davgenericlockdb">Directive</a> <a name="DavGenericLockDB" id="DavGenericLockDB">DavGenericLockDB</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_dav_lock.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DavGenericLockDB" id="DavGenericLockDB">DavGenericLockDB</a> <a name="davgenericlockdb" id="davgenericlockdb">ディレクティブ</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_dav_lock.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../misc/password_encryptions.html">Password Formats</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pooling" id="pooling">Connection Pooling</a></h2>
- <p>This module manages database connections, in a manner
- optimised for the platform. On non-threaded platforms,
- it provides a persistent connection in the manner of
- classic LAMP (Linux, Apache, Mysql, Perl/PHP/Python).
- On threaded platform, it provides an altogether more
- scalable and efficient <em>connection pool</em>, as
- described in <a href="http://www.apachetutor.org/dev/reslist">this
- article at ApacheTutor</a>. Note that <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>
- supersedes the modules presented in that article.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="API" id="API">Apache DBD API</a></h2>
- <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> exports five functions for other modules
- to use. The API is as follows:</p>
-
-<pre class="prettyprint lang-c">typedef struct {
- apr_dbd_t *handle;
- apr_dbd_driver_t *driver;
- apr_hash_t *prepared;
-} ap_dbd_t;
-
-/* Export functions to access the database */
-
-/* acquire a connection that MUST be explicitly closed.
- * Returns NULL on error
- */
-AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
-
-/* release a connection acquired with ap_dbd_open */
-AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
-
-/* acquire a connection that will have the lifetime of a request
- * and MUST NOT be explicitly closed. Return NULL on error.
- * This is the preferred function for most applications.
- */
-AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
-
-/* acquire a connection that will have the lifetime of a connection
- * and MUST NOT be explicitly closed. Return NULL on error.
- */
-AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
-
-/* Prepare a statement for use by a client module */
-AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
-
-/* Also export them as optional functions for modules that prefer it */
-APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
-APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
-APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
-APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
-APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*));</pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="prepared" id="prepared">SQL Prepared Statements</a></h2>
- <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> supports SQL prepared statements on behalf
- of modules that may wish to use them. Each prepared statement
- must be assigned a name (label), and they are stored in a hash:
- the <code>prepared</code> field of an <code>ap_dbd_t</code>.
- Hash entries are of type <code>apr_dbd_prepared_t</code>
- and can be used in any of the apr_dbd prepared statement
- SQL query or select commands.</p>
-
- <p>It is up to dbd user modules to use the prepared statements
- and document what statements can be specified in httpd.conf,
- or to provide their own directives and use <code>ap_dbd_prepare</code>.</p>
-
- <div class="warning"><h3>Caveat</h3>
- When using prepared statements with a MySQL database, it is preferred to set
- <code>reconnect</code> to 0 in the connection string as to avoid errors that
- arise from the MySQL client reconnecting without properly resetting the
- prepared statements. If set to 1, any broken connections will be attempted
- fixed, but as mod_dbd is not informed, the prepared statements will be invalidated.
- </div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">SECURITY WARNING</a></h2>
-
- <p>Any web/database application needs to secure itself against SQL
- injection attacks. In most cases, Apache DBD is safe, because
- applications use prepared statements, and untrusted inputs are
- only ever used as data. Of course, if you use it via third-party
- modules, you should ascertain what precautions they may require.</p>
- <p>However, the <var>FreeTDS</var> driver is inherently
- <strong>unsafe</strong>. The underlying library doesn't support
- prepared statements, so the driver emulates them, and the
- untrusted input is merged into the SQL statement.</p>
- <p>It can be made safe by <em>untainting</em> all inputs:
- a process inspired by Perl's taint checking. Each input
- is matched against a regexp, and only the match is used,
- according to the Perl idiom:</p>
- <div class="example"><pre><code> $untrusted =~ /([a-z]+)/;
- $trusted = $1;</code></pre></div>
- <p>To use this, the untainting regexps must be included in the
- prepared statements configured. The regexp follows immediately
- after the % in the prepared statement, and is enclosed in
- curly brackets {}. For example, if your application expects
- alphanumeric input, you can use:</p>
- <div class="example"><p><code>
- <code>"SELECT foo FROM bar WHERE input = %s"</code>
- </code></p></div>
- <p>with other drivers, and suffer nothing worse than a failed query.
- But with FreeTDS you'd need:</p>
- <div class="example"><p><code>
- <code>"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"</code>
- </code></p></div>
- <p>Now anything that doesn't match the regexp's $1 match is
- discarded, so the statement is safe.</p>
- <p>An alternative to this may be the third-party ODBC driver,
- which offers the security of genuine prepared statements.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DBDExptime" id="DBDExptime">DBDExptime</a> <a name="dbdexptime" id="dbdexptime">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Keepalive time for idle connections</td></tr>
driver in apr_dbd_mysql.so.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="pooling" id="pooling">Connection Pooling</a></h2>
+ <p>This module manages database connections, in a manner
+ optimised for the platform. On non-threaded platforms,
+ it provides a persistent connection in the manner of
+ classic LAMP (Linux, Apache, Mysql, Perl/PHP/Python).
+ On threaded platform, it provides an altogether more
+ scalable and efficient <em>connection pool</em>, as
+ described in <a href="http://www.apachetutor.org/dev/reslist">this
+ article at ApacheTutor</a>. Note that <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>
+ supersedes the modules presented in that article.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="API" id="API">Apache DBD API</a></h2>
+ <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> exports five functions for other modules
+ to use. The API is as follows:</p>
+
+<pre class="prettyprint lang-c">typedef struct {
+ apr_dbd_t *handle;
+ apr_dbd_driver_t *driver;
+ apr_hash_t *prepared;
+} ap_dbd_t;
+
+/* Export functions to access the database */
+
+/* acquire a connection that MUST be explicitly closed.
+ * Returns NULL on error
+ */
+AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
+
+/* release a connection acquired with ap_dbd_open */
+AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
+
+/* acquire a connection that will have the lifetime of a request
+ * and MUST NOT be explicitly closed. Return NULL on error.
+ * This is the preferred function for most applications.
+ */
+AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
+
+/* acquire a connection that will have the lifetime of a connection
+ * and MUST NOT be explicitly closed. Return NULL on error.
+ */
+AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
+
+/* Prepare a statement for use by a client module */
+AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
+
+/* Also export them as optional functions for modules that prefer it */
+APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
+APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
+APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
+APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
+APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*));</pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="prepared" id="prepared">SQL Prepared Statements</a></h2>
+ <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> supports SQL prepared statements on behalf
+ of modules that may wish to use them. Each prepared statement
+ must be assigned a name (label), and they are stored in a hash:
+ the <code>prepared</code> field of an <code>ap_dbd_t</code>.
+ Hash entries are of type <code>apr_dbd_prepared_t</code>
+ and can be used in any of the apr_dbd prepared statement
+ SQL query or select commands.</p>
+
+ <p>It is up to dbd user modules to use the prepared statements
+ and document what statements can be specified in httpd.conf,
+ or to provide their own directives and use <code>ap_dbd_prepare</code>.</p>
+
+ <div class="warning"><h3>Caveat</h3>
+ When using prepared statements with a MySQL database, it is preferred to set
+ <code>reconnect</code> to 0 in the connection string as to avoid errors that
+ arise from the MySQL client reconnecting without properly resetting the
+ prepared statements. If set to 1, any broken connections will be attempted
+ fixed, but as mod_dbd is not informed, the prepared statements will be invalidated.
+ </div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="security" id="security">SECURITY WARNING</a></h2>
+
+ <p>Any web/database application needs to secure itself against SQL
+ injection attacks. In most cases, Apache DBD is safe, because
+ applications use prepared statements, and untrusted inputs are
+ only ever used as data. Of course, if you use it via third-party
+ modules, you should ascertain what precautions they may require.</p>
+ <p>However, the <var>FreeTDS</var> driver is inherently
+ <strong>unsafe</strong>. The underlying library doesn't support
+ prepared statements, so the driver emulates them, and the
+ untrusted input is merged into the SQL statement.</p>
+ <p>It can be made safe by <em>untainting</em> all inputs:
+ a process inspired by Perl's taint checking. Each input
+ is matched against a regexp, and only the match is used,
+ according to the Perl idiom:</p>
+ <div class="example"><pre><code> $untrusted =~ /([a-z]+)/;
+ $trusted = $1;</code></pre></div>
+ <p>To use this, the untainting regexps must be included in the
+ prepared statements configured. The regexp follows immediately
+ after the % in the prepared statement, and is enclosed in
+ curly brackets {}. For example, if your application expects
+ alphanumeric input, you can use:</p>
+ <div class="example"><p><code>
+ <code>"SELECT foo FROM bar WHERE input = %s"</code>
+ </code></p></div>
+ <p>with other drivers, and suffer nothing worse than a failed query.
+ But with FreeTDS you'd need:</p>
+ <div class="example"><p><code>
+ <code>"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"</code>
+ </code></p></div>
+ <p>Now anything that doesn't match the regexp's $1 match is
+ discarded, so the statement is safe.</p>
+ <p>An alternative to this may be the third-party ODBC driver,
+ which offers the security of genuine prepared statements.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_dbd.html" title="English"> en </a> |
passe</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pooling" id="pooling">Regroupement des connexions</a></h2>
- <p>Ce module gère de manière optimisée en fonction de la plate-forme
- les connexions aux bases de données. Sur les plates-formes non
- threadées, il maintient une connexion persistente à la manière d'un
- LAMP classique (Linux, Apache, Mysql, Perl/PHP/Python). Sur les
- plates-formes threadées, il maintient un <em>groupe de
- connexions</em> à la fois plus évolutif et plus efficace, comme
- décrit dans <a href="http://www.apachetutor.org/dev/reslist">cet
- article d'ApacheTutor</a>. Notez que <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>
- remplace les modules présentés dans cet article.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="API" id="API">API DBD d'Apache</a></h2>
- <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> exporte cinq fonctions que d'autres
- modules pourront utiliser. L'API se présente comme suit :</p>
-
- <pre class="prettyprint lang-c">typedef struct {
- apr_dbd_t *handle;
- apr_dbd_driver_t *driver;
- apr_hash_t *prepared;
-} ap_dbd_t;
-
-/* Fonctions exportées pour accéder à la base de données */
-
-/* ouvre une connexion qui DEVRA être explicitement fermée.
- * Renvoie NULL en cas d'erreur
- */
-AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
-
-/* ferme une connexion ouverte avec ap_dbd_open */
-AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
-
-/* acquiert une connexion qui aura la durée de vie de la requête et qui
- * NE DEVRA PAS être explicitement fermée. Renvoie NULL en cas
- * d'erreur. C'est la fonction recommandée pour la plupart des
- * applications.
- */
-AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
-
-/* acquiert une connexion qui aura la durée de vie d'une connexion et
- * qui NE DEVRA PAS être explicitement fermée. Renvoie NULL en cas
- * d'erreur.
- */
-AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
-
-/* Prépare une requête qu'un module client pourra utiliser */
-AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
-
-/* Exporte aussi ces fonctions à titre optionnel mour les modules qui
- * péfèreraient les utiliser */
-APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
-APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
-APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
-APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
-APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*));</pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="prepared" id="prepared">Requêtes SQL préparées</a></h2>
- <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> supporte les requêtes SQL préparées pour
- le compte des modules qui pourraient les utiliser. Chaque requête
- préparée doit posséder un nom (étiquette), et est stockée dans un
- condensé (hash) : les condensés sont du type
- <code>apr_dbd_prepared_t</code> et s'utilisent dans toute requête
- SQL ou commande select préparée par apr_dbd.</p>
-
- <p>Il est du ressort des modules utilisateurs de dbd d'utiliser les
- requêtes préparées et de préciser quelles requêtes doivent être
- spécifiées dans httpd.conf, ou de fournir leurs propres directives
- et d'utiliser <code>ap_dbd_prepare</code>.</p>
-
- <div class="warning"><h3>Avertissement</h3>
- Lorsqu'on utilise des requêtes préparées avec des bases de
- données MySQL, il est préférable de définir
- <code>reconnect</code> à 0 dans la chaîne de connexion, afin
- d'éviter des erreurs provoquées par un client MySQL qui se
- reconnecterait sans réinitialiser correctement les requêtes
- préparées. Si <code>reconnect</code> est défini à 1, toute
- connexion défectueuse sera sensée être réparée, mais comme
- mod_dbd n'en est pas informé, les requêtes préparées seront
- invalidées.
- </div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">AVERTISSEMENT DE SECURITE</a></h2>
-
- <p>Toute application web impliquant une base de données doit se
- protéger elle-même contre les attaques de type injection SQL. Dans
- la plupart des cas Apache DBD est sûr, car les applications
- utilisent des requêtes préparées, et les entrées non sûres ne seront
- utilisées qu'à titre de données. Bien entendu, si vous l'utilisez
- via un module tiers, vous devez être au fait des précautions à
- prendre.</p>
- <p>Cependant, le pilote <var>FreeTDS</var> est <strong>non
- sûr</strong> de par sa nature même. Comme la bibliothèque
- sous-jacente ne supporte pas les requêtes préparées, le pilote en
- effectue une émulation, et les entrées non sûres sont fusionnées
- avec la requête SQL.</p>
- <p>Il peut être sécurisé en <em>décontaminant</em> toutes les
- entrées : un processus inspiré de la recherche de contaminations de
- Perl (NdT : <code>taint checking</code>). Chaque entrée est comparée
- à une expression rationnelle, et
- seules les entrées qui correspondent sont utilisées, en accord avec
- le raccourci Perl :</p>
- <div class="example"><pre><code> $untrusted =~ /([a-z]+)/;
- $trusted = $1;</code></pre></div>
- <p>Pour utiliser ceci, les expressions rationnelles de
- décontamination doivent être incluses dans les requêtes préparées.
- L'expression rationnelle doit se situer immédiatement après le
- caractère % dans la requête préparée, et doit être entourée
- d'accolades {}. Par exemple, si votre application attend une entrée
- alphanumérique, vous pouvez utiliser :</p>
- <div class="example"><p><code>
- <code>"SELECT foo FROM bar WHERE input = %s"</code>
- </code></p></div>
- <p>avec d'autres pilotes, et ne risquer au pire qu'une requête
- en échec. Mais avec FreeTDS, vous devez utiliser :</p>
- <div class="example"><p><code>
- <code>"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"</code>
- </code></p></div>
- <p>tout ce qui ne correspond pas à l'expression rationnelle est
- alors rejeté, et la requête est ainsi désormais sûre.</p>
- <p>Alternativement, vous pouvez utiliser le pilote ODBC tiers, qui
- offre la sécurité des requêtes préparées authentiques.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="dbdexptime" id="dbdexptime">Directive</a> <a name="DBDExptime" id="DBDExptime">DBDExptime</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée de vie des connexions inactives</td></tr>
dans la bibliothèque apr_dbd_mysql.so.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="pooling" id="pooling">Regroupement des connexions</a></h2>
+ <p>Ce module gère de manière optimisée en fonction de la plate-forme
+ les connexions aux bases de données. Sur les plates-formes non
+ threadées, il maintient une connexion persistente à la manière d'un
+ LAMP classique (Linux, Apache, Mysql, Perl/PHP/Python). Sur les
+ plates-formes threadées, il maintient un <em>groupe de
+ connexions</em> à la fois plus évolutif et plus efficace, comme
+ décrit dans <a href="http://www.apachetutor.org/dev/reslist">cet
+ article d'ApacheTutor</a>. Notez que <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>
+ remplace les modules présentés dans cet article.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="API" id="API">API DBD d'Apache</a></h2>
+ <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> exporte cinq fonctions que d'autres
+ modules pourront utiliser. L'API se présente comme suit :</p>
+
+ <pre class="prettyprint lang-c">typedef struct {
+ apr_dbd_t *handle;
+ apr_dbd_driver_t *driver;
+ apr_hash_t *prepared;
+} ap_dbd_t;
+
+/* Fonctions exportées pour accéder à la base de données */
+
+/* ouvre une connexion qui DEVRA être explicitement fermée.
+ * Renvoie NULL en cas d'erreur
+ */
+AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
+
+/* ferme une connexion ouverte avec ap_dbd_open */
+AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
+
+/* acquiert une connexion qui aura la durée de vie de la requête et qui
+ * NE DEVRA PAS être explicitement fermée. Renvoie NULL en cas
+ * d'erreur. C'est la fonction recommandée pour la plupart des
+ * applications.
+ */
+AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
+
+/* acquiert une connexion qui aura la durée de vie d'une connexion et
+ * qui NE DEVRA PAS être explicitement fermée. Renvoie NULL en cas
+ * d'erreur.
+ */
+AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
+
+/* Prépare une requête qu'un module client pourra utiliser */
+AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
+
+/* Exporte aussi ces fonctions à titre optionnel mour les modules qui
+ * péfèreraient les utiliser */
+APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
+APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
+APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
+APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
+APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*));</pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="prepared" id="prepared">Requêtes SQL préparées</a></h2>
+ <p><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> supporte les requêtes SQL préparées pour
+ le compte des modules qui pourraient les utiliser. Chaque requête
+ préparée doit posséder un nom (étiquette), et est stockée dans un
+ condensé (hash) : les condensés sont du type
+ <code>apr_dbd_prepared_t</code> et s'utilisent dans toute requête
+ SQL ou commande select préparée par apr_dbd.</p>
+
+ <p>Il est du ressort des modules utilisateurs de dbd d'utiliser les
+ requêtes préparées et de préciser quelles requêtes doivent être
+ spécifiées dans httpd.conf, ou de fournir leurs propres directives
+ et d'utiliser <code>ap_dbd_prepare</code>.</p>
+
+ <div class="warning"><h3>Avertissement</h3>
+ Lorsqu'on utilise des requêtes préparées avec des bases de
+ données MySQL, il est préférable de définir
+ <code>reconnect</code> à 0 dans la chaîne de connexion, afin
+ d'éviter des erreurs provoquées par un client MySQL qui se
+ reconnecterait sans réinitialiser correctement les requêtes
+ préparées. Si <code>reconnect</code> est défini à 1, toute
+ connexion défectueuse sera sensée être réparée, mais comme
+ mod_dbd n'en est pas informé, les requêtes préparées seront
+ invalidées.
+ </div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="security" id="security">AVERTISSEMENT DE SECURITE</a></h2>
+
+ <p>Toute application web impliquant une base de données doit se
+ protéger elle-même contre les attaques de type injection SQL. Dans
+ la plupart des cas Apache DBD est sûr, car les applications
+ utilisent des requêtes préparées, et les entrées non sûres ne seront
+ utilisées qu'à titre de données. Bien entendu, si vous l'utilisez
+ via un module tiers, vous devez être au fait des précautions à
+ prendre.</p>
+ <p>Cependant, le pilote <var>FreeTDS</var> est <strong>non
+ sûr</strong> de par sa nature même. Comme la bibliothèque
+ sous-jacente ne supporte pas les requêtes préparées, le pilote en
+ effectue une émulation, et les entrées non sûres sont fusionnées
+ avec la requête SQL.</p>
+ <p>Il peut être sécurisé en <em>décontaminant</em> toutes les
+ entrées : un processus inspiré de la recherche de contaminations de
+ Perl (NdT : <code>taint checking</code>). Chaque entrée est comparée
+ à une expression rationnelle, et
+ seules les entrées qui correspondent sont utilisées, en accord avec
+ le raccourci Perl :</p>
+ <div class="example"><pre><code> $untrusted =~ /([a-z]+)/;
+ $trusted = $1;</code></pre></div>
+ <p>Pour utiliser ceci, les expressions rationnelles de
+ décontamination doivent être incluses dans les requêtes préparées.
+ L'expression rationnelle doit se situer immédiatement après le
+ caractère % dans la requête préparée, et doit être entourée
+ d'accolades {}. Par exemple, si votre application attend une entrée
+ alphanumérique, vous pouvez utiliser :</p>
+ <div class="example"><p><code>
+ <code>"SELECT foo FROM bar WHERE input = %s"</code>
+ </code></p></div>
+ <p>avec d'autres pilotes, et ne risquer au pire qu'une requête
+ en échec. Mais avec FreeTDS, vous devez utiliser :</p>
+ <div class="example"><p><code>
+ <code>"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"</code>
+ </code></p></div>
+ <p>tout ce qui ne correspond pas à l'expression rationnelle est
+ alors rejeté, et la requête est ainsi désormais sûre.</p>
+ <p>Alternativement, vous pouvez utiliser le pilote ODBC tiers, qui
+ offre la sécurité des requêtes préparées authentiques.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_dbd.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../filter.html">Filters</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="recommended" id="recommended">Sample Configurations</a></h2>
- <div class="warning"><h3>Compression and TLS</h3>
- <p>Some web applications are vulnerable to an information disclosure
- attack when a TLS connection carries deflate compressed data. For more
- information, review the details of the "BREACH" family of attacks.</p>
- </div>
- <p>This is a simple configuration that compresses common text-based content types.</p>
-
- <div class="example"><h3>Compress only a few types</h3><pre class="prettyprint lang-config">AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript</pre>
-</div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Enabling Compression</a></h2>
- <div class="warning"><h3>Compression and TLS</h3>
- <p>Some web applications are vulnerable to an information disclosure
- attack when a TLS connection carries deflate compressed data. For more
- information, review the details of the "BREACH" family of attacks.</p>
- </div>
-
- <h3><a name="output" id="output">Output Compression</a></h3>
- <p>Compression is implemented by the <code>DEFLATE</code>
- <a href="../filter.html">filter</a>. The following directive
- will enable compression for documents in the container where it
- is placed:</p>
-
- <pre class="prettyprint lang-config">SetOutputFilter DEFLATE
-SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip</pre>
-
-
- <p>If you want to restrict the compression to particular MIME types
- in general, you may use the <code class="directive"><a href="../mod/mod_filter.html#addoutputfilterbytype">AddOutputFilterByType</a></code> directive. Here is an example of
- enabling compression only for the html files of the Apache
- documentation:</p>
-
- <pre class="prettyprint lang-config"><Directory "/your-server-root/manual">
- AddOutputFilterByType DEFLATE text/html
-</Directory></pre>
-
-
- <div class="note"><h3>Note</h3>
- The <code>DEFLATE</code> filter is always inserted after RESOURCE
- filters like PHP or SSI. It never touches internal subrequests.
- </div>
- <div class="note"><h3>Note</h3>
- There is an environment variable <code>force-gzip</code>,
- set via <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>, which
- will ignore the accept-encoding setting of your browser and will
- send compressed output.
- </div>
-
-
- <h3><a name="inflate" id="inflate">Output Decompression</a></h3>
- <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
- inflating/uncompressing a gzip compressed response body. In order to activate
- this feature you have to insert the <code>INFLATE</code> filter into
- the output filter chain using <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>, for example:</p>
-
- <pre class="prettyprint lang-config"><Location /dav-area>
- ProxyPass http://example.com/
- SetOutputFilter INFLATE
-</Location></pre>
-
-
- <p>This Example will uncompress gzip'ed output from example.com, so other
- filters can do further processing with it.
- </p>
-
-
- <h3><a name="input" id="input">Input Decompression</a></h3>
- <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
- decompressing a gzip compressed request body . In order to activate
- this feature you have to insert the <code>DEFLATE</code> filter into
- the input filter chain using <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>, for example:</p>
-
- <pre class="prettyprint lang-config"><Location /dav-area>
- SetInputFilter DEFLATE
-</Location></pre>
-
-
- <p>Now if a request contains a <code>Content-Encoding:
- gzip</code> header, the body will be automatically decompressed.
- Few browsers have the ability to gzip request bodies. However,
- some special applications actually do support request
- compression, for instance some <a href="http://www.webdav.org">WebDAV</a> clients.</p>
-
- <div class="warning"><h3>Note on Content-Length</h3>
- <p>If you evaluate the request body yourself, <em>don't trust
- the <code>Content-Length</code> header!</em>
- The Content-Length header reflects the length of the
- incoming data from the client and <em>not</em> the byte count of
- the decompressed data stream.</p>
- </div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxies" id="proxies">Dealing with proxy servers</a></h2>
-
- <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module sends a <code>Vary:
- Accept-Encoding</code> HTTP response header to alert proxies that
- a cached response should be sent only to clients that send the
- appropriate <code>Accept-Encoding</code> request header. This
- prevents compressed content from being sent to a client that will
- not understand it.</p>
-
- <p>If you use some special exclusions dependent
- on, for example, the <code>User-Agent</code> header, you must
- manually configure an addition to the <code>Vary</code> header
- to alert proxies of the additional restrictions. For example,
- in a typical configuration where the addition of the <code>DEFLATE</code>
- filter depends on the <code>User-Agent</code>, you should add:</p>
-
- <pre class="prettyprint lang-config">Header append Vary User-Agent</pre>
-
-
- <p>If your decision about compression depends on other information
- than request headers (<em>e.g.</em> HTTP version), you have to set the
- <code>Vary</code> header to the value <code>*</code>. This prevents
- compliant proxies from caching entirely.</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">Header set Vary *</pre>
-</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="precompressed" id="precompressed">Serving pre-compressed
-content</a></h2>
-
- <p>Since <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> re-compresses content each
- time a request is made, some performance benefit can be derived by
- pre-compressing the content and telling mod_deflate to serve them
- without re-compressing them. This may be accomplished using a
- configuration like the following:</p>
-
- <pre class="prettyprint lang-config"><IfModule mod_headers.c>
- # Serve gzip compressed CSS files if they exist
- # and the client accepts gzip.
- RewriteCond %{HTTP:Accept-encoding} gzip
- RewriteCond %{REQUEST_FILENAME}\.gz -s
- RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
-
- # Serve gzip compressed JS files if they exist
- # and the client accepts gzip.
- RewriteCond %{HTTP:Accept-encoding} gzip
- RewriteCond %{REQUEST_FILENAME}\.gz -s
- RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
-
-
- # Serve correct content types, and prevent mod_deflate double gzip.
- RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
- RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
-
-
- <FilesMatch "(\.js\.gz|\.css\.gz)$">
- # Serve correct encoding type.
- Header append Content-Encoding gzip
-
- # Force proxies to cache gzipped &
- # non-gzipped css/js files separately.
- Header append Vary Accept-Encoding
- </FilesMatch>
-</IfModule></pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DeflateAlterETag" id="DeflateAlterETag">DeflateAlterETag</a> <a name="deflatealteretag" id="deflatealteretag">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>How the outgoing ETag header should be modified during compression</td></tr>
zlib compression window size (a value between 1 and 15). Generally, the
higher the window size, the higher can the compression ratio be expected.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="recommended" id="recommended">Sample Configurations</a></h2>
+ <div class="warning"><h3>Compression and TLS</h3>
+ <p>Some web applications are vulnerable to an information disclosure
+ attack when a TLS connection carries deflate compressed data. For more
+ information, review the details of the "BREACH" family of attacks.</p>
+ </div>
+ <p>This is a simple configuration that compresses common text-based content types.</p>
+
+ <div class="example"><h3>Compress only a few types</h3><pre class="prettyprint lang-config">AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript</pre>
+</div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enable" id="enable">Enabling Compression</a></h2>
+ <div class="warning"><h3>Compression and TLS</h3>
+ <p>Some web applications are vulnerable to an information disclosure
+ attack when a TLS connection carries deflate compressed data. For more
+ information, review the details of the "BREACH" family of attacks.</p>
+ </div>
+
+ <h3><a name="output" id="output">Output Compression</a></h3>
+ <p>Compression is implemented by the <code>DEFLATE</code>
+ <a href="../filter.html">filter</a>. The following directive
+ will enable compression for documents in the container where it
+ is placed:</p>
+
+ <pre class="prettyprint lang-config">SetOutputFilter DEFLATE
+SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip</pre>
+
+
+ <p>If you want to restrict the compression to particular MIME types
+ in general, you may use the <code class="directive"><a href="../mod/mod_filter.html#addoutputfilterbytype">AddOutputFilterByType</a></code> directive. Here is an example of
+ enabling compression only for the html files of the Apache
+ documentation:</p>
+
+ <pre class="prettyprint lang-config"><Directory "/your-server-root/manual">
+ AddOutputFilterByType DEFLATE text/html
+</Directory></pre>
+
+
+ <div class="note"><h3>Note</h3>
+ The <code>DEFLATE</code> filter is always inserted after RESOURCE
+ filters like PHP or SSI. It never touches internal subrequests.
+ </div>
+ <div class="note"><h3>Note</h3>
+ There is an environment variable <code>force-gzip</code>,
+ set via <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>, which
+ will ignore the accept-encoding setting of your browser and will
+ send compressed output.
+ </div>
+
+
+ <h3><a name="inflate" id="inflate">Output Decompression</a></h3>
+ <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
+ inflating/uncompressing a gzip compressed response body. In order to activate
+ this feature you have to insert the <code>INFLATE</code> filter into
+ the output filter chain using <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>, for example:</p>
+
+ <pre class="prettyprint lang-config"><Location /dav-area>
+ ProxyPass http://example.com/
+ SetOutputFilter INFLATE
+</Location></pre>
+
+
+ <p>This Example will uncompress gzip'ed output from example.com, so other
+ filters can do further processing with it.
+ </p>
+
+
+ <h3><a name="input" id="input">Input Decompression</a></h3>
+ <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
+ decompressing a gzip compressed request body . In order to activate
+ this feature you have to insert the <code>DEFLATE</code> filter into
+ the input filter chain using <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>, for example:</p>
+
+ <pre class="prettyprint lang-config"><Location /dav-area>
+ SetInputFilter DEFLATE
+</Location></pre>
+
+
+ <p>Now if a request contains a <code>Content-Encoding:
+ gzip</code> header, the body will be automatically decompressed.
+ Few browsers have the ability to gzip request bodies. However,
+ some special applications actually do support request
+ compression, for instance some <a href="http://www.webdav.org">WebDAV</a> clients.</p>
+
+ <div class="warning"><h3>Note on Content-Length</h3>
+ <p>If you evaluate the request body yourself, <em>don't trust
+ the <code>Content-Length</code> header!</em>
+ The Content-Length header reflects the length of the
+ incoming data from the client and <em>not</em> the byte count of
+ the decompressed data stream.</p>
+ </div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="proxies" id="proxies">Dealing with proxy servers</a></h2>
+
+ <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module sends a <code>Vary:
+ Accept-Encoding</code> HTTP response header to alert proxies that
+ a cached response should be sent only to clients that send the
+ appropriate <code>Accept-Encoding</code> request header. This
+ prevents compressed content from being sent to a client that will
+ not understand it.</p>
+
+ <p>If you use some special exclusions dependent
+ on, for example, the <code>User-Agent</code> header, you must
+ manually configure an addition to the <code>Vary</code> header
+ to alert proxies of the additional restrictions. For example,
+ in a typical configuration where the addition of the <code>DEFLATE</code>
+ filter depends on the <code>User-Agent</code>, you should add:</p>
+
+ <pre class="prettyprint lang-config">Header append Vary User-Agent</pre>
+
+
+ <p>If your decision about compression depends on other information
+ than request headers (<em>e.g.</em> HTTP version), you have to set the
+ <code>Vary</code> header to the value <code>*</code>. This prevents
+ compliant proxies from caching entirely.</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">Header set Vary *</pre>
+</div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="precompressed" id="precompressed">Serving pre-compressed
+content</a></h2>
+
+ <p>Since <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> re-compresses content each
+ time a request is made, some performance benefit can be derived by
+ pre-compressing the content and telling mod_deflate to serve them
+ without re-compressing them. This may be accomplished using a
+ configuration like the following:</p>
+
+ <pre class="prettyprint lang-config"><IfModule mod_headers.c>
+ # Serve gzip compressed CSS files if they exist
+ # and the client accepts gzip.
+ RewriteCond %{HTTP:Accept-encoding} gzip
+ RewriteCond %{REQUEST_FILENAME}\.gz -s
+ RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
+
+ # Serve gzip compressed JS files if they exist
+ # and the client accepts gzip.
+ RewriteCond %{HTTP:Accept-encoding} gzip
+ RewriteCond %{REQUEST_FILENAME}\.gz -s
+ RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
+
+
+ # Serve correct content types, and prevent mod_deflate double gzip.
+ RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
+ RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
+
+
+ <FilesMatch "(\.js\.gz|\.css\.gz)$">
+ # Serve correct encoding type.
+ Header append Content-Encoding gzip
+
+ # Force proxies to cache gzipped &
+ # non-gzipped css/js files separately.
+ Header append Vary Accept-Encoding
+ </FilesMatch>
+</IfModule></pre>
+
+
</div>
</div>
<div class="bottomlang">
<li><a href="../filter.html">Les filtres</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="recommended" id="recommended">Exemples de configurations</a></h2>
- <div class="warning"><h3>Compression et TLS</h3>
- <p>Certaines applications web sont vulnérables à une attaque pour
- vol d'informations lorsqu'une connexion TLS transporte des
- données compressées par deflate. Pour plus de détails,
- documentez-vous sur la famille d'attaques "BREACH".</p>
- </div>
- <p>Voici un exemple simple de configuration qui permet de comprimer
- les types de contenu à base de texte.</p>
-
- <div class="example"><h3>Ne comprime que certains types de documents</h3><pre class="prettyprint lang-config">AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript</pre>
-</div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Activation de la compression</a></h2>
- <div class="warning"><h3>Compression et TLS</h3>
- <p>Certaines applications web sont vulnérables à une attaque pour
- vol d'informations lorsqu'une connexion TLS transporte des
- données compressées par deflate. Pour plus de détails,
- documentez-vous sur la famille d'attaques "BREACH".</p>
- </div>
-
- <h3><a name="output" id="output">Compression de la sortie</a></h3>
- <p>La compression est implémentée par le <a href="../filter.html">filtre</a> <code>DEFLATE</code>. La
- directive suivante active la compression des documents dans le
- conteneur où elle est placée :</p>
-
- <pre class="prettyprint lang-config">SetOutputFilter DEFLATE
-SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip</pre>
-
-
- <p>Si vous voulez limiter la compression à certains types MIME
- particuliers, vous pouvez utiliser la directive <code class="directive"><a href="../mod/mod_filter.html#addoutputfilterbytype">AddOutputFilterByType</a></code>. Voici un exemple
- où la compression n'est activée que pour les fichiers html de la
- documentation d'Apache :</p>
-
- <pre class="prettyprint lang-config"><Directory "/your-server-root/manual">
- AddOutputFilterByType DEFLATE text/html
-</Directory></pre>
-
-
- <div class="note"><h3>Note</h3>
- Le filtre <code>DEFLATE</code> est toujours inséré après les
- filtres RESOURCE comme PHP ou SSI. Il n'affecte jamais les
- sous-requêtes internes.
- </div>
- <div class="note"><h3>Note</h3>
- La variable d'environnement <code>force-gzip</code>, définie à
- l'aide de la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>, permet d'ignorer la
- configuration de votre navigateur quant aux codages acceptés, et
- d'envoyer sans condition une sortie comprimée.
- </div>
-
-
- <h3><a name="inflate" id="inflate">Décompression de la sortie</a></h3>
- <p>Le module <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> fournit aussi un filtre
- permettant de décomprimer un corps de réponse comprimé par gzip.
- Pour activer cette fonctionnalité, vous devez insérer le filtre
- <code>INFLATE</code> dans la chaîne de filtrage en sortie via la
- directive <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> ou
- <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>, comme
- dans l'exemple suivant :</p>
-
- <pre class="prettyprint lang-config"><Location /dav-area>
- ProxyPass http://example.com/
- SetOutputFilter INFLATE
-</Location></pre>
-
-
- <p>Dans cet exemple, les sorties comprimées par gzip en
- provenance de example.com seront décomprimées afin de pouvoir
- être éventuellement traitées par d'autres filtres.
- </p>
-
-
- <h3><a name="input" id="input">Décompression de l'entrée</a></h3>
- <p>Le module <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> fournit également un filtre
- permettant de décomprimer un corps de requête comprimé par gzip.
- Pour activer cette fonctionnalité, vous devez insérer le filtre
- <code>DEFLATE</code> dans la chaîne de filtrage en entrée via la
- directive <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code> ou
- <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>, comme
- dans l'exemple suivant :</p>
-
- <pre class="prettyprint lang-config"><Location /dav-area>
- SetInputFilter DEFLATE
-</Location></pre>
-
-
- <p>Désormais, si une requête contient un en-tête
- <code>Content-Encoding: gzip</code>, son corps sera
- automatiquement décomprimé. Peu de navigateurs sont actuellement
- en mesure de comprimer les corps de requêtes. Cependant,
- certaines applications spécialisées supportent les requêtes
- comprimées, comme par exemple certains clients <a href="http://www.webdav.org">WebDAV</a>.</p>
-
- <div class="warning"><h3>Note à propos de l'en-tête
- <code>Content-Length</code></h3>
- <p>Si vous évaluez vous-même la taille du corps de requête,
- <em>ne faites pas confiance à l'en-tête
- <code>Content-Length</code>!</em> L'en-tête
- Content-Length indique la longueur des données en provenance du
- client, et <em>non</em> la quantité d'octets que représente le
- flux de données décompressé.</p>
- </div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxies" id="proxies">Prise en compte des serveurs mandataires</a></h2>
-
- <p>Le module <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> envoie un en-tête de
- réponse HTTP <code>Vary: Accept-Encoding</code> pour avertir les
- mandataires qu'une réponse enregistrée dans le cache ne doit être
- envoyée qu'aux clients qui ont envoyé l'en-tête de requête
- <code>Accept-Encoding</code> approprié. Ceci permet d'éviter l'envoi
- d'un contenu comprimé à un client qui ne sera pas en mesure
- de l'interpréter.</p>
-
- <p>Si vous avez défini des exclusions spécifiques dépendant, par
- exemple, de l'en-tête <code>User-Agent</code>, vous devez
- ajouter manuellement des données à l'en-tête <code>Vary</code> afin
- d'informer les mandataires des restrictions supplémentaires. Par
- exemple, dans la configuration classique où l'addition du filtre
- <code>DEFLATE</code> dépend du contenu de l'en-tête
- <code>User-Agent</code>, vous devez spécifier :</p>
-
- <pre class="prettyprint lang-config">Header append Vary User-Agent</pre>
-
-
- <p>Si votre décision de comprimer le contenu dépend d'autres
- informations que celles contenues dans les en-têtes de la requête
- (par exemple la version HTTP), vous devez attribuer à l'en-tête
- <code>Vary</code> la valeur <code>*</code>, ce qui permet d'empêcher
- les mandataires compatibles de tout mettre en cache.</p>
-
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">Header set Vary *</pre>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="deflatealteretag" id="deflatealteretag">Directive</a> <a name="DeflateAlterETag" id="DeflateAlterETag">DeflateAlterETag</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Comment l'en-tête sortant ETag doit être modifié au cours
1 et 15). En général, plus grande sera la taille de la fenêtre, plus
grand sera le taux de compression auquel on pourra s'attendre.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="recommended" id="recommended">Exemples de configurations</a></h2>
+ <div class="warning"><h3>Compression et TLS</h3>
+ <p>Certaines applications web sont vulnérables à une attaque pour
+ vol d'informations lorsqu'une connexion TLS transporte des
+ données compressées par deflate. Pour plus de détails,
+ documentez-vous sur la famille d'attaques "BREACH".</p>
+ </div>
+ <p>Voici un exemple simple de configuration qui permet de comprimer
+ les types de contenu à base de texte.</p>
+
+ <div class="example"><h3>Ne comprime que certains types de documents</h3><pre class="prettyprint lang-config">AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript</pre>
+</div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enable" id="enable">Activation de la compression</a></h2>
+ <div class="warning"><h3>Compression et TLS</h3>
+ <p>Certaines applications web sont vulnérables à une attaque pour
+ vol d'informations lorsqu'une connexion TLS transporte des
+ données compressées par deflate. Pour plus de détails,
+ documentez-vous sur la famille d'attaques "BREACH".</p>
+ </div>
+
+ <h3><a name="output" id="output">Compression de la sortie</a></h3>
+ <p>La compression est implémentée par le <a href="../filter.html">filtre</a> <code>DEFLATE</code>. La
+ directive suivante active la compression des documents dans le
+ conteneur où elle est placée :</p>
+
+ <pre class="prettyprint lang-config">SetOutputFilter DEFLATE
+SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip</pre>
+
+
+ <p>Si vous voulez limiter la compression à certains types MIME
+ particuliers, vous pouvez utiliser la directive <code class="directive"><a href="../mod/mod_filter.html#addoutputfilterbytype">AddOutputFilterByType</a></code>. Voici un exemple
+ où la compression n'est activée que pour les fichiers html de la
+ documentation d'Apache :</p>
+
+ <pre class="prettyprint lang-config"><Directory "/your-server-root/manual">
+ AddOutputFilterByType DEFLATE text/html
+</Directory></pre>
+
+
+ <div class="note"><h3>Note</h3>
+ Le filtre <code>DEFLATE</code> est toujours inséré après les
+ filtres RESOURCE comme PHP ou SSI. Il n'affecte jamais les
+ sous-requêtes internes.
+ </div>
+ <div class="note"><h3>Note</h3>
+ La variable d'environnement <code>force-gzip</code>, définie à
+ l'aide de la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>, permet d'ignorer la
+ configuration de votre navigateur quant aux codages acceptés, et
+ d'envoyer sans condition une sortie comprimée.
+ </div>
+
+
+ <h3><a name="inflate" id="inflate">Décompression de la sortie</a></h3>
+ <p>Le module <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> fournit aussi un filtre
+ permettant de décomprimer un corps de réponse comprimé par gzip.
+ Pour activer cette fonctionnalité, vous devez insérer le filtre
+ <code>INFLATE</code> dans la chaîne de filtrage en sortie via la
+ directive <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> ou
+ <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>, comme
+ dans l'exemple suivant :</p>
+
+ <pre class="prettyprint lang-config"><Location /dav-area>
+ ProxyPass http://example.com/
+ SetOutputFilter INFLATE
+</Location></pre>
+
+
+ <p>Dans cet exemple, les sorties comprimées par gzip en
+ provenance de example.com seront décomprimées afin de pouvoir
+ être éventuellement traitées par d'autres filtres.
+ </p>
+
+
+ <h3><a name="input" id="input">Décompression de l'entrée</a></h3>
+ <p>Le module <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> fournit également un filtre
+ permettant de décomprimer un corps de requête comprimé par gzip.
+ Pour activer cette fonctionnalité, vous devez insérer le filtre
+ <code>DEFLATE</code> dans la chaîne de filtrage en entrée via la
+ directive <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code> ou
+ <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>, comme
+ dans l'exemple suivant :</p>
+
+ <pre class="prettyprint lang-config"><Location /dav-area>
+ SetInputFilter DEFLATE
+</Location></pre>
+
+
+ <p>Désormais, si une requête contient un en-tête
+ <code>Content-Encoding: gzip</code>, son corps sera
+ automatiquement décomprimé. Peu de navigateurs sont actuellement
+ en mesure de comprimer les corps de requêtes. Cependant,
+ certaines applications spécialisées supportent les requêtes
+ comprimées, comme par exemple certains clients <a href="http://www.webdav.org">WebDAV</a>.</p>
+
+ <div class="warning"><h3>Note à propos de l'en-tête
+ <code>Content-Length</code></h3>
+ <p>Si vous évaluez vous-même la taille du corps de requête,
+ <em>ne faites pas confiance à l'en-tête
+ <code>Content-Length</code>!</em> L'en-tête
+ Content-Length indique la longueur des données en provenance du
+ client, et <em>non</em> la quantité d'octets que représente le
+ flux de données décompressé.</p>
+ </div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="proxies" id="proxies">Prise en compte des serveurs mandataires</a></h2>
+
+ <p>Le module <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> envoie un en-tête de
+ réponse HTTP <code>Vary: Accept-Encoding</code> pour avertir les
+ mandataires qu'une réponse enregistrée dans le cache ne doit être
+ envoyée qu'aux clients qui ont envoyé l'en-tête de requête
+ <code>Accept-Encoding</code> approprié. Ceci permet d'éviter l'envoi
+ d'un contenu comprimé à un client qui ne sera pas en mesure
+ de l'interpréter.</p>
+
+ <p>Si vous avez défini des exclusions spécifiques dépendant, par
+ exemple, de l'en-tête <code>User-Agent</code>, vous devez
+ ajouter manuellement des données à l'en-tête <code>Vary</code> afin
+ d'informer les mandataires des restrictions supplémentaires. Par
+ exemple, dans la configuration classique où l'addition du filtre
+ <code>DEFLATE</code> dépend du contenu de l'en-tête
+ <code>User-Agent</code>, vous devez spécifier :</p>
+
+ <pre class="prettyprint lang-config">Header append Vary User-Agent</pre>
+
+
+ <p>Si votre décision de comprimer le contenu dépend d'autres
+ informations que celles contenues dans les en-têtes de la requête
+ (par exemple la version HTTP), vous devez attribuer à l'en-tête
+ <code>Vary</code> la valeur <code>*</code>, ce qui permet d'empêcher
+ les mandataires compatibles de tout mettre en cache.</p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">Header set Vary *</pre>
+</div>
</div>
</div>
<div class="bottomlang">
<li><a href="../filter.html">Filters</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateAlterETag" id="DeflateAlterETag">DeflateAlterETag</a> <a name="deflatealteretag" id="deflatealteretag">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>How the outgoing ETag header should be modified during compression</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateAlterETag AddSuffix|NoChange|Remove</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateAlterETag AddSuffix</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>zlib が一度に圧縮する塊の大きさ</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+</table>
+ <p><code class="directive">DeflateBufferSize</code> ディレクティブは
+ zlib が一度に圧縮する塊の大きさをバイト単位で指定します。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>出力に対して行なう圧縮の程度</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>Zlib のデフォルト</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>This directive is available since Apache 2.0.45</td></tr>
+</table>
+ <p><code class="directive">DeflateCompressionLevel</code> ディレクティブは
+ 圧縮の程度を設定します。大きな値では、より圧縮が行なわれますが、
+ CPU 資源を消費します。</p>
+ <p>値は 1 (低圧縮) から 9 (高圧縮) です。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ロギング用に圧縮比をメモに追加</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td><var>type</var> is available since Apache 2.0.45</td></tr>
+</table>
+ <p><code class="directive">DeflateFilterNote</code> ディレクティブは
+ 圧縮比に関するメモがリクエストに付加されることを指定します。
+ メモ (note) の名前はディレクティブに指定された値です。
+ メモは<a href="../logs.html#accesslog">アクセスログ</a>に
+ 値を記録し、統計を取る目的にも使えます。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ DeflateFilterNote ratio<br />
+ <br />
+ LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
+ CustomLog logs/deflate_log deflate
+ </code></p></div>
+
+ <p>ログからもっと精密な値を抽出したい場合は、<var>type</var>
+ 引数を使用して、データタイプをログのメモとして残すように指定できます。
+ <var>type</var> は次のうちの一つです。</p>
+
+ <dl>
+ <dt><code>Input</code></dt>
+ <dd>フィルタの入力ストリームのバイトカウントをメモに保存する。</dd>
+
+ <dt><code>Output</code></dt>
+ <dd>フィルタの出力ストリームのバイトカウントをメモに保存する。</dd>
+
+ <dt><code>Ratio</code></dt>
+ <dd>圧縮率 (<code>出力 / 入力 * 100</code>) をメモに保存する。
+ <var>type</var> 引数を省略した場合は、これがデフォルトとなります。</dd>
+ </dl>
+
+ <p>まとめると、次のようにログを取ることになるでしょう。</p>
+
+ <div class="example"><h3>精密なログ採取</h3><p><code>
+ DeflateFilterNote Input instream<br />
+ DeflateFilterNote Output outstream<br />
+ DeflateFilterNote Ratio ratio<br />
+ <br />
+ LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
+ CustomLog logs/deflate_log deflate
+ </code></p></div>
+
+<h3>参照</h3>
+<ul>
+<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateInflateLimitRequestBody" id="DeflateInflateLimitRequestBody">DeflateInflateLimitRequestBody</a> <a name="deflateinflatelimitrequestbody" id="deflateinflatelimitrequestbody">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Maximum size of inflated request bodies</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateInflateLimitRequestBody<var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>None, but LimitRequestBody applies after deflation</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.4.10 and later</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateInflateRatioBurst" id="DeflateInflateRatioBurst">DeflateInflateRatioBurst</a> <a name="deflateinflateratioburst" id="deflateinflateratioburst">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Maximum number of times the inflation ratio for request bodies
+ can be crossed</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateInflateRatioBurst <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>3</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.4.10 and later</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateInflateRatioLimit" id="DeflateInflateRatioLimit">DeflateInflateRatioLimit</a> <a name="deflateinflateratiolimit" id="deflateinflateratiolimit">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Maximum inflation ratio for request bodies</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateInflateRatioLimit <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>200</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.4.10 and later</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>zlib が圧縮に使うメモリのレベルを指定</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+</table>
+ <p><code class="directive">DeflateMemLevel</code> ディレクティブは
+ zlib が圧縮に使うメモリのレベルを設定します (1 から 9 の間の値)。
+ (訳注: 2 を底とする対数の値になります。
+ 8 程度が良いでしょう。)</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Zlib の圧縮用ウィンドウの大きさ</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
+</table>
+ <p><code class="directive">DeflateWindowSize</code> ディレクティブは
+ zlib の圧縮用ウィンドウ (訳注: zlib で使用される履歴バッファ)
+ の大きさを指定します (1 から 15 の間の値)。
+ 一般的に大きなウィンドウサイズを使用すると圧縮率が向上します。
+ (訳注: 2 を底とする対数の値になります。
+ 8 から 15 にするのが良いでしょう。)</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="recommended" id="recommended">サンプル設定</a></h2>
<p>下にせっかちな人向けの簡単な設定例を示します。</p>
Header set Vary *
</code></p></div>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateAlterETag" id="DeflateAlterETag">DeflateAlterETag</a> <a name="deflatealteretag" id="deflatealteretag">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>How the outgoing ETag header should be modified during compression</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateAlterETag AddSuffix|NoChange|Remove</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateAlterETag AddSuffix</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>zlib が一度に圧縮する塊の大きさ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateBufferSize</code> ディレクティブは
- zlib が一度に圧縮する塊の大きさをバイト単位で指定します。</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>出力に対して行なう圧縮の程度</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>Zlib のデフォルト</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>This directive is available since Apache 2.0.45</td></tr>
-</table>
- <p><code class="directive">DeflateCompressionLevel</code> ディレクティブは
- 圧縮の程度を設定します。大きな値では、より圧縮が行なわれますが、
- CPU 資源を消費します。</p>
- <p>値は 1 (低圧縮) から 9 (高圧縮) です。</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ロギング用に圧縮比をメモに追加</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td><var>type</var> is available since Apache 2.0.45</td></tr>
-</table>
- <p><code class="directive">DeflateFilterNote</code> ディレクティブは
- 圧縮比に関するメモがリクエストに付加されることを指定します。
- メモ (note) の名前はディレクティブに指定された値です。
- メモは<a href="../logs.html#accesslog">アクセスログ</a>に
- 値を記録し、統計を取る目的にも使えます。</p>
-
- <div class="example"><h3>例</h3><p><code>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
- <p>ログからもっと精密な値を抽出したい場合は、<var>type</var>
- 引数を使用して、データタイプをログのメモとして残すように指定できます。
- <var>type</var> は次のうちの一つです。</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>フィルタの入力ストリームのバイトカウントをメモに保存する。</dd>
-
- <dt><code>Output</code></dt>
- <dd>フィルタの出力ストリームのバイトカウントをメモに保存する。</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>圧縮率 (<code>出力 / 入力 * 100</code>) をメモに保存する。
- <var>type</var> 引数を省略した場合は、これがデフォルトとなります。</dd>
- </dl>
-
- <p>まとめると、次のようにログを取ることになるでしょう。</p>
-
- <div class="example"><h3>精密なログ採取</h3><p><code>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
-<h3>参照</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateInflateLimitRequestBody" id="DeflateInflateLimitRequestBody">DeflateInflateLimitRequestBody</a> <a name="deflateinflatelimitrequestbody" id="deflateinflatelimitrequestbody">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Maximum size of inflated request bodies</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateInflateLimitRequestBody<var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>None, but LimitRequestBody applies after deflation</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.4.10 and later</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateInflateRatioBurst" id="DeflateInflateRatioBurst">DeflateInflateRatioBurst</a> <a name="deflateinflateratioburst" id="deflateinflateratioburst">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Maximum number of times the inflation ratio for request bodies
- can be crossed</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateInflateRatioBurst <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>3</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.4.10 and later</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateInflateRatioLimit" id="DeflateInflateRatioLimit">DeflateInflateRatioLimit</a> <a name="deflateinflateratiolimit" id="deflateinflateratiolimit">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Maximum inflation ratio for request bodies</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateInflateRatioLimit <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>200</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.4.10 and later</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>zlib が圧縮に使うメモリのレベルを指定</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateMemLevel</code> ディレクティブは
- zlib が圧縮に使うメモリのレベルを設定します (1 から 9 の間の値)。
- (訳注: 2 を底とする対数の値になります。
- 8 程度が良いでしょう。)</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Zlib の圧縮用ウィンドウの大きさ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateWindowSize</code> ディレクティブは
- zlib の圧縮用ウィンドウ (訳注: zlib で使用される履歴バッファ)
- の大きさを指定します (1 から 15 の間の値)。
- 一般的に大きなウィンドウサイズを使用すると圧縮率が向上します。
- (訳注: 2 を底とする対数の値になります。
- 8 から 15 にするのが良いでしょう。)</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_deflate.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../filter.html">ÇÊÅÍ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateAlterETag" id="DeflateAlterETag">DeflateAlterETag</a> <a name="deflatealteretag" id="deflatealteretag">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>How the outgoing ETag header should be modified during compression</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateAlterETag AddSuffix|NoChange|Remove</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateAlterETag AddSuffix</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+</table><p>The documentation for this directive has
+ not been translated yet. Please have a look at the English
+ version.</p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>zlibÀÌ Çѹø¿¡ ¾ÐÃàÇÒ Å©±â</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+</table>
+ <p><code class="directive">DeflateBufferSize</code> Áö½Ã¾î´Â zlibÀÌ
+ Çѹø¿¡ ¾ÐÃàÇÒ ¹ÙÀÌÆ®¼ö¸¦ ÁöÁ¤ÇÑ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ãâ·ÂÀ» ¾î´ÀÁ¤µµ ¾ÐÃàÇϴ°¡</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Zlib's default</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.0.45 ºÎÅÍ</td></tr>
+</table>
+ <p><code class="directive">DeflateCompressionLevel</code> Áö½Ã¾î´Â
+ »ç¿ëÇÒ ¾ÐÃà¼öÁØÀ» ¼±ÅÃÇÑ´Ù. °ªÀÌ Å¬¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÏÁö¸¸,
+ CPU¸¦ ´õ ¸¹ÀÌ »ç¿ëÇÑ´Ù.</p>
+ <p>(°¡Àå ´ú ¾ÐÃà) 1°ú (°¡Àå ¸¹ÀÌ ¾ÐÃà) 9 »çÀÌÀÇ °ªÀ» ÁöÁ¤ÇÑ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td><var>type</var>Àº ¾ÆÆÄÄ¡ 2.0.4 ºÎÅÍ</td></tr>
+</table>
+ <p><code class="directive">DeflateFilterNote</code> Áö½Ã¾î´Â ¿äûÀÇ
+ ¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÏ´Â ±âÈ£¸¦ ÁöÁ¤ÇÑ´Ù. ±âÈ£ À̸§Àº Áö½Ã¾î·Î
+ ÁöÁ¤ÇÑ °ªÀÌ´Ù. Åë°è¸¦ À§ÇØ <a href="../logs.html#accesslog">Á¢±Ù
+ ·Î±×</a>¿¡¼ ±âÈ£¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ DeflateFilterNote ratio<br />
+ <br />
+ LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
+ CustomLog logs/deflate_log deflate
+ </code></p></div>
+
+ <p>·Î±×¿¡¼ ´õ Á¤È®ÇÑ °ªÀ» ÃßÃâÇÏ·Á¸é <var>type</var> ¾Æ±Ô¸ÕÆ®·Î
+ ±â·ÏÇÒ ÀڷḦ ¼±ÅÃÇÑ´Ù. <var>type</var>´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
+
+ <dl>
+ <dt><code>Input</code></dt>
+ <dd>ÇÊÅÍ ÀԷ½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù.</dd>
+
+ <dt><code>Output</code></dt>
+ <dd>ÇÊÅÍ Ãâ·Â½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù..</dd>
+
+ <dt><code>Ratio</code></dt>
+ <dd>¾ÐÃà·üÀ» (<code>output/input * 100</code>) ÀúÀåÇÑ´Ù.
+ <var>type</var> ¾Æ±Ô¸ÕÆ®¸¦ »ý·«ÇÏ¸é »ç¿ëÇÏ´Â ±âº»°ªÀÌ´Ù.</dd>
+ </dl>
+
+ <p>±×·¡¼ ÀÌ·¸°Ô ·Î±×¿¡ ±â·ÏÇÒ ¼ö ÀÖ´Ù:</p>
+
+ <div class="example"><h3>Á¤¹ÐÇÑ ·Î±×</h3><p><code>
+ DeflateFilterNote Input instream<br />
+ DeflateFilterNote Output outstream<br />
+ DeflateFilterNote Ratio ratio<br />
+ <br />
+ LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
+ CustomLog logs/deflate_log deflate
+ </code></p></div>
+
+<h3>Âü°í</h3>
+<ul>
+<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateInflateLimitRequestBody" id="DeflateInflateLimitRequestBody">DeflateInflateLimitRequestBody</a> <a name="deflateinflatelimitrequestbody" id="deflateinflatelimitrequestbody">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Maximum size of inflated request bodies</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateInflateLimitRequestBody<var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>None, but LimitRequestBody applies after deflation</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>2.4.10 and later</td></tr>
+</table><p>The documentation for this directive has
+ not been translated yet. Please have a look at the English
+ version.</p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateInflateRatioBurst" id="DeflateInflateRatioBurst">DeflateInflateRatioBurst</a> <a name="deflateinflateratioburst" id="deflateinflateratioburst">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Maximum number of times the inflation ratio for request bodies
+ can be crossed</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateInflateRatioBurst <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>3</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>2.4.10 and later</td></tr>
+</table><p>The documentation for this directive has
+ not been translated yet. Please have a look at the English
+ version.</p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateInflateRatioLimit" id="DeflateInflateRatioLimit">DeflateInflateRatioLimit</a> <a name="deflateinflateratiolimit" id="deflateinflateratiolimit">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Maximum inflation ratio for request bodies</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateInflateRatioLimit <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>200</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>2.4.10 and later</td></tr>
+</table><p>The documentation for this directive has
+ not been translated yet. Please have a look at the English
+ version.</p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>zlibÀÌ ¾ÐÃàÇÒ¶§ »ç¿ëÇÏ´Â ¸Þ¸ð¸®·®</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+</table>
+ <p><code class="directive">DeflateMemLevel</code> Áö½Ã¾î´Â zlibÀÌ
+ ¾ÐÃàÇÒ¶§ ¾ó¸¶¸¸Å ¸Þ¸ð¸®¸¦ »ç¿ëÇÒÁö °áÁ¤ÇÑ´Ù. (1°ú 9 »çÀÌÀÇ
+ °ª)</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Zlib ¾ÐÃà window size</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
+</table>
+ <p><code class="directive">DeflateWindowSize</code> Áö½Ã¾î´Â zlib
+ ¾ÐÃà window size¸¦ (1°ú 15 »çÀÌÀÇ °ª) ÁöÁ¤ÇÑ´Ù. ÀϹÝÀûÀ¸·Î
+ window size°¡ Ŭ¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÑ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="recommended" id="recommended">°ßº» ¼³Á¤</a></h2>
<p>±ÞÇÑ »ç¶÷À» À§ÇÑ °ßº» ¼³Á¤ÀÌ´Ù.</p>
Header set Vary *
</code></p></div>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateAlterETag" id="DeflateAlterETag">DeflateAlterETag</a> <a name="deflatealteretag" id="deflatealteretag">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>How the outgoing ETag header should be modified during compression</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateAlterETag AddSuffix|NoChange|Remove</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateAlterETag AddSuffix</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-</table><p>The documentation for this directive has
- not been translated yet. Please have a look at the English
- version.</p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>zlibÀÌ Çѹø¿¡ ¾ÐÃàÇÒ Å©±â</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateBufferSize</code> Áö½Ã¾î´Â zlibÀÌ
- Çѹø¿¡ ¾ÐÃàÇÒ ¹ÙÀÌÆ®¼ö¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ãâ·ÂÀ» ¾î´ÀÁ¤µµ ¾ÐÃàÇϴ°¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Zlib's default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.0.45 ºÎÅÍ</td></tr>
-</table>
- <p><code class="directive">DeflateCompressionLevel</code> Áö½Ã¾î´Â
- »ç¿ëÇÒ ¾ÐÃà¼öÁØÀ» ¼±ÅÃÇÑ´Ù. °ªÀÌ Å¬¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÏÁö¸¸,
- CPU¸¦ ´õ ¸¹ÀÌ »ç¿ëÇÑ´Ù.</p>
- <p>(°¡Àå ´ú ¾ÐÃà) 1°ú (°¡Àå ¸¹ÀÌ ¾ÐÃà) 9 »çÀÌÀÇ °ªÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td><var>type</var>Àº ¾ÆÆÄÄ¡ 2.0.4 ºÎÅÍ</td></tr>
-</table>
- <p><code class="directive">DeflateFilterNote</code> Áö½Ã¾î´Â ¿äûÀÇ
- ¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÏ´Â ±âÈ£¸¦ ÁöÁ¤ÇÑ´Ù. ±âÈ£ À̸§Àº Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ °ªÀÌ´Ù. Åë°è¸¦ À§ÇØ <a href="../logs.html#accesslog">Á¢±Ù
- ·Î±×</a>¿¡¼ ±âÈ£¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
- <p>·Î±×¿¡¼ ´õ Á¤È®ÇÑ °ªÀ» ÃßÃâÇÏ·Á¸é <var>type</var> ¾Æ±Ô¸ÕÆ®·Î
- ±â·ÏÇÒ ÀڷḦ ¼±ÅÃÇÑ´Ù. <var>type</var>´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>ÇÊÅÍ ÀԷ½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù.</dd>
-
- <dt><code>Output</code></dt>
- <dd>ÇÊÅÍ Ãâ·Â½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù..</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>¾ÐÃà·üÀ» (<code>output/input * 100</code>) ÀúÀåÇÑ´Ù.
- <var>type</var> ¾Æ±Ô¸ÕÆ®¸¦ »ý·«ÇÏ¸é »ç¿ëÇÏ´Â ±âº»°ªÀÌ´Ù.</dd>
- </dl>
-
- <p>±×·¡¼ ÀÌ·¸°Ô ·Î±×¿¡ ±â·ÏÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><h3>Á¤¹ÐÇÑ ·Î±×</h3><p><code>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
-<h3>Âü°í</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateInflateLimitRequestBody" id="DeflateInflateLimitRequestBody">DeflateInflateLimitRequestBody</a> <a name="deflateinflatelimitrequestbody" id="deflateinflatelimitrequestbody">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Maximum size of inflated request bodies</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateInflateLimitRequestBody<var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>None, but LimitRequestBody applies after deflation</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>2.4.10 and later</td></tr>
-</table><p>The documentation for this directive has
- not been translated yet. Please have a look at the English
- version.</p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateInflateRatioBurst" id="DeflateInflateRatioBurst">DeflateInflateRatioBurst</a> <a name="deflateinflateratioburst" id="deflateinflateratioburst">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Maximum number of times the inflation ratio for request bodies
- can be crossed</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateInflateRatioBurst <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>3</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>2.4.10 and later</td></tr>
-</table><p>The documentation for this directive has
- not been translated yet. Please have a look at the English
- version.</p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateInflateRatioLimit" id="DeflateInflateRatioLimit">DeflateInflateRatioLimit</a> <a name="deflateinflateratiolimit" id="deflateinflateratiolimit">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Maximum inflation ratio for request bodies</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateInflateRatioLimit <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>200</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>2.4.10 and later</td></tr>
-</table><p>The documentation for this directive has
- not been translated yet. Please have a look at the English
- version.</p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>zlibÀÌ ¾ÐÃàÇÒ¶§ »ç¿ëÇÏ´Â ¸Þ¸ð¸®·®</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateMemLevel</code> Áö½Ã¾î´Â zlibÀÌ
- ¾ÐÃàÇÒ¶§ ¾ó¸¶¸¸Å ¸Þ¸ð¸®¸¦ »ç¿ëÇÒÁö °áÁ¤ÇÑ´Ù. (1°ú 9 »çÀÌÀÇ
- °ª)</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Zlib ¾ÐÃà window size</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateWindowSize</code> Áö½Ã¾î´Â zlib
- ¾ÐÃà window size¸¦ (1°ú 15 »çÀÌÀÇ °ª) ÁöÁ¤ÇÑ´Ù. ÀϹÝÀûÀ¸·Î
- window size°¡ Ŭ¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÑ´Ù.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_deflate.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#modemstandard">ModemStandard</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ModemStandard" id="ModemStandard">ModemStandard</a> <a name="modemstandard" id="modemstandard">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_dialup.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#modemstandard">ModemStandard</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="modemstandard" id="modemstandard">Directive</a> <a name="ModemStandard" id="ModemStandard">ModemStandard</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_dialup.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#fallbackresource">FallbackResource</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DirectoryCheckHandler" id="DirectoryCheckHandler">DirectoryCheckHandler</a> <a name="directorycheckhandler" id="directorycheckhandler">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_dir.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#fallbackresource">FallbackResource</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="directorycheckhandler" id="directorycheckhandler">Directive</a> <a name="DirectoryCheckHandler" id="DirectoryCheckHandler">DirectoryCheckHandler</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#fallbackresource">FallbackResource</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DirectoryCheckHandler" id="DirectoryCheckHandler">DirectoryCheckHandler</a> <a name="directorycheckhandler" id="directorycheckhandler">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_dir</td></tr>
</table><p>Documentation not yet translated. Please see English version of document.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#fallbackresource">FallbackResource</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DirectoryCheckHandler" id="DirectoryCheckHandler">DirectoryCheckHandler</a> <a name="directorycheckhandler" id="directorycheckhandler">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dir</td></tr>
</table><p>Documentation not yet translated. Please see English version of document.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#fallbackresource">FallbackResource</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DirectoryCheckHandler" id="DirectoryCheckHandler">DirectoryCheckHandler</a> <a name="directorycheckhandler" id="directorycheckhandler">Yönergesi</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#enable">Enabling dumpio Support</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Enabling dumpio Support</a></h2>
-
-
- <p>To enable the module, it should be compiled and loaded
- in to your running Apache configuration. Logging can then
- be enabled or disabled separately for input and output via
- the below directives. Additionally, <code class="module"><a href="../mod/mod_dumpio.html">mod_dumpio</a></code>
- needs to be configured to <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> <code>trace7</code>:
- </p>
- <pre class="prettyprint lang-config">LogLevel dumpio:trace7</pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DumpIOInput" id="DumpIOInput">DumpIOInput</a> <a name="dumpioinput" id="dumpioinput">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dump all input data to the error log</td></tr>
<div class="example"><h3>Example</h3><pre class="prettyprint lang-config">DumpIOOutput On</pre>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enable" id="enable">Enabling dumpio Support</a></h2>
+
+
+ <p>To enable the module, it should be compiled and loaded
+ in to your running Apache configuration. Logging can then
+ be enabled or disabled separately for input and output via
+ the below directives. Additionally, <code class="module"><a href="../mod/mod_dumpio.html">mod_dumpio</a></code>
+ needs to be configured to <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> <code>trace7</code>:
+ </p>
+ <pre class="prettyprint lang-config">LogLevel dumpio:trace7</pre>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#enable">Activation du support dumpio</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Activation du support dumpio</a></h2>
-
-
- <p>Pour activer le module, ce dernier doit être compilé et chargé
- par l'intermédiaire de la configuration de votre instance d'Apache.
- La journalisation peut ensuite être activée ou
- désactivée séparément
- pour les entrées et sorties à l'aide des directives ci-dessous. En
- outre, <code class="module"><a href="../mod/mod_dumpio.html">mod_dumpio</a></code> doit être configuré à <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> <code>trace7</code> :</p>
- <pre class="prettyprint lang-config">LogLevel dumpio:trace7</pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="dumpioinput" id="dumpioinput">Directive</a> <a name="DumpIOInput" id="DumpIOInput">DumpIOInput</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enregistre toutes les entrées dans le journal des
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">DumpIOOutput On</pre>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enable" id="enable">Activation du support dumpio</a></h2>
+
+
+ <p>Pour activer le module, ce dernier doit être compilé et chargé
+ par l'intermédiaire de la configuration de votre instance d'Apache.
+ La journalisation peut ensuite être activée ou
+ désactivée séparément
+ pour les entrées et sorties à l'aide des directives ci-dessous. En
+ outre, <code class="module"><a href="../mod/mod_dumpio.html">mod_dumpio</a></code> doit être configuré à <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> <code>trace7</code> :</p>
+ <pre class="prettyprint lang-config">LogLevel dumpio:trace7</pre>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#enable">dumpio サポートを有効にする</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">dumpio サポートを有効にする</a></h2>
-
-
- <p>このモジュールを有効にするには、モジュールがコンパイルされていて、
- 実行する Apache の設定でサーバに組み込まれている必要があります。
- ロギング機能は、以下のディレクティブを使って有効にしたり
- 無効にしたりできます。</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DumpIOInput" id="DumpIOInput">DumpIOInput</a> <a name="dumpioinput" id="dumpioinput">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>エラーログにすべての入力データをダンプ</td></tr>
</code></p></div>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enable" id="enable">dumpio サポートを有効にする</a></h2>
+
+
+ <p>このモジュールを有効にするには、モジュールがコンパイルされていて、
+ 実行する Apache の設定でサーバに組み込まれている必要があります。
+ ロギング機能は、以下のディレクティブを使って有効にしたり
+ 無効にしたりできます。</p>
+</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_dumpio.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#protocolecho">ProtocolEcho</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProtocolEcho" id="ProtocolEcho">ProtocolEcho</a> <a name="protocolecho" id="protocolecho">Directive</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_echo.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#protocolecho">ProtocolEcho</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="protocolecho" id="protocolecho">Directive</a> <a name="ProtocolEcho" id="ProtocolEcho">ProtocolEcho</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_echo.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#protocolecho">ProtocolEcho</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProtocolEcho" id="ProtocolEcho">ProtocolEcho</a> <a name="protocolecho" id="protocolecho">ディレクティブ</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_echo.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#protocolecho">ProtocolEcho</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProtocolEcho" id="ProtocolEcho">ProtocolEcho</a> <a name="protocolecho" id="protocolecho">Áö½Ã¾î</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_echo.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../env.html">Environment Variables</a></li>
<li><code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="PassEnv" id="PassEnv">PassEnv</a> <a name="passenv" id="passenv">Directive</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_env.html" title="English"> en </a> |
<li><a href="../env.html">Variables d'environnement</a></li>
<li><code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="passenv" id="passenv">Directive</a> <a name="PassEnv" id="PassEnv">PassEnv</a></h2>
<table class="directive">
</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><a href="../env.html">環境変数</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="PassEnv" id="PassEnv">PassEnv</a> <a name="passenv" id="passenv">ディレクティブ</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><a href="../env.html">ȯ°æº¯¼ö</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="PassEnv" id="PassEnv">PassEnv</a> <a name="passenv" id="passenv">Áö½Ã¾î</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../env.html">Ortam Değişkenleri</a></li>
<li><code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="PassEnv" id="PassEnv">PassEnv</a> <a name="passenv" id="passenv">Yönergesi</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#using">Using the <code>mod_example_hooks</code> Module</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Example" id="Example">Example</a> <a name="example" id="example">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Demonstration directive to illustrate the Apache module
+API</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Example</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_example_hooks</td></tr>
+</table>
+ <p>The <code class="directive">Example</code> directive just sets a demonstration
+ flag which the example module's content handler displays. It
+ takes no arguments. If you browse to an URL to which the
+ example-hooks content-handler applies, you will get a display of the
+ routines within the module and how and in what order they were
+ called to service the document request. The effect of this
+ directive one can observe under the point "<code>Example
+ directive declared here: YES/NO</code>".</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="compiling" id="compiling">Compiling the example_hooks module</a></h2>
to browse to this location and see the brief display mentioned
earlier.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Example" id="Example">Example</a> <a name="example" id="example">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Demonstration directive to illustrate the Apache module
-API</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Example</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_example_hooks</td></tr>
-</table>
- <p>The <code class="directive">Example</code> directive just sets a demonstration
- flag which the example module's content handler displays. It
- takes no arguments. If you browse to an URL to which the
- example-hooks content-handler applies, you will get a display of the
- routines within the module and how and in what order they were
- called to service the document request. The effect of this
- directive one can observe under the point "<code>Example
- directive declared here: YES/NO</code>".</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_example_hooks.html" title="English"> en </a> |
<code>mod_example_hooks</code></a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="example" id="example">Directive</a> <a name="Example" id="Example">Example</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directive de démonstration pour illustrer l'API des modules
+Apache</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Example</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_example_hooks</td></tr>
+</table>
+ <p>La directive <code class="directive">Example</code> n'a pour fonction que
+ de définir un drapeau de démonstration que le gestionnaire de
+ contenu du module example_hooks va afficher. Elle ne possède aucun
+ argument. Si vous naviguez vers une URL à laquelle le gestionnaire
+ de contenu example_hooks s'applique, vous verrez s'afficher les routines
+ du module, ainsi que l'ordre dans lequel elles ont été appelées pour
+ servir le document demandé. On peut observer l'effet de cette
+ directive dans la phrase "<code>Example
+ directive declared here: YES/NO</code>".</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="compiling" id="compiling">Compilation du module example_hooks</a></h2>
vous devriez pouvoir accéder à ce fichier et voir s'afficher ce qui
a été décrit plus haut.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="example" id="example">Directive</a> <a name="Example" id="Example">Example</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directive de démonstration pour illustrer l'API des modules
-Apache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Example</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_example_hooks</td></tr>
-</table>
- <p>La directive <code class="directive">Example</code> n'a pour fonction que
- de définir un drapeau de démonstration que le gestionnaire de
- contenu du module example_hooks va afficher. Elle ne possède aucun
- argument. Si vous naviguez vers une URL à laquelle le gestionnaire
- de contenu example_hooks s'applique, vous verrez s'afficher les routines
- du module, ainsi que l'ordre dans lequel elles ont été appelées pour
- servir le document demandé. On peut observer l'effet de cette
- directive dans la phrase "<code>Example
- directive declared here: YES/NO</code>".</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_example_hooks.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#using"><code>mod_example_hooks</code> ¸ðµâ »ç¿ëÇϱâ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Example" id="Example">Example</a> <a name="example" id="example">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇϱâÀ§ÇÑ ¿¹Á¦ Áö½Ã¾î</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Example</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_example_hooks</td></tr>
+</table>
+ <p><code class="directive">Example</code> Áö½Ã¾î´Â example ¸ðµâÀÇ
+ ³»¿ëÇڵ鷯°¡ °£´ÜÇÑ ¹®±¸¸¦ º¸ÀÏÁö ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
+ ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¾Ê´Â´Ù. example ³»¿ëÇڵ鷯¸¦ Àû¿ëÇÑ URL¿¡
+ Á¢¼ÓÇÏ¸é ¹®¼ ¿äûÀ» ¼ºñ½ºÇϱâÀ§ÇØ ¸ðµâ¾È¿¡ ÇÔ¼öµéÀÌ ¾î¶»°Ô
+ ±×¸®°í ¾î¶² ¼ø¼·Î ºÒ¸®´ÂÁö ¾Ë ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾îÀÇ È¿°ú´Â
+ "<code>Example directive declared here: YES/NO</code>"·Î
+ È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="compiling" id="compiling">example ¸ðµâ ÄÄÆÄÀÏÇϱâ</a></h2>
<p>¼¹ö¸¦ Àç½ÃÀÛÇÑ ÈÄ ÀÌ À§Ä¡¸¦ ºê¶ó¿ì¡ÇÏ¸é ¾Õ¿¡¼ ¸»ÇÑ
³»¿ëÀ» º¸°ÔµÉ °ÍÀÌ´Ù.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Example" id="Example">Example</a> <a name="example" id="example">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇϱâÀ§ÇÑ ¿¹Á¦ Áö½Ã¾î</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Example</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_example_hooks</td></tr>
-</table>
- <p><code class="directive">Example</code> Áö½Ã¾î´Â example ¸ðµâÀÇ
- ³»¿ëÇڵ鷯°¡ °£´ÜÇÑ ¹®±¸¸¦ º¸ÀÏÁö ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¾Ê´Â´Ù. example ³»¿ëÇڵ鷯¸¦ Àû¿ëÇÑ URL¿¡
- Á¢¼ÓÇÏ¸é ¹®¼ ¿äûÀ» ¼ºñ½ºÇϱâÀ§ÇØ ¸ðµâ¾È¿¡ ÇÔ¼öµéÀÌ ¾î¶»°Ô
- ±×¸®°í ¾î¶² ¼ø¼·Î ºÒ¸®´ÂÁö ¾Ë ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾îÀÇ È¿°ú´Â
- "<code>Example directive declared here: YES/NO</code>"·Î
- È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_example_hooks.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#AltSyn">Alternate Interval Syntax</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="AltSyn" id="AltSyn">Alternate Interval Syntax</a></h2>
- <p>The <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> and
- <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> directives
- can also be defined in a more readable syntax of the form:</p>
-
- <pre class="prettyprint lang-config">ExpiresDefault "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."
-ExpiresByType type/encoding "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."</pre>
-
-
- <p>where <var>base</var> is one of:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> (equivalent to
- '<code>access</code>')</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p>The <code>plus</code> keyword is optional. <var>num</var>
- should be an integer value [acceptable to <code>atoi()</code>],
- and <var>type</var> is one of:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>For example, any of the following directives can be used to
- make documents expire 1 month after being accessed, by
- default:</p>
-
- <pre class="prettyprint lang-config">ExpiresDefault "access plus 1 month"
-ExpiresDefault "access plus 4 weeks"
-ExpiresDefault "access plus 30 days"</pre>
-
-
- <p>The expiry time can be fine-tuned by adding several
- '<var>num</var> <var>type</var>' clauses:</p>
-
- <pre class="prettyprint lang-config">ExpiresByType text/html "access plus 1 month 15 days 2 hours"
-ExpiresByType image/gif "modification plus 5 hours 3 minutes"</pre>
-
-
- <p>Note that if you use a modification date based setting, the
- Expires header will <strong>not</strong> be added to content
- that does not come from a file on disk. This is due to the fact
- that there is no modification time for such content.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a> <a name="expiresactive" id="expiresactive">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables generation of <code>Expires</code>
description as well.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="AltSyn" id="AltSyn">Alternate Interval Syntax</a></h2>
+ <p>The <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> and
+ <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> directives
+ can also be defined in a more readable syntax of the form:</p>
+
+ <pre class="prettyprint lang-config">ExpiresDefault "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."
+ExpiresByType type/encoding "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."</pre>
+
+
+ <p>where <var>base</var> is one of:</p>
+
+ <ul>
+ <li><code>access</code></li>
+
+ <li><code>now</code> (equivalent to
+ '<code>access</code>')</li>
+
+ <li><code>modification</code></li>
+ </ul>
+
+ <p>The <code>plus</code> keyword is optional. <var>num</var>
+ should be an integer value [acceptable to <code>atoi()</code>],
+ and <var>type</var> is one of:</p>
+
+ <ul>
+ <li><code>years</code></li>
+ <li><code>months</code></li>
+ <li><code>weeks</code></li>
+ <li><code>days</code></li>
+ <li><code>hours</code></li>
+ <li><code>minutes</code></li>
+ <li><code>seconds</code></li>
+ </ul>
+
+ <p>For example, any of the following directives can be used to
+ make documents expire 1 month after being accessed, by
+ default:</p>
+
+ <pre class="prettyprint lang-config">ExpiresDefault "access plus 1 month"
+ExpiresDefault "access plus 4 weeks"
+ExpiresDefault "access plus 30 days"</pre>
+
+
+ <p>The expiry time can be fine-tuned by adding several
+ '<var>num</var> <var>type</var>' clauses:</p>
+
+ <pre class="prettyprint lang-config">ExpiresByType text/html "access plus 1 month 15 days 2 hours"
+ExpiresByType image/gif "modification plus 5 hours 3 minutes"</pre>
+
+
+ <p>Note that if you use a modification date based setting, the
+ Expires header will <strong>not</strong> be added to content
+ that does not come from a file on disk. This is due to the fact
+ that there is no modification time for such content.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_expires.html" title="English"> en </a> |
l'intervalle</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="AltSyn" id="AltSyn">Autre syntaxe de définition de
-l'intervalle</a></h2>
- <p>Pour une syntaxe plus lisible, on peut aussi utiliser les
- directives <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> et <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> comme suit :</p>
-
- <pre class="prettyprint lang-config">ExpiresDefault "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."
-ExpiresByType type/encoding "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."</pre>
-
-
- <p>où <var>base</var> peut être :</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> (équivalent à
- '<code>access</code>')</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p>Le mot-clé <code>plus</code> est optionnel. <var>num</var> doit
- correspondre à une valeur entière [compatible avec
- <code>atoi()</code>], et <var>type</var> peut être choisi parmi :</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>Par exemple, pour faire expirer par défaut les documents 1 mois
- après leur accès, on peut utiliser une des directives suivantes :</p>
- <pre class="prettyprint lang-config">ExpiresDefault "access plus 1 month"
-ExpiresDefault "access plus 4 weeks"
-ExpiresDefault "access plus 30 days"</pre>
-
-
-
- <p>La date d'expiration peut être définie plus précisément en
- ajoutant plusieurs clauses '<var>num</var> <var>type</var>' :</p>
-
- <pre class="prettyprint lang-config">ExpiresByType text/html "access plus 1 month 15 days 2 hours"
-ExpiresByType image/gif "modification plus 5 hours 3 minutes"</pre>
-
-
- <p>Notez que si vous utilisez une configuration basée sur la date de
- modification, l'en-tête Expires ne sera pas ajouté à un contenu qui
- ne provient pas directement d'un fichier sur disque ; et ceci tout
- simplement parce que ce type de contenu ne possède pas de date de
- modification.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="expiresactive" id="expiresactive">Directive</a> <a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active la génération d'en-têtes
syntaxe de l'argument, ainsi que la description de la <a href="#AltSyn">syntaxe alternative</a>.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="AltSyn" id="AltSyn">Autre syntaxe de définition de
+l'intervalle</a></h2>
+ <p>Pour une syntaxe plus lisible, on peut aussi utiliser les
+ directives <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> et <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> comme suit :</p>
+
+ <pre class="prettyprint lang-config">ExpiresDefault "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."
+ExpiresByType type/encoding "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."</pre>
+
+
+ <p>où <var>base</var> peut être :</p>
+
+ <ul>
+ <li><code>access</code></li>
+
+ <li><code>now</code> (équivalent à
+ '<code>access</code>')</li>
+
+ <li><code>modification</code></li>
+ </ul>
+
+ <p>Le mot-clé <code>plus</code> est optionnel. <var>num</var> doit
+ correspondre à une valeur entière [compatible avec
+ <code>atoi()</code>], et <var>type</var> peut être choisi parmi :</p>
+
+ <ul>
+ <li><code>years</code></li>
+ <li><code>months</code></li>
+ <li><code>weeks</code></li>
+ <li><code>days</code></li>
+ <li><code>hours</code></li>
+ <li><code>minutes</code></li>
+ <li><code>seconds</code></li>
+ </ul>
+
+ <p>Par exemple, pour faire expirer par défaut les documents 1 mois
+ après leur accès, on peut utiliser une des directives suivantes :</p>
+ <pre class="prettyprint lang-config">ExpiresDefault "access plus 1 month"
+ExpiresDefault "access plus 4 weeks"
+ExpiresDefault "access plus 30 days"</pre>
+
+
+
+ <p>La date d'expiration peut être définie plus précisément en
+ ajoutant plusieurs clauses '<var>num</var> <var>type</var>' :</p>
+
+ <pre class="prettyprint lang-config">ExpiresByType text/html "access plus 1 month 15 days 2 hours"
+ExpiresByType image/gif "modification plus 5 hours 3 minutes"</pre>
+
+
+ <p>Notez que si vous utilisez une configuration basée sur la date de
+ modification, l'en-tête Expires ne sera pas ajouté à un contenu qui
+ ne provient pas directement d'un fichier sur disque ; et ceci tout
+ simplement parce que ce type de contenu ne possède pas de date de
+ modification.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_expires.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#AltSyn">代替期間指定構文</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="AltSyn" id="AltSyn">代替期間指定構文</a></h2>
-
- <p><code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> ディレクティブと
- <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> ディレクティブは
- 以下のより読み易い構文を使って定義することができます:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "<base> [plus] {<num>
- <type>}*"<br />
- ExpiresByType type/encoding "<base> [plus]
- {<num> <type>}*"
- </code></p></div>
-
- <p><base> は以下のどれかです:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> ('<code>access</code>' と等価)</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p><code>plus</code> キーワードは省略可能です。<num>
- は (<code>atoi()</code> が受け付ける) 整数値、
- <type> は以下のどれかです:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>例えば、以下のディレクティブはどれもデフォルトで文書がアクセスの 1 ヶ月後に
- 期限が切れるようにするために使えます:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </code></p></div>
-
- <p>期限切れ時刻はいくつか
- '<num> <type>' 節を追加することでより細かく
- 制御することができます:</p>
-
- <div class="example"><p><code>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </code></p></div>
-
- <p>修正時刻に基づいた設定を使用している場合、Expires ヘッダは
- ディスクのファイル以外のコンテンツには<strong>追加されない</strong>ことに注意
- してください。そのようなコンテンツには修正時刻は存在しないからです。</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a> <a name="expiresactive" id="expiresactive">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td><code>Expires</code> ヘッダの生成を有効にする</td></tr>
参照してください。</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="AltSyn" id="AltSyn">代替期間指定構文</a></h2>
+
+ <p><code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> ディレクティブと
+ <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> ディレクティブは
+ 以下のより読み易い構文を使って定義することができます:</p>
+
+ <div class="example"><p><code>
+ ExpiresDefault "<base> [plus] {<num>
+ <type>}*"<br />
+ ExpiresByType type/encoding "<base> [plus]
+ {<num> <type>}*"
+ </code></p></div>
+
+ <p><base> は以下のどれかです:</p>
+
+ <ul>
+ <li><code>access</code></li>
+
+ <li><code>now</code> ('<code>access</code>' と等価)</li>
+
+ <li><code>modification</code></li>
+ </ul>
+
+ <p><code>plus</code> キーワードは省略可能です。<num>
+ は (<code>atoi()</code> が受け付ける) 整数値、
+ <type> は以下のどれかです:</p>
+
+ <ul>
+ <li><code>years</code></li>
+ <li><code>months</code></li>
+ <li><code>weeks</code></li>
+ <li><code>days</code></li>
+ <li><code>hours</code></li>
+ <li><code>minutes</code></li>
+ <li><code>seconds</code></li>
+ </ul>
+
+ <p>例えば、以下のディレクティブはどれもデフォルトで文書がアクセスの 1 ヶ月後に
+ 期限が切れるようにするために使えます:</p>
+
+ <div class="example"><p><code>
+ ExpiresDefault "access plus 1 month"<br />
+ ExpiresDefault "access plus 4 weeks"<br />
+ ExpiresDefault "access plus 30 days"
+ </code></p></div>
+
+ <p>期限切れ時刻はいくつか
+ '<num> <type>' 節を追加することでより細かく
+ 制御することができます:</p>
+
+ <div class="example"><p><code>
+ ExpiresByType text/html "access plus 1 month 15
+ days 2 hours"<br />
+ ExpiresByType image/gif "modification plus 5 hours 3
+ minutes"
+ </code></p></div>
+
+ <p>修正時刻に基づいた設定を使用している場合、Expires ヘッダは
+ ディスクのファイル以外のコンテンツには<strong>追加されない</strong>ことに注意
+ してください。そのようなコンテンツには修正時刻は存在しないからです。</p>
+</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_expires.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#AltSyn">´Ù¸¥ ³»ºÎ ¹®¹ý</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="AltSyn" id="AltSyn">´Ù¸¥ ³»ºÎ ¹®¹ý</a></h2>
- <p><code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code>¿Í
- <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code>
- Áö½Ã¾î¸¦ ´õ Àбâ ÁÁÀº Çü½ÄÀ¸·Î ±â¼úÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "<base> [plus] {<num>
- <type>}*"<br />
- ExpiresByType type/encoding "<base> [plus]
- {<num> <type>}*"
- </code></p></div>
-
- <p><base>´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> ('<code>access</code>'¿Í °°À½)</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p><code>plus</code> Å°¿öµå´Â ¾ø¾îµµ µÈ´Ù. <num>Àº
- [<code>atoi()</code>¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â] Á¤¼ö°ªÀÌ´Ù.
- <type>Àº ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>¿¹¸¦ µé¾î, ´ÙÀ½ ¸ðµÎ´Â ¹®¼°¡ ±âº»ÀûÀ¸·Î Á¢¼ÓµÈÁö 1´ÞÈÄ¿¡
- ¸¸±âµÈ´Ù°í ¼³Á¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </code></p></div>
-
- <p>'<num> <type>' ±¸¹®À» ¹Ýº¹Çؼ »ç¿ëÇÏ¿©
- ¸¸±â½Ã°£À» ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </code></p></div>
-
- <p>¸¸¾à ¼öÁ¤½Ã°£(modification)À» ±âÁØÀ¸·Î ¸¸±â½Ã°£À» ¼³Á¤ÇÏ´Â
- °æ¿ì ³»¿ëÀ» µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏ¿¡¼ °¡Á®¿ÀÁö ¾Ê´Â´Ù¸é Expires
- Çì´õ¸¦ ºÙÀÌÁö <strong>¾Ê´Â´Ù</strong>. ÀÌ °æ¿ì ³»¿ë¿¡ ¼öÁ¤½Ã°£ÀÌ
- ¾ø±â ¶§¹®ÀÌ´Ù.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a> <a name="expiresactive" id="expiresactive">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td><code>Expires</code> Çì´õ¸¦ »ý¼ºÇÑ´Ù</td></tr>
Âü°íÇ϶ó.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="AltSyn" id="AltSyn">´Ù¸¥ ³»ºÎ ¹®¹ý</a></h2>
+ <p><code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code>¿Í
+ <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code>
+ Áö½Ã¾î¸¦ ´õ Àбâ ÁÁÀº Çü½ÄÀ¸·Î ±â¼úÇÒ ¼ö ÀÖ´Ù:</p>
+
+ <div class="example"><p><code>
+ ExpiresDefault "<base> [plus] {<num>
+ <type>}*"<br />
+ ExpiresByType type/encoding "<base> [plus]
+ {<num> <type>}*"
+ </code></p></div>
+
+ <p><base>´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
+
+ <ul>
+ <li><code>access</code></li>
+
+ <li><code>now</code> ('<code>access</code>'¿Í °°À½)</li>
+
+ <li><code>modification</code></li>
+ </ul>
+
+ <p><code>plus</code> Å°¿öµå´Â ¾ø¾îµµ µÈ´Ù. <num>Àº
+ [<code>atoi()</code>¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â] Á¤¼ö°ªÀÌ´Ù.
+ <type>Àº ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
+
+ <ul>
+ <li><code>years</code></li>
+ <li><code>months</code></li>
+ <li><code>weeks</code></li>
+ <li><code>days</code></li>
+ <li><code>hours</code></li>
+ <li><code>minutes</code></li>
+ <li><code>seconds</code></li>
+ </ul>
+
+ <p>¿¹¸¦ µé¾î, ´ÙÀ½ ¸ðµÎ´Â ¹®¼°¡ ±âº»ÀûÀ¸·Î Á¢¼ÓµÈÁö 1´ÞÈÄ¿¡
+ ¸¸±âµÈ´Ù°í ¼³Á¤ÇÑ´Ù:</p>
+
+ <div class="example"><p><code>
+ ExpiresDefault "access plus 1 month"<br />
+ ExpiresDefault "access plus 4 weeks"<br />
+ ExpiresDefault "access plus 30 days"
+ </code></p></div>
+
+ <p>'<num> <type>' ±¸¹®À» ¹Ýº¹Çؼ »ç¿ëÇÏ¿©
+ ¸¸±â½Ã°£À» ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù:</p>
+
+ <div class="example"><p><code>
+ ExpiresByType text/html "access plus 1 month 15
+ days 2 hours"<br />
+ ExpiresByType image/gif "modification plus 5 hours 3
+ minutes"
+ </code></p></div>
+
+ <p>¸¸¾à ¼öÁ¤½Ã°£(modification)À» ±âÁØÀ¸·Î ¸¸±â½Ã°£À» ¼³Á¤ÇÏ´Â
+ °æ¿ì ³»¿ëÀ» µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏ¿¡¼ °¡Á®¿ÀÁö ¾Ê´Â´Ù¸é Expires
+ Çì´õ¸¦ ºÙÀÌÁö <strong>¾Ê´Â´Ù</strong>. ÀÌ °æ¿ì ³»¿ë¿¡ ¼öÁ¤½Ã°£ÀÌ
+ ¾ø±â ¶§¹®ÀÌ´Ù.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_expires.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../filter.html">Filters</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
- <h3>Generating HTML from some other type of response</h3>
- <pre class="prettyprint lang-config"># mod_ext_filter directive to define a filter
-# to HTML-ize text/c files using the external
-# program /usr/bin/enscript, with the type of
-# the result set to text/html
-ExtFilterDefine c-to-html mode=output \
- intype=text/c outtype=text/html \
- cmd="/usr/bin/enscript --color -W html -Ec -o - -"
-
-<Directory "/export/home/trawick/apacheinst/htdocs/c">
- # core directive to cause the new filter to
- # be run on output
- SetOutputFilter c-to-html
-
- # mod_mime directive to set the type of .c
- # files to text/c
- AddType text/c .c
-</Directory></pre>
-
-
-
- <h3>Implementing a content encoding filter</h3>
- <p>Note: this gzip example is just for the purposes of illustration.
- Please refer to <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> for a practical
- implementation.</p>
-
- <pre class="prettyprint lang-config"># mod_ext_filter directive to define the external filter
-ExtFilterDefine gzip mode=output cmd=/bin/gzip
-
-<Location /gzipped>
-
- # core directive to cause the gzip filter to be
- # run on output
- SetOutputFilter gzip
-
- # mod_headers directive to add
- # "Content-Encoding: gzip" header field
- Header set Content-Encoding gzip
-</Location></pre>
-
-
-
- <h3>Slowing down the server</h3>
- <pre class="prettyprint lang-config"># mod_ext_filter directive to define a filter
-# which runs everything through cat; cat doesn't
-# modify anything; it just introduces extra pathlength
-# and consumes more resources
-ExtFilterDefine slowdown mode=output cmd=/bin/cat \
- preservescontentlength
-
-<Location />
- # core directive to cause the slowdown filter to
- # be run several times on output
- #
- SetOutputFilter slowdown;slowdown;slowdown
-</Location></pre>
-
-
-
- <h3>Using sed to replace text in the response</h3>
- <pre class="prettyprint lang-config"># mod_ext_filter directive to define a filter which
-# replaces text in the response
-#
-ExtFilterDefine fixtext mode=output intype=text/html \
- cmd="/bin/sed s/verdana/arial/g"
-
-<Location />
- # core directive to cause the fixtext filter to
- # be run on output
- SetOutputFilter fixtext
-</Location></pre>
-
-
-<div class="note">
-<p>You can do the same thing using <code class="module"><a href="../mod/mod_substitute.html">mod_substitute</a></code>
-without invoking an external process.</p>
-</div>
-
-
- <h3>Tracing another filter</h3>
- <pre class="prettyprint lang-config"># Trace the data read and written by mod_deflate
-# for a particular client (IP 192.168.1.31)
-# experiencing compression problems.
-# This filter will trace what goes into mod_deflate.
-ExtFilterDefine tracebefore \
- cmd="/bin/tracefilter.pl /tmp/tracebefore" \
- EnableEnv=trace_this_client
-
-# This filter will trace what goes after mod_deflate.
-# Note that without the ftype parameter, the default
-# filter type of AP_FTYPE_RESOURCE would cause the
-# filter to be placed *before* mod_deflate in the filter
-# chain. Giving it a numeric value slightly higher than
-# AP_FTYPE_CONTENT_SET will ensure that it is placed
-# after mod_deflate.
-ExtFilterDefine traceafter \
- cmd="/bin/tracefilter.pl /tmp/traceafter" \
- EnableEnv=trace_this_client ftype=21
-
-<Directory /usr/local/docs>
- SetEnvIf Remote_Addr 192.168.1.31 trace_this_client
- SetOutputFilter tracebefore;deflate;traceafter
-</Directory></pre>
-
-
- <div class="example"><h3>Here is the filter which traces the data:</h3><pre class="prettyprint lang-perl">#!/usr/local/bin/perl -w
-use strict;
-
-open(SAVE, ">$ARGV[0]")
- or die "can't open $ARGV[0]: $?";
-
-while (<STDIN>) {
- print SAVE $_;
- print $_;
-}
-
-close(SAVE);</pre>
-</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define an external filter</td></tr>
<p>Messages written to the filter's standard error will be stored
in the Apache error log.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
+
+ <h3>Generating HTML from some other type of response</h3>
+ <pre class="prettyprint lang-config"># mod_ext_filter directive to define a filter
+# to HTML-ize text/c files using the external
+# program /usr/bin/enscript, with the type of
+# the result set to text/html
+ExtFilterDefine c-to-html mode=output \
+ intype=text/c outtype=text/html \
+ cmd="/usr/bin/enscript --color -W html -Ec -o - -"
+
+<Directory "/export/home/trawick/apacheinst/htdocs/c">
+ # core directive to cause the new filter to
+ # be run on output
+ SetOutputFilter c-to-html
+
+ # mod_mime directive to set the type of .c
+ # files to text/c
+ AddType text/c .c
+</Directory></pre>
+
+
+
+ <h3>Implementing a content encoding filter</h3>
+ <p>Note: this gzip example is just for the purposes of illustration.
+ Please refer to <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> for a practical
+ implementation.</p>
+
+ <pre class="prettyprint lang-config"># mod_ext_filter directive to define the external filter
+ExtFilterDefine gzip mode=output cmd=/bin/gzip
+
+<Location /gzipped>
+
+ # core directive to cause the gzip filter to be
+ # run on output
+ SetOutputFilter gzip
+
+ # mod_headers directive to add
+ # "Content-Encoding: gzip" header field
+ Header set Content-Encoding gzip
+</Location></pre>
+
+
+
+ <h3>Slowing down the server</h3>
+ <pre class="prettyprint lang-config"># mod_ext_filter directive to define a filter
+# which runs everything through cat; cat doesn't
+# modify anything; it just introduces extra pathlength
+# and consumes more resources
+ExtFilterDefine slowdown mode=output cmd=/bin/cat \
+ preservescontentlength
+
+<Location />
+ # core directive to cause the slowdown filter to
+ # be run several times on output
+ #
+ SetOutputFilter slowdown;slowdown;slowdown
+</Location></pre>
+
+
+
+ <h3>Using sed to replace text in the response</h3>
+ <pre class="prettyprint lang-config"># mod_ext_filter directive to define a filter which
+# replaces text in the response
+#
+ExtFilterDefine fixtext mode=output intype=text/html \
+ cmd="/bin/sed s/verdana/arial/g"
+
+<Location />
+ # core directive to cause the fixtext filter to
+ # be run on output
+ SetOutputFilter fixtext
+</Location></pre>
+
+
+<div class="note">
+<p>You can do the same thing using <code class="module"><a href="../mod/mod_substitute.html">mod_substitute</a></code>
+without invoking an external process.</p>
+</div>
+
+
+ <h3>Tracing another filter</h3>
+ <pre class="prettyprint lang-config"># Trace the data read and written by mod_deflate
+# for a particular client (IP 192.168.1.31)
+# experiencing compression problems.
+# This filter will trace what goes into mod_deflate.
+ExtFilterDefine tracebefore \
+ cmd="/bin/tracefilter.pl /tmp/tracebefore" \
+ EnableEnv=trace_this_client
+
+# This filter will trace what goes after mod_deflate.
+# Note that without the ftype parameter, the default
+# filter type of AP_FTYPE_RESOURCE would cause the
+# filter to be placed *before* mod_deflate in the filter
+# chain. Giving it a numeric value slightly higher than
+# AP_FTYPE_CONTENT_SET will ensure that it is placed
+# after mod_deflate.
+ExtFilterDefine traceafter \
+ cmd="/bin/tracefilter.pl /tmp/traceafter" \
+ EnableEnv=trace_this_client ftype=21
+
+<Directory /usr/local/docs>
+ SetEnvIf Remote_Addr 192.168.1.31 trace_this_client
+ SetOutputFilter tracebefore;deflate;traceafter
+</Directory></pre>
+
+
+ <div class="example"><h3>Here is the filter which traces the data:</h3><pre class="prettyprint lang-perl">#!/usr/local/bin/perl -w
+use strict;
+
+open(SAVE, ">$ARGV[0]")
+ or die "can't open $ARGV[0]: $?";
+
+while (<STDIN>) {
+ print SAVE $_;
+ print $_;
+}
+
+close(SAVE);</pre>
+</div>
+
</div>
</div>
<div class="bottomlang">
<li><a href="../filter.html">Filtres</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Exemples</a></h2>
-
- <h3>Générer du HTML à partir d'un autre type de
- contenu</h3>
-
- <pre class="prettyprint lang-config"># la directive de mod_ext_filter définissant un filtre
-# permettant de mettre des fichiers text/c au format HTML en
-# utilisant le programme externe /usr/bin/enscript, le type du
-# fichier résultant étant défini à text/html
-ExtFilterDefine c-to-html mode=output \
- intype=text/c outtype=text/html \
- cmd="/usr/bin/enscript --color -W html -Ec -o - -"
-
-<Directory "/export/home/trawick/apacheinst/htdocs/c">
- # directive de base permettant de traiter la sortie avec le
- # nouveau filtre
- SetOutputFilter c-to-html
-
- # directive de mod_mime définissant le type des fichiers dont
- # le nom possède l'extension .c à text/c
- AddType text/c .c
-</Directory></pre>
-
-
-
- <h3>Implémentation d'un filtre de codage de
- contenu</h3>
- <p>Note : cet exemple avec gzip n'est fourni qu'à titre
- d'illustration. Veuillez vous reporter à la documentation de
- <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> pour un exemple d'implémentation plus
- pratique.</p>
-
- <pre class="prettyprint lang-config"># la directive de mod_ext_filter qui définit le filtre externe
-ExtFilterDefine gzip mode=output cmd=/bin/gzip
-
-<Location /gzipped>
-
- # directive de base permettant de traiter la sortie avec le
- # filtre gzip
- SetOutputFilter gzip
-
- # la directive de mod_headers permettant d'ajouter le champ
- # d'en-tête "Content-Encoding: gzip"
- Header set Content-Encoding gzip
-</Location></pre>
-
-
-
-
- <h3>Ralentissement du serveur</h3>
- <pre class="prettyprint lang-config"># directive de mod_ext_filter définissant un filtre qui fait
-# passer tous les flux en sortie par la commande cat ; cat ne
-# modifie rien ; elle ne fait que compliquer le cheminement des
-# flux et consommer des ressources supplémentaires
- ExtFilterDefine slowdown mode=output cmd=/bin/cat \
-ExtFilterDefine slowdown mode=output cmd=/bin/cat \
- preservescontentlength
-
-<Location />
- # directive de base permettant de traiter plusieurs fois la
- # sortie avec le filtre slowdown
- #
- SetOutputFilter slowdown;slowdown;slowdown
-</Location></pre>
-
-
-
- <h3>Utilisation de sed pour remplacer du texte dans la
- réponse</h3>
-
- <pre class="prettyprint lang-config"># directive de mod_ext_filter définissant un filtre qui
-# remplace du texte dans la réponse
-#
-ExtFilterDefine fixtext mode=output intype=text/html \
- cmd="/bin/sed s/verdana/arial/g"
-
-<Location />
- # directive de base permettant de traiter la sortie avec le
- # filtre fixtext
- SetOutputFilter fixtext
-</Location></pre>
-
-
-<div class="note">
-<p>Vous pouvez aussi utiliser <code class="module"><a href="../mod/mod_substitute.html">mod_substitute</a></code> pour
-effectuer le même traitement sans avoir à invoquer un programme
-externe.</p>
-</div>
-
-
-
- <h3>Tracer un autre filtre</h3>
- <pre class="prettyprint lang-config"># Trace les données lues et écrites par mod_deflate pour un
-# client particulier (IP 192.168.1.31) qui a des problèmes de
-# compression.
-# Ce premier filtre va tracer ce qui entre dans mod_deflate.
-ExtFilterDefine tracebefore \
- cmd="/bin/tracefilter.pl /tmp/tracebefore" \
- EnableEnv=trace_this_client
-
-# Ce second filtre va tracer ce qui sort de mod_deflate.
-# Notez que sans le paramètre ftype, le type de filtre par
-# défaut AP_FTYPE_RESOURCE placerait le filtre *avant*
-# mod_deflate dans la chaîne de filtrage. Le fait d'affecter
-# à ce paramètre une valeur numérique sensiblement supérieure à
-# AP_FTYPE_CONTENT_SET permet de s'assurer que le filtre sera
-# placé après mod_deflate.
-ExtFilterDefine traceafter \
- cmd="/bin/tracefilter.pl /tmp/traceafter" \
- EnableEnv=trace_this_client ftype=21
-
-<Directory /usr/local/docs>
- SetEnvIf Remote_Addr 192.168.1.31 trace_this_client
- SetOutputFilter tracebefore;deflate;traceafter
-</Directory></pre>
-
-
- <div class="example"><h3>Voici le filtre qui trace les données :</h3><pre class="prettyprint lang-perl">#!/usr/local/bin/perl -w
-use strict;
-
-open(SAVE, ">$ARGV[0]")
- or die "can't open $ARGV[0]: $?";
-
-while (<STDIN>) {
- print SAVE $_;
- print $_;
-}
-
-close(SAVE);</pre>
-</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="extfilterdefine" id="extfilterdefine">Directive</a> <a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit un filtre externe</td></tr>
<p>Les messages envoyés vers la sortie d'erreurs standard du filtre
seront enregistrés dans le journal des erreurs d'Apache.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Exemples</a></h2>
+
+ <h3>Générer du HTML à partir d'un autre type de
+ contenu</h3>
+
+ <pre class="prettyprint lang-config"># la directive de mod_ext_filter définissant un filtre
+# permettant de mettre des fichiers text/c au format HTML en
+# utilisant le programme externe /usr/bin/enscript, le type du
+# fichier résultant étant défini à text/html
+ExtFilterDefine c-to-html mode=output \
+ intype=text/c outtype=text/html \
+ cmd="/usr/bin/enscript --color -W html -Ec -o - -"
+
+<Directory "/export/home/trawick/apacheinst/htdocs/c">
+ # directive de base permettant de traiter la sortie avec le
+ # nouveau filtre
+ SetOutputFilter c-to-html
+
+ # directive de mod_mime définissant le type des fichiers dont
+ # le nom possède l'extension .c à text/c
+ AddType text/c .c
+</Directory></pre>
+
+
+
+ <h3>Implémentation d'un filtre de codage de
+ contenu</h3>
+ <p>Note : cet exemple avec gzip n'est fourni qu'à titre
+ d'illustration. Veuillez vous reporter à la documentation de
+ <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> pour un exemple d'implémentation plus
+ pratique.</p>
+
+ <pre class="prettyprint lang-config"># la directive de mod_ext_filter qui définit le filtre externe
+ExtFilterDefine gzip mode=output cmd=/bin/gzip
+
+<Location /gzipped>
+
+ # directive de base permettant de traiter la sortie avec le
+ # filtre gzip
+ SetOutputFilter gzip
+
+ # la directive de mod_headers permettant d'ajouter le champ
+ # d'en-tête "Content-Encoding: gzip"
+ Header set Content-Encoding gzip
+</Location></pre>
+
+
+
+
+ <h3>Ralentissement du serveur</h3>
+ <pre class="prettyprint lang-config"># directive de mod_ext_filter définissant un filtre qui fait
+# passer tous les flux en sortie par la commande cat ; cat ne
+# modifie rien ; elle ne fait que compliquer le cheminement des
+# flux et consommer des ressources supplémentaires
+ ExtFilterDefine slowdown mode=output cmd=/bin/cat \
+ExtFilterDefine slowdown mode=output cmd=/bin/cat \
+ preservescontentlength
+
+<Location />
+ # directive de base permettant de traiter plusieurs fois la
+ # sortie avec le filtre slowdown
+ #
+ SetOutputFilter slowdown;slowdown;slowdown
+</Location></pre>
+
+
+
+ <h3>Utilisation de sed pour remplacer du texte dans la
+ réponse</h3>
+
+ <pre class="prettyprint lang-config"># directive de mod_ext_filter définissant un filtre qui
+# remplace du texte dans la réponse
+#
+ExtFilterDefine fixtext mode=output intype=text/html \
+ cmd="/bin/sed s/verdana/arial/g"
+
+<Location />
+ # directive de base permettant de traiter la sortie avec le
+ # filtre fixtext
+ SetOutputFilter fixtext
+</Location></pre>
+
+
+<div class="note">
+<p>Vous pouvez aussi utiliser <code class="module"><a href="../mod/mod_substitute.html">mod_substitute</a></code> pour
+effectuer le même traitement sans avoir à invoquer un programme
+externe.</p>
+</div>
+
+
+
+ <h3>Tracer un autre filtre</h3>
+ <pre class="prettyprint lang-config"># Trace les données lues et écrites par mod_deflate pour un
+# client particulier (IP 192.168.1.31) qui a des problèmes de
+# compression.
+# Ce premier filtre va tracer ce qui entre dans mod_deflate.
+ExtFilterDefine tracebefore \
+ cmd="/bin/tracefilter.pl /tmp/tracebefore" \
+ EnableEnv=trace_this_client
+
+# Ce second filtre va tracer ce qui sort de mod_deflate.
+# Notez que sans le paramètre ftype, le type de filtre par
+# défaut AP_FTYPE_RESOURCE placerait le filtre *avant*
+# mod_deflate dans la chaîne de filtrage. Le fait d'affecter
+# à ce paramètre une valeur numérique sensiblement supérieure à
+# AP_FTYPE_CONTENT_SET permet de s'assurer que le filtre sera
+# placé après mod_deflate.
+ExtFilterDefine traceafter \
+ cmd="/bin/tracefilter.pl /tmp/traceafter" \
+ EnableEnv=trace_this_client ftype=21
+
+<Directory /usr/local/docs>
+ SetEnvIf Remote_Addr 192.168.1.31 trace_this_client
+ SetOutputFilter tracebefore;deflate;traceafter
+</Directory></pre>
+
+
+ <div class="example"><h3>Voici le filtre qui trace les données :</h3><pre class="prettyprint lang-perl">#!/usr/local/bin/perl -w
+use strict;
+
+open(SAVE, ">$ARGV[0]")
+ or die "can't open $ARGV[0]: $?";
+
+while (<STDIN>) {
+ print SAVE $_;
+ print $_;
+}
+
+close(SAVE);</pre>
+</div>
+
</div>
</div>
<div class="bottomlang">
<li><a href="../filter.html">フィルタ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>外部フィルタを定義</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_ext_filter</td></tr>
+</table>
+ <p><code class="directive">ExtFilterDefine</code> は、実行するプログラムや
+ 引数など、外部フィルタの特性を定義します。</p>
+
+ <p><var>filtername</var> は定義するフィルタの名前を指定します。
+ この名前は後で <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code>
+ ディレクティブで指定できます。名前は登録されるすべてのフィルタで
+ 一意でなくてはなりません。<em>現時点では、フィルタの登録 API からは
+ エラーは報告されません。ですから、重複する名前を使ってしまったときでも
+ ユーザにはそのことは報告されません。</em></p>
+
+ <p>続くパラメータの順番は関係無く、それらは実行する外部コマンドと、
+ 他の特性を定義します。<code>cmd=</code> だけが必須のパラメータです。
+ 指定可能なパラメータは:</p>
+
+ <dl>
+ <dt><code>cmd=<var>cmdline</var></code></dt>
+
+ <dd><code>cmd=</code> キーワードは実行する外部コマンドを指定します。
+ プログラム名の後に引数がある場合は、コマンド行は引用符で囲む
+ 必要があります (<em>例えば</em>、<code>cmd="<var>/bin/mypgm</var>
+ <var>arg1</var> <var>arg2</var>"</code> のように)。プログラムは
+ シェル経由でなく、直接実行されますので、通常のシェル用の
+ エスケープは必要ありません。プログラムの引数は空白で区切られます。
+ プログラムの引数の一部となる必要のある空白はバックスペースでエスケープ
+ できます。引数の一部になるバックスラッシュはバックスラッシュで
+ エスケープする必要があります。標準の CGI 環境変数に加えて、
+ 環境変数 DOCUMENT_URI, DOCUMENT_PATH_INFO, and
+ QUERY_STRING_UNESCAPED がプログラムのために設定されます。</dd>
+
+ <dt><code>mode=<var>mode</var></code></dt>
+
+ <dd>応答を処理するフィルタには <code>mode=output</code> (デフォルト)
+ を使います。リクエストを処理するフィルタには <code>mode=input</code>
+ を使います。<code>mode=input</code> は Apache 2.1 以降で利用可能です。</dd>
+
+ <dt><code>intype=<var>imt</var></code></dt>
+
+ <dd>このパラメータはフィルタされるべきドキュメントの
+ インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
+ 指定します。デフォルトではすべてのドキュメントがフィルタされます。
+ <code>intype=</code> が指定されていれば、フィルタは指定されていない
+ ドキュメントには適用されなくなります。</dd>
+
+ <dt><code>outtype=<var>imt</var></code></dt>
+
+ <dd>このパラメータはフィルタされたドキュメントの
+ インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
+ 指定します。フィルタ動作にともなってインターネットメディアタイプが
+ 変わる場合に有用です。デフォルトではインターネットメディアタイプは
+ 変更されません。</dd>
+
+ <dt><code>PreservesContentLength</code></dt>
+
+ <dd><code>PreservesContentLength</code> キーワードはフィルタが
+ content length <span class="transnote">(<em>訳注:</em> コンテントの長さ)</span>
+ を変更しないということを指定します。ほとんどのフィルタは
+ content length を変更するため、これはデフォルトではありません。
+ フィルタが長さを変えないときは、このキーワードを指定すると
+ よいでしょう。</dd>
+
+ <dt><code>ftype=<var>filtertype</var></code></dt>
+
+ <dd>このパラメータはフィルタが登録されるべきフィルタタイプの
+ 数値を指定します。ほとんどの場合は、デフォルトの AP_FTYPE_RESOURCE で
+ 十分です。フィルタがフィルタチェーンの別の場所で動作する必要がある
+ 場合は、このパラメータを指定する必要があります。指定可能な値は
+ util_filter.h の AP_FTYPE_foo 定義を参照してください。</dd>
+
+ <dt><code>disableenv=<var>env</var></code></dt>
+
+ <dd>設定されていた場合にフィルタを無効にするための環境変数を
+ 指定します。</dd>
+
+ <dt><code>enableenv=<var>env</var></code></dt>
+
+ <dd>このパラメータはフィルタが有効になるために設定されていなければ
+ ならない環境変数を指定します。</dd>
+ </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> のオプションを設定</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_ext_filter</td></tr>
+</table>
+ <p><code class="directive">ExtFilterOptions</code> ディレクティブは
+ <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> の特別な処理用のオプションを
+ 指定します。<var>Option</var> には以下のどれかを指定します。</p>
+
+ <dl>
+ <dt><code>DebugLevel=<var>n</var></code></dt>
+
+ <dd>
+ <code>DebugLevel</code> で <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>
+ の生成するデバッグメッセージのレベルを設定できます。
+ デフォルトでは、デバッグメッセージは生成されません。
+ これは <code>DebugLevel=0</code> と設定するのと同じです。
+ 数字が大きくなればなるほど、より多くのデバッグメッセージが
+ 生成され、サーバの性能は落ちます。数値の実際の意味は
+ <code>mod_ext_filter.c</code> の先頭近くの DBGLVL_ 定数の
+ 定義で説明されています。
+
+ <p>注: デバッグメッセージを Apache のエラーログに
+ 保存するようにするためには、core のディレクティブ
+ <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>
+ を使う必要があります。</p>
+ </dd>
+
+ <dt><code>LogStderr | NoLogStderr</code></dt>
+
+ <dd><code>LogStderr</code> キーワードは外部フィルタプログラムにより
+ 標準エラー <span class="transnote">(<em>訳注:</em> stderr)</span> に書かれたメッセージを
+ Apache のエラーログに保存するようにします。<code>NoLogStderr</code> は
+ 逆に保存しないようにします。</dd>
+ </dl>
+
+ <div class="example"><h3>例</h3><p><code>
+ ExtFilterOptions LogStderr DebugLevel=0
+ </code></p></div>
+
+ <p>この例では、フィルタの標準出力に書かれたメッセージは
+ Apache のエラーログに保存されます。<code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> からは
+ デバッグメッセージは生成されません。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="examples" id="examples">例</a></h2>
close(SAVE);
</code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>外部フィルタを定義</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p><code class="directive">ExtFilterDefine</code> は、実行するプログラムや
- 引数など、外部フィルタの特性を定義します。</p>
-
- <p><var>filtername</var> は定義するフィルタの名前を指定します。
- この名前は後で <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code>
- ディレクティブで指定できます。名前は登録されるすべてのフィルタで
- 一意でなくてはなりません。<em>現時点では、フィルタの登録 API からは
- エラーは報告されません。ですから、重複する名前を使ってしまったときでも
- ユーザにはそのことは報告されません。</em></p>
-
- <p>続くパラメータの順番は関係無く、それらは実行する外部コマンドと、
- 他の特性を定義します。<code>cmd=</code> だけが必須のパラメータです。
- 指定可能なパラメータは:</p>
-
- <dl>
- <dt><code>cmd=<var>cmdline</var></code></dt>
-
- <dd><code>cmd=</code> キーワードは実行する外部コマンドを指定します。
- プログラム名の後に引数がある場合は、コマンド行は引用符で囲む
- 必要があります (<em>例えば</em>、<code>cmd="<var>/bin/mypgm</var>
- <var>arg1</var> <var>arg2</var>"</code> のように)。プログラムは
- シェル経由でなく、直接実行されますので、通常のシェル用の
- エスケープは必要ありません。プログラムの引数は空白で区切られます。
- プログラムの引数の一部となる必要のある空白はバックスペースでエスケープ
- できます。引数の一部になるバックスラッシュはバックスラッシュで
- エスケープする必要があります。標準の CGI 環境変数に加えて、
- 環境変数 DOCUMENT_URI, DOCUMENT_PATH_INFO, and
- QUERY_STRING_UNESCAPED がプログラムのために設定されます。</dd>
-
- <dt><code>mode=<var>mode</var></code></dt>
-
- <dd>応答を処理するフィルタには <code>mode=output</code> (デフォルト)
- を使います。リクエストを処理するフィルタには <code>mode=input</code>
- を使います。<code>mode=input</code> は Apache 2.1 以降で利用可能です。</dd>
-
- <dt><code>intype=<var>imt</var></code></dt>
-
- <dd>このパラメータはフィルタされるべきドキュメントの
- インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
- 指定します。デフォルトではすべてのドキュメントがフィルタされます。
- <code>intype=</code> が指定されていれば、フィルタは指定されていない
- ドキュメントには適用されなくなります。</dd>
-
- <dt><code>outtype=<var>imt</var></code></dt>
-
- <dd>このパラメータはフィルタされたドキュメントの
- インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
- 指定します。フィルタ動作にともなってインターネットメディアタイプが
- 変わる場合に有用です。デフォルトではインターネットメディアタイプは
- 変更されません。</dd>
-
- <dt><code>PreservesContentLength</code></dt>
-
- <dd><code>PreservesContentLength</code> キーワードはフィルタが
- content length <span class="transnote">(<em>訳注:</em> コンテントの長さ)</span>
- を変更しないということを指定します。ほとんどのフィルタは
- content length を変更するため、これはデフォルトではありません。
- フィルタが長さを変えないときは、このキーワードを指定すると
- よいでしょう。</dd>
-
- <dt><code>ftype=<var>filtertype</var></code></dt>
-
- <dd>このパラメータはフィルタが登録されるべきフィルタタイプの
- 数値を指定します。ほとんどの場合は、デフォルトの AP_FTYPE_RESOURCE で
- 十分です。フィルタがフィルタチェーンの別の場所で動作する必要がある
- 場合は、このパラメータを指定する必要があります。指定可能な値は
- util_filter.h の AP_FTYPE_foo 定義を参照してください。</dd>
-
- <dt><code>disableenv=<var>env</var></code></dt>
-
- <dd>設定されていた場合にフィルタを無効にするための環境変数を
- 指定します。</dd>
-
- <dt><code>enableenv=<var>env</var></code></dt>
-
- <dd>このパラメータはフィルタが有効になるために設定されていなければ
- ならない環境変数を指定します。</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> のオプションを設定</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p><code class="directive">ExtFilterOptions</code> ディレクティブは
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> の特別な処理用のオプションを
- 指定します。<var>Option</var> には以下のどれかを指定します。</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>
- <code>DebugLevel</code> で <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>
- の生成するデバッグメッセージのレベルを設定できます。
- デフォルトでは、デバッグメッセージは生成されません。
- これは <code>DebugLevel=0</code> と設定するのと同じです。
- 数字が大きくなればなるほど、より多くのデバッグメッセージが
- 生成され、サーバの性能は落ちます。数値の実際の意味は
- <code>mod_ext_filter.c</code> の先頭近くの DBGLVL_ 定数の
- 定義で説明されています。
-
- <p>注: デバッグメッセージを Apache のエラーログに
- 保存するようにするためには、core のディレクティブ
- <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>
- を使う必要があります。</p>
- </dd>
-
- <dt><code>LogStderr | NoLogStderr</code></dt>
-
- <dd><code>LogStderr</code> キーワードは外部フィルタプログラムにより
- 標準エラー <span class="transnote">(<em>訳注:</em> stderr)</span> に書かれたメッセージを
- Apache のエラーログに保存するようにします。<code>NoLogStderr</code> は
- 逆に保存しないようにします。</dd>
- </dl>
-
- <div class="example"><h3>例</h3><p><code>
- ExtFilterOptions LogStderr DebugLevel=0
- </code></p></div>
-
- <p>この例では、フィルタの標準出力に書かれたメッセージは
- Apache のエラーログに保存されます。<code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> からは
- デバッグメッセージは生成されません。</p>
-
</div>
</div>
<div class="bottomlang">
<li><a href="../filter.html">ÇÊÅÍ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¿ÜºÎ ÇÊÅ͸¦ Á¤ÀÇÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_ext_filter</td></tr>
+</table>
+ <p><code class="directive">ExtFilterDefine</code> Áö½Ã¾î´Â ¿ÜºÎ
+ ÇÊÅÍÀÇ ¼ºÁú°ú ½ÇÇàÇÒ ÇÁ·Î±×·¥, ¾Æ±Ô¸ÕÆ®¸¦ Á¤ÀÇÇÑ´Ù.</p>
+
+ <p><var>filtername</var>Àº Á¤ÀÇÇÒ ÇÊÅÍ À̸§À» ÁöÁ¤ÇÑ´Ù.
+ ÀÌ À̸§À» SetOutputFilter Áö½Ã¾î¿¡¼ »ç¿ëÇÑ´Ù. µî·ÏÇÑ ¸ðµç
+ ÇÊÅ͵鰣¿¡ À̸§ÀÌ °ãÄ¡¸é ¾ÈµÈ´Ù. <em>ÇöÀç ÇÊÅ͵î·Ï API´Â
+ ¿À·ù¸¦ º¸°íÇÏÁö ¾Ê´Â´Ù. ±×·¡¼ »ç¿ëÀÚ´Â À̸§ÀÌ °ãÄ¡´Â ¹®Á¦¸¦
+ ¾ËÁö ¸øÇÑ´Ù.</em></p>
+
+ <p>½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¿Í ´Ù¸¥ ¼ºÁúÀ» Á¤ÀÇÇÏ´Â ³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®´Â
+ ¾î¶² ¼ø¼·Î ³ª¿Íµµ °¡´ÉÇÏ´Ù. ´Ü, <code>cmd=</code> ÆĶó¹ÌÅÍ´Â
+ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â ÆĶó¹ÌÅÍ´Â ´ÙÀ½°ú °°´Ù:</p>
+
+ <dl>
+ <dt><code>cmd=<var>cmdline</var></code></dt>
+
+ <dd><code>cmd=</code> Å°¿öµå´Â ½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.
+ ÇÁ·Î±×·¥¸í µÚ¿¡ ¾Æ±Ô¸ÕÆ®°¡ ÀÖ´Ù¸é ¸í·ÉÇàÀ» ½Öµû¿ÈÇ¥·Î
+ ¹¾î¾ß ÇÑ´Ù (<em>¿¹¸¦ µé¾î</em>,
+ <code>cmd="<var>/bin/mypgm</var> <var>arg1</var>
+ <var>arg2</var>"</code>). ½©À» °ÅÄ¡Áö¾Ê°í Á÷Á¢ ÇÁ·Î±×·¥À»
+ ½ÇÇàÇϱ⶧¹®¿¡ ÀϹÝÀûÀÎ ½© µû¿ÈÇ¥´Â ÇÊ¿ä¾ø´Ù. ÇÁ·Î±×·¥
+ ¾Æ±Ô¸ÕÆ®µéÀº °ø¹éÀ¸·Î ±¸ºÐÇÑ´Ù. ÇÁ·Î±×·¥ ¾Æ±Ô¸ÕÆ®¿¡ °ø¹éÀÌ
+ ÀÖ´Ù¸é °ø¹é ¾Õ¿¡ ¹é½½·¡½¬·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ¹é½½·¡½¬°¡
+ ¾Æ±Ô¸ÕÆ®ÀÇ ÀϺζó¸é ¹é½½·¡½¬¸¦ µÎ¹ø »ç¿ëÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥À»
+ ½ÇÇàÇÒ¶§ Ç¥ÁØ CGI ȯ°æº¯¼ö¿Í Ãß°¡·Î DOCUMENT_URI,
+ DOCUMENT_PATH_INFO, QUERY_STRING_UNESCAPED º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</dd>
+
+ <dt><code>mode=<var>mode</var></code></dt>
+
+ <dd>ÀÀ´äÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â (±âº»°ªÀÎ) <code>mode=output</code>À»
+ »ç¿ëÇÑ´Ù. ¿äûÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â <code>mode=input</code>À»
+ »ç¿ëÇÑ´Ù. <code>mode=input</code>Àº ¾ÆÆÄÄ¡ 2.1¿¡ Ãß°¡µÇ¾ú´Ù.</dd>
+
+ <dt><code>intype=<var>imt</var></code></dt>
+
+ <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÒ ¹®¼ÀÇ ÀÎÅÍ³Ý media
+ type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ¸ðµç
+ ¹®¼¸¦ ÇÊÅͷΠó¸®ÇÑ´Ù. <code>intype=</code>À» ÁöÁ¤Çϸé
+ ´Ù¸¥ typeÀÇ ¹®¼´Â ÇÊÅͷΠó¸®ÇÏÁö ¾Ê´Â´Ù.</dd>
+
+ <dt><code>outtype=<var>imt</var></code></dt>
+
+ <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÑ ¹®¼ÀÇ ÀÎÅÍ³Ý media
+ type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ÇÊÅÍó¸® ÀÛ¾÷Áß¿¡
+ ÀÎÅÍ³Ý media typeÀ» º¯°æÇÒ¶§ À¯¿ëÇÏ´Ù. ±âº»ÀûÀ¸·Î, ÀÎÅͳÝ
+ media typeÀº º¯ÇÏÁö ¾Ê´Â´Ù.</dd>
+
+ <dt><code>PreservesContentLength</code></dt>
+
+ <dd><code>PreservesContentLength</code> Å°¿öµå´Â ÇÊÅÍ°¡
+ content length¸¦ À¯ÁöÇϵµ·Ï ÇÑ´Ù. ´ëºÎºÐÀÇ ÇÊÅÍ°¡ content
+ length¸¦ º¯°æÇϹǷΠÀÌ Å°¿öµå´Â ±âº»°ªÀÌ ¾Æ´Ï´Ù. ÇÊÅÍ°¡
+ ±æÀ̸¦ À¯ÁöÇÒ¶§¸¸ ÀÌ Å°¿öµå¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
+
+ <dt><code>ftype=<var>filtertype</var></code></dt>
+
+ <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅÍ Á¾·ù¿¡ ´ëÇÑ ¼ýÀÚ°ªÀ» ÁöÁ¤ÇÑ´Ù.
+ ´ëºÎºÐÀÇ °æ¿ì ±âº»°ªÀÎ AP_FTYPE_RESOURCE°¡ Àû´çÇÏ´Ù.
+ ÇÊÅ͸¦ ½ÇÇàÇÏ´Â ¼ø¼°¡ ÀÚ¿øÇÊÅÍ¿Í ´Þ¶ó¾ßÇÏ´Â °æ¿ì ÀÌ
+ ÆĶó¹ÌÅÍ°¡ ÇÊ¿äÇÏ´Ù. Àû´çÇÑ °ªÀ» ¾Ë·Á¸é util_filter.h¿¡
+ ÀÖ´Â AP_FTYPE_* Á¤ÀǸ¦ Âü°íÇ϶ó.</dd>
+
+ <dt><code>disableenv=<var>env</var></code></dt>
+
+ <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀǵǾú´Ù¸é ÇÊÅ͸¦
+ »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
+
+ <dt><code>enableenv=<var>env</var></code></dt>
+
+ <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀÇµÈ °æ¿ì ÇÊÅ͸¦
+ »ç¿ëÇÑ´Ù.</dd>
+ </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> ¿É¼ÇÀ» ¼³Á¤ÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_ext_filter</td></tr>
+</table>
+ <p><code class="directive">ExtFilterOptions</code> Áö½Ã¾î´Â
+ <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>ÀÇ Æ¯º°ÇÑ Ã³¸®¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.
+ <var>Option</var>Àº ´ÙÀ½Áß Çϳª´Ù.</p>
+
+ <dl>
+ <dt><code>DebugLevel=<var>n</var></code></dt>
+
+ <dd>
+ <code>DebugLevel</code> Å°¿öµå´Â
+ <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>°¡ ±â·ÏÇÏ´Â µð¹ö±× ¹®±¸
+ ¼öÁØÀ» Á¤ÇÑ´Ù. ±âº»°ªÀº µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù.
+ ÀÌ´Â <code>DebugLevel=0</code>°ú °°´Ù. ³ôÀº ¼ýÀÚ¸¦
+ »ç¿ëÇÒ¼ö·Ï, ´õ ¸¹Àº µð¹ö±×¹®ÀÌ ±â·ÏµÇ°í ¼¹ö ¼º´ÉÀÌ
+ ¶³¾îÁø´Ù. ¼ýÀÚ°ªÀÇ ½ÇÁ¦ Àǹ̴ <code>mod_ext_filter.c</code>
+ ¾ÕºÎºÐ¿¡ ÀÖ´Â DBGLVL_ »ó¼ö Á¤ÀÇ¿¡ ¼³¸íµÇÀÖ´Ù.
+
+ <p>ÁÖÀÇ: ÇÊÅÍ ·Î±×¸¦ ±â·ÏÇÏ·Á¸é core Áö½Ã¾î <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>À» »ç¿ëÇÏ¿© µð¹ö±×¹®À»
+ ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇØ¾ß ÇÑ´Ù.</p>
+ </dd>
+
+ <dt><code>LogStderr | NoLogStderr</code></dt>
+
+ <dd><code>LogStderr</code> Å°¿öµå´Â ¿ÜºÎ ÇÊÅÍ ÇÁ·Î±×·¥ÀÌ
+ Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦ ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÑ´Ù.
+ <code>NoLogStderr</code>´Â ÀÌ ±â´ÉÀ» ÇÏÁö ¾Ê´Â´Ù.</dd>
+ </dl>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ ExtFilterOptions LogStderr DebugLevel=0
+ </code></p></div>
+
+ <p>À§ÀÇ ¼³Á¤À» »ç¿ëÇϸé ÇÊÅÍ°¡ Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦
+ ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÏ°í, <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>´Â
+ ÀÚü µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù. </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
close(SAVE);
</code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¿ÜºÎ ÇÊÅ͸¦ Á¤ÀÇÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p><code class="directive">ExtFilterDefine</code> Áö½Ã¾î´Â ¿ÜºÎ
- ÇÊÅÍÀÇ ¼ºÁú°ú ½ÇÇàÇÒ ÇÁ·Î±×·¥, ¾Æ±Ô¸ÕÆ®¸¦ Á¤ÀÇÇÑ´Ù.</p>
-
- <p><var>filtername</var>Àº Á¤ÀÇÇÒ ÇÊÅÍ À̸§À» ÁöÁ¤ÇÑ´Ù.
- ÀÌ À̸§À» SetOutputFilter Áö½Ã¾î¿¡¼ »ç¿ëÇÑ´Ù. µî·ÏÇÑ ¸ðµç
- ÇÊÅ͵鰣¿¡ À̸§ÀÌ °ãÄ¡¸é ¾ÈµÈ´Ù. <em>ÇöÀç ÇÊÅ͵î·Ï API´Â
- ¿À·ù¸¦ º¸°íÇÏÁö ¾Ê´Â´Ù. ±×·¡¼ »ç¿ëÀÚ´Â À̸§ÀÌ °ãÄ¡´Â ¹®Á¦¸¦
- ¾ËÁö ¸øÇÑ´Ù.</em></p>
-
- <p>½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¿Í ´Ù¸¥ ¼ºÁúÀ» Á¤ÀÇÇÏ´Â ³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®´Â
- ¾î¶² ¼ø¼·Î ³ª¿Íµµ °¡´ÉÇÏ´Ù. ´Ü, <code>cmd=</code> ÆĶó¹ÌÅÍ´Â
- ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â ÆĶó¹ÌÅÍ´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <dl>
- <dt><code>cmd=<var>cmdline</var></code></dt>
-
- <dd><code>cmd=</code> Å°¿öµå´Â ½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.
- ÇÁ·Î±×·¥¸í µÚ¿¡ ¾Æ±Ô¸ÕÆ®°¡ ÀÖ´Ù¸é ¸í·ÉÇàÀ» ½Öµû¿ÈÇ¥·Î
- ¹¾î¾ß ÇÑ´Ù (<em>¿¹¸¦ µé¾î</em>,
- <code>cmd="<var>/bin/mypgm</var> <var>arg1</var>
- <var>arg2</var>"</code>). ½©À» °ÅÄ¡Áö¾Ê°í Á÷Á¢ ÇÁ·Î±×·¥À»
- ½ÇÇàÇϱ⶧¹®¿¡ ÀϹÝÀûÀÎ ½© µû¿ÈÇ¥´Â ÇÊ¿ä¾ø´Ù. ÇÁ·Î±×·¥
- ¾Æ±Ô¸ÕÆ®µéÀº °ø¹éÀ¸·Î ±¸ºÐÇÑ´Ù. ÇÁ·Î±×·¥ ¾Æ±Ô¸ÕÆ®¿¡ °ø¹éÀÌ
- ÀÖ´Ù¸é °ø¹é ¾Õ¿¡ ¹é½½·¡½¬·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ¹é½½·¡½¬°¡
- ¾Æ±Ô¸ÕÆ®ÀÇ ÀϺζó¸é ¹é½½·¡½¬¸¦ µÎ¹ø »ç¿ëÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥À»
- ½ÇÇàÇÒ¶§ Ç¥ÁØ CGI ȯ°æº¯¼ö¿Í Ãß°¡·Î DOCUMENT_URI,
- DOCUMENT_PATH_INFO, QUERY_STRING_UNESCAPED º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</dd>
-
- <dt><code>mode=<var>mode</var></code></dt>
-
- <dd>ÀÀ´äÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â (±âº»°ªÀÎ) <code>mode=output</code>À»
- »ç¿ëÇÑ´Ù. ¿äûÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â <code>mode=input</code>À»
- »ç¿ëÇÑ´Ù. <code>mode=input</code>Àº ¾ÆÆÄÄ¡ 2.1¿¡ Ãß°¡µÇ¾ú´Ù.</dd>
-
- <dt><code>intype=<var>imt</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÒ ¹®¼ÀÇ ÀÎÅÍ³Ý media
- type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ¸ðµç
- ¹®¼¸¦ ÇÊÅͷΠó¸®ÇÑ´Ù. <code>intype=</code>À» ÁöÁ¤Çϸé
- ´Ù¸¥ typeÀÇ ¹®¼´Â ÇÊÅͷΠó¸®ÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>outtype=<var>imt</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÑ ¹®¼ÀÇ ÀÎÅÍ³Ý media
- type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ÇÊÅÍó¸® ÀÛ¾÷Áß¿¡
- ÀÎÅÍ³Ý media typeÀ» º¯°æÇÒ¶§ À¯¿ëÇÏ´Ù. ±âº»ÀûÀ¸·Î, ÀÎÅͳÝ
- media typeÀº º¯ÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>PreservesContentLength</code></dt>
-
- <dd><code>PreservesContentLength</code> Å°¿öµå´Â ÇÊÅÍ°¡
- content length¸¦ À¯ÁöÇϵµ·Ï ÇÑ´Ù. ´ëºÎºÐÀÇ ÇÊÅÍ°¡ content
- length¸¦ º¯°æÇϹǷΠÀÌ Å°¿öµå´Â ±âº»°ªÀÌ ¾Æ´Ï´Ù. ÇÊÅÍ°¡
- ±æÀ̸¦ À¯ÁöÇÒ¶§¸¸ ÀÌ Å°¿öµå¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>ftype=<var>filtertype</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅÍ Á¾·ù¿¡ ´ëÇÑ ¼ýÀÚ°ªÀ» ÁöÁ¤ÇÑ´Ù.
- ´ëºÎºÐÀÇ °æ¿ì ±âº»°ªÀÎ AP_FTYPE_RESOURCE°¡ Àû´çÇÏ´Ù.
- ÇÊÅ͸¦ ½ÇÇàÇÏ´Â ¼ø¼°¡ ÀÚ¿øÇÊÅÍ¿Í ´Þ¶ó¾ßÇÏ´Â °æ¿ì ÀÌ
- ÆĶó¹ÌÅÍ°¡ ÇÊ¿äÇÏ´Ù. Àû´çÇÑ °ªÀ» ¾Ë·Á¸é util_filter.h¿¡
- ÀÖ´Â AP_FTYPE_* Á¤ÀǸ¦ Âü°íÇ϶ó.</dd>
-
- <dt><code>disableenv=<var>env</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀǵǾú´Ù¸é ÇÊÅ͸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>enableenv=<var>env</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀÇµÈ °æ¿ì ÇÊÅ͸¦
- »ç¿ëÇÑ´Ù.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> ¿É¼ÇÀ» ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p><code class="directive">ExtFilterOptions</code> Áö½Ã¾î´Â
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>ÀÇ Æ¯º°ÇÑ Ã³¸®¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.
- <var>Option</var>Àº ´ÙÀ½Áß Çϳª´Ù.</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>
- <code>DebugLevel</code> Å°¿öµå´Â
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>°¡ ±â·ÏÇÏ´Â µð¹ö±× ¹®±¸
- ¼öÁØÀ» Á¤ÇÑ´Ù. ±âº»°ªÀº µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù.
- ÀÌ´Â <code>DebugLevel=0</code>°ú °°´Ù. ³ôÀº ¼ýÀÚ¸¦
- »ç¿ëÇÒ¼ö·Ï, ´õ ¸¹Àº µð¹ö±×¹®ÀÌ ±â·ÏµÇ°í ¼¹ö ¼º´ÉÀÌ
- ¶³¾îÁø´Ù. ¼ýÀÚ°ªÀÇ ½ÇÁ¦ Àǹ̴ <code>mod_ext_filter.c</code>
- ¾ÕºÎºÐ¿¡ ÀÖ´Â DBGLVL_ »ó¼ö Á¤ÀÇ¿¡ ¼³¸íµÇÀÖ´Ù.
-
- <p>ÁÖÀÇ: ÇÊÅÍ ·Î±×¸¦ ±â·ÏÇÏ·Á¸é core Áö½Ã¾î <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>À» »ç¿ëÇÏ¿© µð¹ö±×¹®À»
- ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇØ¾ß ÇÑ´Ù.</p>
- </dd>
-
- <dt><code>LogStderr | NoLogStderr</code></dt>
-
- <dd><code>LogStderr</code> Å°¿öµå´Â ¿ÜºÎ ÇÊÅÍ ÇÁ·Î±×·¥ÀÌ
- Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦ ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÑ´Ù.
- <code>NoLogStderr</code>´Â ÀÌ ±â´ÉÀ» ÇÏÁö ¾Ê´Â´Ù.</dd>
- </dl>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- ExtFilterOptions LogStderr DebugLevel=0
- </code></p></div>
-
- <p>À§ÀÇ ¼³Á¤À» »ç¿ëÇϸé ÇÊÅÍ°¡ Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦
- ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÏ°í, <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>´Â
- ÀÚü µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù. </p>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#using">Using mod_file_cache</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="CacheFile" id="CacheFile">CacheFile</a> <a name="cachefile" id="cachefile">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Cache a list of file handles at startup time</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
+</table>
+ <p>The <code class="directive">CacheFile</code> directive opens handles to
+ one or more files (given as whitespace separated arguments) and
+ places these handles into the cache at server startup
+ time. Handles to cached files are automatically closed on a server
+ shutdown. When the files have changed on the filesystem, the
+ server should be restarted to re-cache them.</p>
+
+ <p>Be careful with the <var>file-path</var> arguments: They have
+ to literally match the filesystem path Apache's URL-to-filename
+ translation handlers create. We cannot compare inodes or other
+ stuff to match paths through symbolic links <em>etc.</em>
+ because that again would cost extra <code>stat()</code> system
+ calls which is not acceptable. This module may or may not work
+ with filenames rewritten by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> or
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">CacheFile /usr/local/apache/htdocs/index.html</pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="MMapFile" id="MMapFile">MMapFile</a> <a name="mmapfile" id="mmapfile">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Map a list of files into memory at startup time</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MMapFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
+</table>
+ <p>The <code class="directive">MMapFile</code> directive maps one or more files
+ (given as whitespace separated arguments) into memory at server
+ startup time. They are automatically unmapped on a server
+ shutdown. When the files have changed on the filesystem at
+ least a <code>HUP</code> or <code>USR1</code> signal should be send to
+ the server to re-<code>mmap()</code> them.</p>
+
+ <p>Be careful with the <var>file-path</var> arguments: They have
+ to literally match the filesystem path Apache's URL-to-filename
+ translation handlers create. We cannot compare inodes or other
+ stuff to match paths through symbolic links <em>etc.</em>
+ because that again would cost extra <code>stat()</code> system
+ calls which is not acceptable. This module may or may not work
+ with filenames rewritten by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> or
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">MMapFile /usr/local/apache/htdocs/index.html</pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="using" id="using">Using mod_file_cache</a></h2>
| sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf
</code></p></div>
</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheFile" id="CacheFile">CacheFile</a> <a name="cachefile" id="cachefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Cache a list of file handles at startup time</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheFile</code> directive opens handles to
- one or more files (given as whitespace separated arguments) and
- places these handles into the cache at server startup
- time. Handles to cached files are automatically closed on a server
- shutdown. When the files have changed on the filesystem, the
- server should be restarted to re-cache them.</p>
-
- <p>Be careful with the <var>file-path</var> arguments: They have
- to literally match the filesystem path Apache's URL-to-filename
- translation handlers create. We cannot compare inodes or other
- stuff to match paths through symbolic links <em>etc.</em>
- because that again would cost extra <code>stat()</code> system
- calls which is not acceptable. This module may or may not work
- with filenames rewritten by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> or
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">CacheFile /usr/local/apache/htdocs/index.html</pre>
-</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MMapFile" id="MMapFile">MMapFile</a> <a name="mmapfile" id="mmapfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Map a list of files into memory at startup time</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MMapFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p>The <code class="directive">MMapFile</code> directive maps one or more files
- (given as whitespace separated arguments) into memory at server
- startup time. They are automatically unmapped on a server
- shutdown. When the files have changed on the filesystem at
- least a <code>HUP</code> or <code>USR1</code> signal should be send to
- the server to re-<code>mmap()</code> them.</p>
-
- <p>Be careful with the <var>file-path</var> arguments: They have
- to literally match the filesystem path Apache's URL-to-filename
- translation handlers create. We cannot compare inodes or other
- stuff to match paths through symbolic links <em>etc.</em>
- because that again would cost extra <code>stat()</code> system
- calls which is not acceptable. This module may or may not work
- with filenames rewritten by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> or
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">MMapFile /usr/local/apache/htdocs/index.html</pre>
-</div>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#using">Utilisation de mod_file_cache</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="cachefile" id="cachefile">Directive</a> <a name="CacheFile" id="CacheFile">CacheFile</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Met en cache une liste de gestionnaires de fichiers au
+démarrage</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheFile <var>chemin_fichier</var> [<var>chemin fichier</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
+</table>
+ <p>La directive <code class="directive">CacheFile</code> associe
+ des gestionnaires à un ou plusieurs fichiers (séparés par des
+ espaces), et place ceux-ci dans le cache au démarrage du
+ serveur. Les gestionnaires des fichiers mis en cache sont
+ automatiquement fermés à l'arrêt du serveur. Lorsqu'un ou plusieurs
+ fichiers ont été modifiés sur disque, le serveur doit être redémarré
+ afin que les modifications soient prises en compte par le cache.</p>
+
+ <p>Soyez prudent avec les arguments <var>chemin_fichier</var> : ils
+ doivent correspondre exactement au chemin du système de fichier que
+ créent les gestionnaires de traduction URL-vers-nom-fichier
+ d'Apache. On ne peut pas comparer des inodes ou autres identifiants
+ pour mettre en correspondance des chemins à l'aide de liens
+ symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
+ appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
+ Il n'est pas garanti que ce module fonctionne avec des noms de
+ fichiers réécrits par <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> ou
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">CacheFile /usr/local/apache/htdocs/index.html</pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="mmapfile" id="mmapfile">Directive</a> <a name="MMapFile" id="MMapFile">MMapFile</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Charge au démarrage une liste de fichiers en
+mémoire</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>MMapFile <var>chemin fichier</var> [<var>chemin_fichier</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
+</table>
+ <p>La directive <code class="directive">MMapFile</code> provoque le chargement d'un
+ ou plusieurs fichiers (séparés par des espaces) en mémoire au
+ démarrage du serveur. Ceux-ci sont automatiquement déchargés de la
+ mémoire à l'arrêt du serveur. Lorsqu'un ou plusieurs fichiers ont
+ été modifiés sur disque, on doit au minimum envoyer un signal
+ <code>HUP</code> ou <code>USR1</code> au serveur afin de les
+ re<code>mmap()</code>er.</p>
+
+ <p>Soyez prudent avec les arguments <var>chemin_fichier</var> : ils
+ doivent correspondre exactement au chemin du système de fichier que
+ créent les gestionnaires de traduction URL-vers-nom-fichier
+ d'Apache. On ne peut pas comparer des inodes ou autres identifiants
+ pour mettre en correspondance des chemins à l'aide de liens
+ symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
+ appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
+ Il n'est pas garanti que ce module fonctionne avec des noms de
+ fichiers réécrits par <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> ou
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">MMapFile /usr/local/apache/htdocs/index.html</pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="using" id="using">Utilisation de mod_file_cache</a></h2>
| sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf
</code></p></div>
</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="cachefile" id="cachefile">Directive</a> <a name="CacheFile" id="CacheFile">CacheFile</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Met en cache une liste de gestionnaires de fichiers au
-démarrage</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheFile <var>chemin_fichier</var> [<var>chemin fichier</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p>La directive <code class="directive">CacheFile</code> associe
- des gestionnaires à un ou plusieurs fichiers (séparés par des
- espaces), et place ceux-ci dans le cache au démarrage du
- serveur. Les gestionnaires des fichiers mis en cache sont
- automatiquement fermés à l'arrêt du serveur. Lorsqu'un ou plusieurs
- fichiers ont été modifiés sur disque, le serveur doit être redémarré
- afin que les modifications soient prises en compte par le cache.</p>
-
- <p>Soyez prudent avec les arguments <var>chemin_fichier</var> : ils
- doivent correspondre exactement au chemin du système de fichier que
- créent les gestionnaires de traduction URL-vers-nom-fichier
- d'Apache. On ne peut pas comparer des inodes ou autres identifiants
- pour mettre en correspondance des chemins à l'aide de liens
- symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
- appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
- Il n'est pas garanti que ce module fonctionne avec des noms de
- fichiers réécrits par <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> ou
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
-
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">CacheFile /usr/local/apache/htdocs/index.html</pre>
-</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="mmapfile" id="mmapfile">Directive</a> <a name="MMapFile" id="MMapFile">MMapFile</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Charge au démarrage une liste de fichiers en
-mémoire</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>MMapFile <var>chemin fichier</var> [<var>chemin_fichier</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p>La directive <code class="directive">MMapFile</code> provoque le chargement d'un
- ou plusieurs fichiers (séparés par des espaces) en mémoire au
- démarrage du serveur. Ceux-ci sont automatiquement déchargés de la
- mémoire à l'arrêt du serveur. Lorsqu'un ou plusieurs fichiers ont
- été modifiés sur disque, on doit au minimum envoyer un signal
- <code>HUP</code> ou <code>USR1</code> au serveur afin de les
- re<code>mmap()</code>er.</p>
-
- <p>Soyez prudent avec les arguments <var>chemin_fichier</var> : ils
- doivent correspondre exactement au chemin du système de fichier que
- créent les gestionnaires de traduction URL-vers-nom-fichier
- d'Apache. On ne peut pas comparer des inodes ou autres identifiants
- pour mettre en correspondance des chemins à l'aide de liens
- symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
- appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
- Il n'est pas garanti que ce module fonctionne avec des noms de
- fichiers réécrits par <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> ou
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
-
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">MMapFile /usr/local/apache/htdocs/index.html</pre>
-</div>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#using">mod_file_cache »ç¿ëÇϱâ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="CacheFile" id="CacheFile">CacheFile</a> <a name="cachefile" id="cachefile">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ÃÀ۽à ¿©·¯ ÆÄÀÏ ÇÚµéÀ» ij½¬ÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_file_cache</td></tr>
+</table>
+ <p><code class="directive">CacheFile</code> Áö½Ã¾î´Â ¼¹ö°¡ ½ÃÀÛÇÒ¶§
+ ¿©·¯ ÆÄÀÏÀ» ¿°í(open) ÆÄÀϵéÀÇ ÇÚµéÀ» ij½¬¿¡ ÀúÀåÇÑ´Ù.
+ ¼¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ij½¬ÇÑ ÆÄÀÏÀÇ ÇÚµéÀ» ´Ý´Â´Ù(close).
+ ÆÄÀϽýºÅÛ¿¡¼ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀÏÀ» ´Ù½Ã ij½¬ÇϱâÀ§ÇØ
+ ¼¹ö¸¦ Àç½ÃÀÛÇØ¾ß ÇÑ´Ù.</p>
+
+ <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
+ ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
+ Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
+ ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
+ °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>³ª
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
+ Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ CacheFile /usr/local/apache/htdocs/index.html
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="MMapFile" id="MMapFile">MMapFile</a> <a name="mmapfile" id="mmapfile">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ÃÀ۽à ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡ ´ëÀÀÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>MMapFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_file_cache</td></tr>
+</table>
+ <p><code class="directive">MMapFile</code> Áö½Ã¾î´Â ¼¹ö°¡ ½ÃÀÛÇÒ¶§
+ (°ø¹éÀ¸·Î ±¸ºÐÇÑ ¾Æ±Ô¸ÕÆ®·Î ÁöÁ¤ÇÑ) ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡
+ ´ëÀÀÇÑ´Ù(map). ¼¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ´ëÀÀÀ» Ǭ´Ù(unmap).
+ ÆÄÀϽýºÅÛ¿¡¼ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀϵéÀ» ´Ù½Ã
+ <code>mmap()</code>ÇϱâÀ§ÇØ ÃÖ¼ÒÇÑ ¼¹ö¿¡ <code>HUP</code>À̳ª
+ <code>USR1</code> ½Ã±×³ÎÀ» º¸³»¾ß ÇÑ´Ù.</p>
+
+ <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
+ ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
+ Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
+ ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
+ °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>³ª
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
+ Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ MMapFile /usr/local/apache/htdocs/index.html
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="using" id="using">mod_file_cache »ç¿ëÇϱâ</a></h2>
</code></p></div>
</div>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheFile" id="CacheFile">CacheFile</a> <a name="cachefile" id="cachefile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ÃÀ۽à ¿©·¯ ÆÄÀÏ ÇÚµéÀ» ij½¬ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p><code class="directive">CacheFile</code> Áö½Ã¾î´Â ¼¹ö°¡ ½ÃÀÛÇÒ¶§
- ¿©·¯ ÆÄÀÏÀ» ¿°í(open) ÆÄÀϵéÀÇ ÇÚµéÀ» ij½¬¿¡ ÀúÀåÇÑ´Ù.
- ¼¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ij½¬ÇÑ ÆÄÀÏÀÇ ÇÚµéÀ» ´Ý´Â´Ù(close).
- ÆÄÀϽýºÅÛ¿¡¼ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀÏÀ» ´Ù½Ã ij½¬ÇϱâÀ§ÇØ
- ¼¹ö¸¦ Àç½ÃÀÛÇØ¾ß ÇÑ´Ù.</p>
-
- <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
- ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
- Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
- ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
- °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>³ª
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
- Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- CacheFile /usr/local/apache/htdocs/index.html
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MMapFile" id="MMapFile">MMapFile</a> <a name="mmapfile" id="mmapfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ÃÀ۽à ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡ ´ëÀÀÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>MMapFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p><code class="directive">MMapFile</code> Áö½Ã¾î´Â ¼¹ö°¡ ½ÃÀÛÇÒ¶§
- (°ø¹éÀ¸·Î ±¸ºÐÇÑ ¾Æ±Ô¸ÕÆ®·Î ÁöÁ¤ÇÑ) ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡
- ´ëÀÀÇÑ´Ù(map). ¼¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ´ëÀÀÀ» Ǭ´Ù(unmap).
- ÆÄÀϽýºÅÛ¿¡¼ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀϵéÀ» ´Ù½Ã
- <code>mmap()</code>ÇϱâÀ§ÇØ ÃÖ¼ÒÇÑ ¼¹ö¿¡ <code>HUP</code>À̳ª
- <code>USR1</code> ½Ã±×³ÎÀ» º¸³»¾ß ÇÑ´Ù.</p>
-
- <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
- ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
- Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
- ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
- °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>³ª
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
- Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- MMapFile /usr/local/apache/htdocs/index.html
- </code></p></div>
-
-</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_file_cache.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#protocol">Protocol Handling</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="smart" id="smart">Smart Filtering</a></h2>
- <p>In the traditional filtering model, filters are inserted unconditionally
- using <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code> and family.
- Each filter then needs to determine whether to run, and there is little
- flexibility available for server admins to allow the chain to be
- configured dynamically.</p>
-
- <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> by contrast gives server administrators a
- great deal of flexibility in configuring the filter chain. In fact,
- filters can be inserted based on complex boolean
- <a href="../expr.html">expressions</a> This generalises the limited
- flexibility offered by <code class="directive">AddOutputFilterByType</code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="terms" id="terms">Filter Declarations, Providers and Chains</a></h2>
- <p class="figure">
- <img src="../images/mod_filter_old.gif" width="160" height="310" alt="[This image displays the traditional filter model]" /><br />
- <dfn>Figure 1:</dfn> The traditional filter model</p>
-
- <p>In the traditional model, output filters are a simple chain
- from the content generator (handler) to the client. This works well
- provided the filter chain can be correctly configured, but presents
- problems when the filters need to be configured dynamically based on
- the outcome of the handler.</p>
-
- <p class="figure">
- <img src="../images/mod_filter_new.gif" width="423" height="331" alt="[This image shows the mod_filter model]" /><br />
- <dfn>Figure 2:</dfn> The <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> model</p>
-
- <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> works by introducing indirection into
- the filter chain. Instead of inserting filters in the chain, we insert
- a filter harness which in turn dispatches conditionally
- to a filter provider. Any content filter may be used as a provider
- to <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>; no change to existing filter modules
- is required (although it may be possible to simplify them). There can be
- multiple providers for one filter, but no more than one provider will
- run for any single request.</p>
-
- <p>A filter chain comprises any number of instances of the filter
- harness, each of which may have any number of providers. A special
- case is that of a single provider with unconditional dispatch: this
- is equivalent to inserting the provider filter directly into the chain.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="config" id="config">Configuring the Chain</a></h2>
- <p>There are three stages to configuring a filter chain with
- <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>. For details of the directives, see below.</p>
-
- <dl>
- <dt>Declare Filters</dt>
- <dd>The <code class="directive"><a href="#filterdeclare">FilterDeclare</a></code> directive
- declares a filter, assigning it a name and filter type. Required
- only if the filter is not the default type AP_FTYPE_RESOURCE.</dd>
-
- <dt>Register Providers</dt>
- <dd>The <code class="directive"><a href="#filterprovider">FilterProvider</a></code>
- directive registers a provider with a filter. The filter may have
- been declared with <code class="directive"><a href="#filterdeclare">FilterDeclare</a></code>; if not, FilterProvider will implicitly
- declare it with the default type AP_FTYPE_RESOURCE. The provider
- must have been
- registered with <code>ap_register_output_filter</code> by some module.
- The final argument to <code class="directive"><a href="#filterprovider">FilterProvider</a></code> is an expression: the provider will be
- selected to run for a request if and only if the expression evaluates
- to true. The expression may evaluate HTTP request or response
- headers, environment variables, or the Handler used by this request.
- Unlike earlier versions, mod_filter now supports complex expressions
- involving multiple criteria with AND / OR logic (&& / ||)
- and brackets. The details of the expression syntax are described in
- the <a href="../expr.html">ap_expr documentation</a>.</dd>
-
- <dt>Configure the Chain</dt>
- <dd>The above directives build components of a smart filter chain,
- but do not configure it to run. The <code class="directive"><a href="#filterchain">FilterChain</a></code> directive builds a filter chain from smart
- filters declared, offering the flexibility to insert filters at the
- beginning or end of the chain, remove a filter, or clear the chain.</dd>
-</dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errordocs" id="errordocs">Filtering and Response Status</a></h2>
- <p>mod_filter normally only runs filters on responses with
- HTTP status 200 (OK). If you want to filter documents with
- other response statuses, you can set the <var>filter-errordocs</var>
- environment variable, and it will work on all responses
- regardless of status. To refine this further, you can use
- expression conditions with <code class="directive">FilterProvider</code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="upgrade" id="upgrade">Upgrading from Apache HTTP Server 2.2 Configuration</a></h2>
- <p>The <code class="directive"><a href="#filterprovider">FilterProvider</a></code>
- directive has changed from httpd 2.2: the <var>match</var> and
- <var>dispatch</var> arguments are replaced with a single but
- more versatile <var>expression</var>. In general, you can convert
- a match/dispatch pair to the two sides of an expression, using
- something like:</p>
- <div class="example"><p><code>"dispatch = 'match'"</code></p></div>
- <p>The Request headers, Response headers and Environment variables
- are now interpreted from syntax <var>%{req:foo}</var>,
- <var>%{resp:foo}</var> and <var>%{env:foo}</var> respectively.
- The variables <var>%{HANDLER}</var> and <var>%{CONTENT_TYPE}</var>
- are also supported.</p>
- <p>Note that the match no longer support substring matches. They can be
- replaced by regular expression matches.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
- <dl>
- <dt>Server side Includes (SSI)</dt>
- <dd>A simple case of replacing <code class="directive">AddOutputFilterByType</code>
- <pre class="prettyprint lang-config">FilterDeclare SSI
-FilterProvider SSI INCLUDES "%{CONTENT_TYPE} =~ m|^text/html|"
-FilterChain SSI</pre>
-
- </dd>
-
- <dt>Server side Includes (SSI)</dt>
- <dd>The same as the above but dispatching on handler (classic
- SSI behaviour; .shtml files get processed).
- <pre class="prettyprint lang-config">FilterProvider SSI INCLUDES "%{HANDLER} = 'server-parsed'"
-FilterChain SSI</pre>
-
- </dd>
-
- <dt>Emulating mod_gzip with mod_deflate</dt>
- <dd>Insert INFLATE filter only if "gzip" is NOT in the
- Accept-Encoding header. This filter runs with ftype CONTENT_SET.
- <pre class="prettyprint lang-config">FilterDeclare gzip CONTENT_SET
-FilterProvider gzip inflate "%{req:Accept-Encoding} !~ /gzip/"
-FilterChain gzip</pre>
-
- </dd>
-
- <dt>Image Downsampling</dt>
- <dd>Suppose we want to downsample all web images, and have filters
- for GIF, JPEG and PNG.
- <pre class="prettyprint lang-config">FilterProvider unpack jpeg_unpack "%{CONTENT_TYPE} = 'image/jpeg'"
-FilterProvider unpack gif_unpack "%{CONTENT_TYPE} = 'image/gif'"
-FilterProvider unpack png_unpack "%{CONTENT_TYPE} = 'image/png'"
-
-FilterProvider downsample downsample_filter "%{CONTENT_TYPE} = m|^image/(jpeg|gif|png)|"
-FilterProtocol downsample "change=yes"
-
-FilterProvider repack jpeg_pack "%{CONTENT_TYPE} = 'image/jpeg'"
-FilterProvider repack gif_pack "%{CONTENT_TYPE} = 'image/gif'"
-FilterProvider repack png_pack "%{CONTENT_TYPE} = 'image/png'"
-<Location /image-filter>
- FilterChain unpack downsample repack
-</Location></pre>
-
- </dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="protocol" id="protocol">Protocol Handling</a></h2>
- <p>Historically, each filter is responsible for ensuring that whatever
- changes it makes are correctly represented in the HTTP response headers,
- and that it does not run when it would make an illegal change. This
- imposes a burden on filter authors to re-implement some common
- functionality in every filter:</p>
-
- <ul>
- <li>Many filters will change the content, invalidating existing content
- tags, checksums, hashes, and lengths.</li>
-
- <li>Filters that require an entire, unbroken response in input need to
- ensure they don't get byteranges from a backend.</li>
-
- <li>Filters that transform output in a filter need to ensure they don't
- violate a <code>Cache-Control: no-transform</code> header from the
- backend.</li>
-
- <li>Filters may make responses uncacheable.</li>
- </ul>
-
- <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> aims to offer generic handling of these
- details of filter implementation, reducing the complexity required of
- content filter modules. This is work-in-progress; the
- <code class="directive"><a href="#filterprotocol">FilterProtocol</a></code> implements
- some of this functionality for back-compatibility with Apache 2.0
- modules. For httpd 2.1 and later, the
- <code>ap_register_output_filter_protocol</code> and
- <code>ap_filter_protocol</code> API enables filter modules to
- declare their own behaviour.</p>
-
- <p>At the same time, <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> should not interfere
- with a filter that wants to handle all aspects of the protocol. By
- default (i.e. in the absence of any <code class="directive"><a href="#filterprotocol">FilterProtocol</a></code> directives), <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>
- will leave the headers untouched.</p>
-
- <p>At the time of writing, this feature is largely untested,
- as modules in common use are designed to work with 2.0.
- Modules using it should test it carefully.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddOutputFilterByType" id="AddOutputFilterByType">AddOutputFilterByType</a> <a name="addoutputfilterbytype" id="addoutputfilterbytype">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>assigns an output filter to a particular media-type</td></tr>
</dl>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="smart" id="smart">Smart Filtering</a></h2>
+ <p>In the traditional filtering model, filters are inserted unconditionally
+ using <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code> and family.
+ Each filter then needs to determine whether to run, and there is little
+ flexibility available for server admins to allow the chain to be
+ configured dynamically.</p>
+
+ <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> by contrast gives server administrators a
+ great deal of flexibility in configuring the filter chain. In fact,
+ filters can be inserted based on complex boolean
+ <a href="../expr.html">expressions</a> This generalises the limited
+ flexibility offered by <code class="directive">AddOutputFilterByType</code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="terms" id="terms">Filter Declarations, Providers and Chains</a></h2>
+ <p class="figure">
+ <img src="../images/mod_filter_old.gif" width="160" height="310" alt="[This image displays the traditional filter model]" /><br />
+ <dfn>Figure 1:</dfn> The traditional filter model</p>
+
+ <p>In the traditional model, output filters are a simple chain
+ from the content generator (handler) to the client. This works well
+ provided the filter chain can be correctly configured, but presents
+ problems when the filters need to be configured dynamically based on
+ the outcome of the handler.</p>
+
+ <p class="figure">
+ <img src="../images/mod_filter_new.gif" width="423" height="331" alt="[This image shows the mod_filter model]" /><br />
+ <dfn>Figure 2:</dfn> The <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> model</p>
+
+ <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> works by introducing indirection into
+ the filter chain. Instead of inserting filters in the chain, we insert
+ a filter harness which in turn dispatches conditionally
+ to a filter provider. Any content filter may be used as a provider
+ to <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>; no change to existing filter modules
+ is required (although it may be possible to simplify them). There can be
+ multiple providers for one filter, but no more than one provider will
+ run for any single request.</p>
+
+ <p>A filter chain comprises any number of instances of the filter
+ harness, each of which may have any number of providers. A special
+ case is that of a single provider with unconditional dispatch: this
+ is equivalent to inserting the provider filter directly into the chain.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="config" id="config">Configuring the Chain</a></h2>
+ <p>There are three stages to configuring a filter chain with
+ <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>. For details of the directives, see below.</p>
+
+ <dl>
+ <dt>Declare Filters</dt>
+ <dd>The <code class="directive"><a href="#filterdeclare">FilterDeclare</a></code> directive
+ declares a filter, assigning it a name and filter type. Required
+ only if the filter is not the default type AP_FTYPE_RESOURCE.</dd>
+
+ <dt>Register Providers</dt>
+ <dd>The <code class="directive"><a href="#filterprovider">FilterProvider</a></code>
+ directive registers a provider with a filter. The filter may have
+ been declared with <code class="directive"><a href="#filterdeclare">FilterDeclare</a></code>; if not, FilterProvider will implicitly
+ declare it with the default type AP_FTYPE_RESOURCE. The provider
+ must have been
+ registered with <code>ap_register_output_filter</code> by some module.
+ The final argument to <code class="directive"><a href="#filterprovider">FilterProvider</a></code> is an expression: the provider will be
+ selected to run for a request if and only if the expression evaluates
+ to true. The expression may evaluate HTTP request or response
+ headers, environment variables, or the Handler used by this request.
+ Unlike earlier versions, mod_filter now supports complex expressions
+ involving multiple criteria with AND / OR logic (&& / ||)
+ and brackets. The details of the expression syntax are described in
+ the <a href="../expr.html">ap_expr documentation</a>.</dd>
+
+ <dt>Configure the Chain</dt>
+ <dd>The above directives build components of a smart filter chain,
+ but do not configure it to run. The <code class="directive"><a href="#filterchain">FilterChain</a></code> directive builds a filter chain from smart
+ filters declared, offering the flexibility to insert filters at the
+ beginning or end of the chain, remove a filter, or clear the chain.</dd>
+</dl>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="errordocs" id="errordocs">Filtering and Response Status</a></h2>
+ <p>mod_filter normally only runs filters on responses with
+ HTTP status 200 (OK). If you want to filter documents with
+ other response statuses, you can set the <var>filter-errordocs</var>
+ environment variable, and it will work on all responses
+ regardless of status. To refine this further, you can use
+ expression conditions with <code class="directive">FilterProvider</code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="upgrade" id="upgrade">Upgrading from Apache HTTP Server 2.2 Configuration</a></h2>
+ <p>The <code class="directive"><a href="#filterprovider">FilterProvider</a></code>
+ directive has changed from httpd 2.2: the <var>match</var> and
+ <var>dispatch</var> arguments are replaced with a single but
+ more versatile <var>expression</var>. In general, you can convert
+ a match/dispatch pair to the two sides of an expression, using
+ something like:</p>
+ <div class="example"><p><code>"dispatch = 'match'"</code></p></div>
+ <p>The Request headers, Response headers and Environment variables
+ are now interpreted from syntax <var>%{req:foo}</var>,
+ <var>%{resp:foo}</var> and <var>%{env:foo}</var> respectively.
+ The variables <var>%{HANDLER}</var> and <var>%{CONTENT_TYPE}</var>
+ are also supported.</p>
+ <p>Note that the match no longer support substring matches. They can be
+ replaced by regular expression matches.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
+ <dl>
+ <dt>Server side Includes (SSI)</dt>
+ <dd>A simple case of replacing <code class="directive">AddOutputFilterByType</code>
+ <pre class="prettyprint lang-config">FilterDeclare SSI
+FilterProvider SSI INCLUDES "%{CONTENT_TYPE} =~ m|^text/html|"
+FilterChain SSI</pre>
+
+ </dd>
+
+ <dt>Server side Includes (SSI)</dt>
+ <dd>The same as the above but dispatching on handler (classic
+ SSI behaviour; .shtml files get processed).
+ <pre class="prettyprint lang-config">FilterProvider SSI INCLUDES "%{HANDLER} = 'server-parsed'"
+FilterChain SSI</pre>
+
+ </dd>
+
+ <dt>Emulating mod_gzip with mod_deflate</dt>
+ <dd>Insert INFLATE filter only if "gzip" is NOT in the
+ Accept-Encoding header. This filter runs with ftype CONTENT_SET.
+ <pre class="prettyprint lang-config">FilterDeclare gzip CONTENT_SET
+FilterProvider gzip inflate "%{req:Accept-Encoding} !~ /gzip/"
+FilterChain gzip</pre>
+
+ </dd>
+
+ <dt>Image Downsampling</dt>
+ <dd>Suppose we want to downsample all web images, and have filters
+ for GIF, JPEG and PNG.
+ <pre class="prettyprint lang-config">FilterProvider unpack jpeg_unpack "%{CONTENT_TYPE} = 'image/jpeg'"
+FilterProvider unpack gif_unpack "%{CONTENT_TYPE} = 'image/gif'"
+FilterProvider unpack png_unpack "%{CONTENT_TYPE} = 'image/png'"
+
+FilterProvider downsample downsample_filter "%{CONTENT_TYPE} = m|^image/(jpeg|gif|png)|"
+FilterProtocol downsample "change=yes"
+
+FilterProvider repack jpeg_pack "%{CONTENT_TYPE} = 'image/jpeg'"
+FilterProvider repack gif_pack "%{CONTENT_TYPE} = 'image/gif'"
+FilterProvider repack png_pack "%{CONTENT_TYPE} = 'image/png'"
+<Location /image-filter>
+ FilterChain unpack downsample repack
+</Location></pre>
+
+ </dd>
+ </dl>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="protocol" id="protocol">Protocol Handling</a></h2>
+ <p>Historically, each filter is responsible for ensuring that whatever
+ changes it makes are correctly represented in the HTTP response headers,
+ and that it does not run when it would make an illegal change. This
+ imposes a burden on filter authors to re-implement some common
+ functionality in every filter:</p>
+
+ <ul>
+ <li>Many filters will change the content, invalidating existing content
+ tags, checksums, hashes, and lengths.</li>
+
+ <li>Filters that require an entire, unbroken response in input need to
+ ensure they don't get byteranges from a backend.</li>
+
+ <li>Filters that transform output in a filter need to ensure they don't
+ violate a <code>Cache-Control: no-transform</code> header from the
+ backend.</li>
+
+ <li>Filters may make responses uncacheable.</li>
+ </ul>
+
+ <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> aims to offer generic handling of these
+ details of filter implementation, reducing the complexity required of
+ content filter modules. This is work-in-progress; the
+ <code class="directive"><a href="#filterprotocol">FilterProtocol</a></code> implements
+ some of this functionality for back-compatibility with Apache 2.0
+ modules. For httpd 2.1 and later, the
+ <code>ap_register_output_filter_protocol</code> and
+ <code>ap_filter_protocol</code> API enables filter modules to
+ declare their own behaviour.</p>
+
+ <p>At the same time, <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> should not interfere
+ with a filter that wants to handle all aspects of the protocol. By
+ default (i.e. in the absence of any <code class="directive"><a href="#filterprotocol">FilterProtocol</a></code> directives), <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>
+ will leave the headers untouched.</p>
+
+ <p>At the time of writing, this feature is largely untested,
+ as modules in common use are designed to work with 2.0.
+ Modules using it should test it carefully.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_filter.html" title="English"> en </a></p>
<li><code class="program"><a href="../programs/firehose.html">firehose</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Enabling a Firehose</a></h2>
-
-
- <p>To enable the module, it should be compiled and loaded
- in to your running Apache configuration, and the directives below
- used to record the data you are interested in.</p>
-
- <p>It is possible to record both incoming and outgoing data to
- the same filename if desired, as the direction of flow is recorded
- within each fragment.</p>
-
- <p>It is possible to write to both normal files and fifos (pipes).
- In the case of fifos, mod_firehose ensures that the packet size is
- no larger than PIPE_BUF to ensure writes are atomic.</p>
-
- <p>If a pipe is being used, something must be reading from the pipe
- before httpd is started for the pipe to be successfully opened for
- write. If the request to open the pipe fails, mod_firehose will
- silently stand down and not record anything, and the server will
- keep running as normal.</p>
-
- <p>By default, all attempts to write will block the server. If the
- webserver has been built against APR v2.0 or later, and an optional
- "nonblock" parameter is specified all file writes will be non
- blocking, and buffer overflows will cause debugging data to be lost.
- In this case it is possible to prioritise the running of the server
- over the recording of firehose data.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="format" id="format">Stream Format</a></h2>
-
-
- <p>The server typically serves multiple connections simultaneously,
- and as a result requests and responses need to be multiplexed before
- being written to the firehose.</p>
-
- <p>The fragment format is designed as clear text, so that a firehose
- can be opened with and inspected by a normal text editor.
- Alternatively, the <code class="program"><a href="../programs/firehose.html">firehose</a></code> tool can be used to
- demultiplex the firehose back into individual requests or
- connections.</p>
-
- <p>The size of the multiplexed fragments is governed by PIPE_BUF,
- the maximum size of write the system is prepared to perform
- atomically. By keeping the multiplexed fragments below PIPE_BUF in
- size, the module guarantees that data from different fragments does
- not interleave. The size of PIPE_BUF varies on different operating
- systems.</p>
-
- <p>The BNF for the fragment format is as follows:</p>
-
- <pre> stream = 0*(fragment)
-
- fragment = header CRLF body CRLF
-
- header = length SPC timestamp SPC ( request | response ) SPC uuid SPC count
-
- length = <up to 16 byte hex fragment length>
- timestamp = <up to 16 byte hex timestamp microseconds since 1970>
- request = "<"
- response = ">"
- uuid = <formatted uuid of the connection>
- count = <hex fragment number in the connection>
-
- body = <the binary content of the fragment>
-
- SPC = <a single space>
- CRLF = <a carriage return, followed by a line feed></pre>
-
- <p>All fragments for a connection or a request will share the same
- UUID, depending on whether connections or requests are being recorded.
- If connections are being recorded, multiple requests may appear within
- a connection. A fragment with a zero length indicates the end of the
- connection.</p>
-
- <p>Fragments may go missing or be dropped if the process reading the
- fragments is too slow. If this happens, gaps will exist in the
- connection counter numbering. A warning will be logged in the error
- log to indicate the UUID and counter of the dropped fragment, so it
- can be confirmed the fragment was dropped.</p>
-
- <p>It is possible that the terminating empty fragment may not appear,
- caused by the httpd process crashing, or being terminated ungracefully.
- The terminating fragment may be dropped if the process reading the
- fragments is not fast enough.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="FirehoseConnectionInput" id="FirehoseConnectionInput">FirehoseConnectionInput</a> <a name="firehoseconnectioninput" id="firehoseconnectioninput">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Capture traffic coming into the server on each connection</td></tr>
<div class="example"><h3>Example</h3><pre class="prettyprint lang-config">FirehoseRequestOutput request-output.firehose</pre>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enable" id="enable">Enabling a Firehose</a></h2>
+
+
+ <p>To enable the module, it should be compiled and loaded
+ in to your running Apache configuration, and the directives below
+ used to record the data you are interested in.</p>
+
+ <p>It is possible to record both incoming and outgoing data to
+ the same filename if desired, as the direction of flow is recorded
+ within each fragment.</p>
+
+ <p>It is possible to write to both normal files and fifos (pipes).
+ In the case of fifos, mod_firehose ensures that the packet size is
+ no larger than PIPE_BUF to ensure writes are atomic.</p>
+
+ <p>If a pipe is being used, something must be reading from the pipe
+ before httpd is started for the pipe to be successfully opened for
+ write. If the request to open the pipe fails, mod_firehose will
+ silently stand down and not record anything, and the server will
+ keep running as normal.</p>
+
+ <p>By default, all attempts to write will block the server. If the
+ webserver has been built against APR v2.0 or later, and an optional
+ "nonblock" parameter is specified all file writes will be non
+ blocking, and buffer overflows will cause debugging data to be lost.
+ In this case it is possible to prioritise the running of the server
+ over the recording of firehose data.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="format" id="format">Stream Format</a></h2>
+
+
+ <p>The server typically serves multiple connections simultaneously,
+ and as a result requests and responses need to be multiplexed before
+ being written to the firehose.</p>
+
+ <p>The fragment format is designed as clear text, so that a firehose
+ can be opened with and inspected by a normal text editor.
+ Alternatively, the <code class="program"><a href="../programs/firehose.html">firehose</a></code> tool can be used to
+ demultiplex the firehose back into individual requests or
+ connections.</p>
+
+ <p>The size of the multiplexed fragments is governed by PIPE_BUF,
+ the maximum size of write the system is prepared to perform
+ atomically. By keeping the multiplexed fragments below PIPE_BUF in
+ size, the module guarantees that data from different fragments does
+ not interleave. The size of PIPE_BUF varies on different operating
+ systems.</p>
+
+ <p>The BNF for the fragment format is as follows:</p>
+
+ <pre> stream = 0*(fragment)
+
+ fragment = header CRLF body CRLF
+
+ header = length SPC timestamp SPC ( request | response ) SPC uuid SPC count
+
+ length = <up to 16 byte hex fragment length>
+ timestamp = <up to 16 byte hex timestamp microseconds since 1970>
+ request = "<"
+ response = ">"
+ uuid = <formatted uuid of the connection>
+ count = <hex fragment number in the connection>
+
+ body = <the binary content of the fragment>
+
+ SPC = <a single space>
+ CRLF = <a carriage return, followed by a line feed></pre>
+
+ <p>All fragments for a connection or a request will share the same
+ UUID, depending on whether connections or requests are being recorded.
+ If connections are being recorded, multiple requests may appear within
+ a connection. A fragment with a zero length indicates the end of the
+ connection.</p>
+
+ <p>Fragments may go missing or be dropped if the process reading the
+ fragments is too slow. If this happens, gaps will exist in the
+ connection counter numbering. A warning will be logged in the error
+ log to indicate the UUID and counter of the dropped fragment, so it
+ can be confirmed the fragment was dropped.</p>
+
+ <p>It is possible that the terminating empty fragment may not appear,
+ caused by the httpd process crashing, or being terminated ungracefully.
+ The terminating fragment may be dropped if the process reading the
+ fragments is not fast enough.</p>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">Order of Processing</a></h2>
-
- <p>The directives provided by <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can
- occur almost anywhere within the server configuration, and can be
- limited in scope by enclosing them in <a href="../sections.html">configuration sections</a>.</p>
-
- <p>Order of processing is important and is affected both by the
- order in the configuration file and by placement in <a href="../sections.html#mergin">configuration sections</a>. These
- two directives have a different effect if reversed:</p>
-
- <pre class="prettyprint lang-config">RequestHeader append MirrorID "mirror 12"
-RequestHeader unset MirrorID</pre>
-
-
- <p>This way round, the <code>MirrorID</code> header is not set. If
- reversed, the MirrorID header is set to "mirror 12".</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="early" id="early">Early and Late Processing</a></h2>
- <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can be applied either early or late
- in the request. The normal mode is late, when <em>Request</em> Headers are
- set immediately before running the content generator and <em>Response</em>
- Headers just as the response is sent down the wire. Always use
- Late mode in an operational server.</p>
-
- <p>Early mode is designed as a test/debugging aid for developers.
- Directives defined using the <code>early</code> keyword are set
- right at the beginning of processing the request. This means
- they can be used to simulate different requests and set up test
- cases, but it also means that headers may be changed at any time
- by other modules before generating a Response.</p>
-
- <p>Because early directives are processed before the request path's
- configuration is traversed, early headers can only be set in a
- main server or virtual host context. Early directives cannot depend
- on a request path, so they will fail in contexts such as
- <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or
- <code class="directive"><a href="../mod/core.html#location"><Location></a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
- <ol>
- <li>
- Copy all request headers that begin with "TS" to the
- response headers:
-
- <pre class="prettyprint lang-config">Header echo ^TS</pre>
-
- </li>
-
- <li>
- Add a header, <code>MyHeader</code>, to the response including a
- timestamp for when the request was received and how long it
- took to begin serving the request. This header can be used by
- the client to intuit load on the server or in isolating
- bottlenecks between the client and the server.
-
- <pre class="prettyprint lang-config">Header set MyHeader "%D %t"</pre>
-
-
- <p>results in this header being added to the response:</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256
- </code></p></div>
- </li>
-
- <li>
- Say hello to Joe
-
- <pre class="prettyprint lang-config">Header set MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."</pre>
-
-
- <p>results in this header being added to the response:</p>
-
- <div class="example"><p><code>
- MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
- to serve this request.
- </code></p></div>
- </li>
-
- <li>
- Conditionally send <code>MyHeader</code> on the response if and
- only if header <code>MyRequestHeader</code> is present on the request.
- This is useful for constructing headers in response to some client
- stimulus. Note that this example requires the services of the
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> module.
-
- <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
-Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre>
-
-
- <p>If the header <code>MyRequestHeader: myvalue</code> is present on
- the HTTP request, the response will contain the following header:</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256 mytext
- </code></p></div>
- </li>
-
- <li>
- Enable DAV to work with Apache running HTTP through SSL hardware
- (<a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">problem
- description</a>) by replacing <var>https:</var> with
- <var>http:</var> in the <var>Destination</var> header:
-
- <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre>
-
- </li>
-
- <li>
- Set the same header value under multiple nonexclusive conditions,
- but do not duplicate the value in the final header.
- If all of the following conditions applied to a request (i.e.,
- if the <code>CGI</code>, <code>NO_CACHE</code> and
- <code>NO_STORE</code> environment variables all existed for the
- request):
-
- <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI
-Header merge Cache-Control no-cache env=NO_CACHE
-Header merge Cache-Control no-store env=NO_STORE</pre>
-
-
- <p>then the response would contain the following header:</p>
-
- <div class="example"><p><code>
- Cache-Control: no-cache, no-store
- </code></p></div>
-
- <p>If <code>append</code> was used instead of <code>merge</code>,
- then the response would contain the following header:</p>
-
- <div class="example"><p><code>
- Cache-Control: no-cache, no-cache, no-store
- </code></p></div>
- </li>
- <li>
- Set a test cookie if and only if the client didn't send us a cookie
- <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
-
- </li>
- <li>
- Append a Caching header for responses with a HTTP status code of 200
- <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre>
-
- </li>
-
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP response headers</td></tr>
input filters to be overridden or modified.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">Order of Processing</a></h2>
+
+ <p>The directives provided by <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can
+ occur almost anywhere within the server configuration, and can be
+ limited in scope by enclosing them in <a href="../sections.html">configuration sections</a>.</p>
+
+ <p>Order of processing is important and is affected both by the
+ order in the configuration file and by placement in <a href="../sections.html#mergin">configuration sections</a>. These
+ two directives have a different effect if reversed:</p>
+
+ <pre class="prettyprint lang-config">RequestHeader append MirrorID "mirror 12"
+RequestHeader unset MirrorID</pre>
+
+
+ <p>This way round, the <code>MirrorID</code> header is not set. If
+ reversed, the MirrorID header is set to "mirror 12".</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="early" id="early">Early and Late Processing</a></h2>
+ <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can be applied either early or late
+ in the request. The normal mode is late, when <em>Request</em> Headers are
+ set immediately before running the content generator and <em>Response</em>
+ Headers just as the response is sent down the wire. Always use
+ Late mode in an operational server.</p>
+
+ <p>Early mode is designed as a test/debugging aid for developers.
+ Directives defined using the <code>early</code> keyword are set
+ right at the beginning of processing the request. This means
+ they can be used to simulate different requests and set up test
+ cases, but it also means that headers may be changed at any time
+ by other modules before generating a Response.</p>
+
+ <p>Because early directives are processed before the request path's
+ configuration is traversed, early headers can only be set in a
+ main server or virtual host context. Early directives cannot depend
+ on a request path, so they will fail in contexts such as
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or
+ <code class="directive"><a href="../mod/core.html#location"><Location></a></code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
+
+ <ol>
+ <li>
+ Copy all request headers that begin with "TS" to the
+ response headers:
+
+ <pre class="prettyprint lang-config">Header echo ^TS</pre>
+
+ </li>
+
+ <li>
+ Add a header, <code>MyHeader</code>, to the response including a
+ timestamp for when the request was received and how long it
+ took to begin serving the request. This header can be used by
+ the client to intuit load on the server or in isolating
+ bottlenecks between the client and the server.
+
+ <pre class="prettyprint lang-config">Header set MyHeader "%D %t"</pre>
+
+
+ <p>results in this header being added to the response:</p>
+
+ <div class="example"><p><code>
+ MyHeader: D=3775428 t=991424704447256
+ </code></p></div>
+ </li>
+
+ <li>
+ Say hello to Joe
+
+ <pre class="prettyprint lang-config">Header set MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."</pre>
+
+
+ <p>results in this header being added to the response:</p>
+
+ <div class="example"><p><code>
+ MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
+ to serve this request.
+ </code></p></div>
+ </li>
+
+ <li>
+ Conditionally send <code>MyHeader</code> on the response if and
+ only if header <code>MyRequestHeader</code> is present on the request.
+ This is useful for constructing headers in response to some client
+ stimulus. Note that this example requires the services of the
+ <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> module.
+
+ <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
+Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre>
+
+
+ <p>If the header <code>MyRequestHeader: myvalue</code> is present on
+ the HTTP request, the response will contain the following header:</p>
+
+ <div class="example"><p><code>
+ MyHeader: D=3775428 t=991424704447256 mytext
+ </code></p></div>
+ </li>
+
+ <li>
+ Enable DAV to work with Apache running HTTP through SSL hardware
+ (<a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">problem
+ description</a>) by replacing <var>https:</var> with
+ <var>http:</var> in the <var>Destination</var> header:
+
+ <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre>
+
+ </li>
+
+ <li>
+ Set the same header value under multiple nonexclusive conditions,
+ but do not duplicate the value in the final header.
+ If all of the following conditions applied to a request (i.e.,
+ if the <code>CGI</code>, <code>NO_CACHE</code> and
+ <code>NO_STORE</code> environment variables all existed for the
+ request):
+
+ <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI
+Header merge Cache-Control no-cache env=NO_CACHE
+Header merge Cache-Control no-store env=NO_STORE</pre>
+
+
+ <p>then the response would contain the following header:</p>
+
+ <div class="example"><p><code>
+ Cache-Control: no-cache, no-store
+ </code></p></div>
+
+ <p>If <code>append</code> was used instead of <code>merge</code>,
+ then the response would contain the following header:</p>
+
+ <div class="example"><p><code>
+ Cache-Control: no-cache, no-cache, no-store
+ </code></p></div>
+ </li>
+ <li>
+ Set a test cookie if and only if the client didn't send us a cookie
+ <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
+
+ </li>
+ <li>
+ Append a Caching header for responses with a HTTP status code of 200
+ <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre>
+
+ </li>
+
+ </ol>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Exemples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">Chronologie du traitement</a></h2>
-
- <p>Les directives fournies par <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> peuvent
- s'insérer presque partout dans la configuration du serveur, et on
- peut limiter leur portée en les plaçant dans des <a href="../sections.html">sections de configuration</a>.</p>
-
- <p>La chronologie du traitement est importante et est affectée par
- l'ordre d'apparition des directives dans le fichier de configuration
- et par leur placement dans les <a href="../sections.html#mergin">sections de configuration</a>. Ainsi,
- ces deux directives ont un effet différent si leur ordre est inversé
- :</p>
-
- <pre class="prettyprint lang-config">RequestHeader append MirrorID "mirror 12"
-RequestHeader unset MirrorID</pre>
-
-
- <p>Dans cet ordre, l'en-tête <code>MirrorID</code> n'est pas défini.
- Si l'ordre des directives était inversé, l'en-tête
- <code>MirrorID</code> serait défini à "mirror 12".</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="early" id="early">Traitement précoce et traitement
-tardif</a></h2>
- <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> peut agir soir précocement, soit
- tardivement au niveau de la requête. Le mode normal est le mode
- tardif, lorsque les en-têtes de <em>requête</em> sont définis, immédiatement
- avant l'exécution du générateur de contenu, et pour les en-têtes de
- <em>réponse</em>, juste au moment où la réponse est envoyée sur le réseau.
- Utilisez toujours le mode tardif sur un serveur en production.</p>
-
- <p>Le mode précoce a été conçu à des fins d'aide aux tests et au
- débogage pour les développeurs. Les directives définies en utilisant
- le mot-clé <code>early</code> sont censées agir au tout début du
- traitement de la requête. Cela signifie que l'on peut les utiliser
- pour simuler différentes requêtes et définir des situations de test,
- tout en gardant à l'esprit que les en-têtes peuvent être modifiés à
- tout moment par d'autres modules avant que le réponse ne soit
- générée.</p>
-
- <p>Comme les directives précoces sont traitées avant que le
- chemin de la requête ne soit parcouru, les en-têtes
- précoces ne peuvent être définis que dans un contexte de serveur
- principal ou de serveur virtuel. Les directives précoces ne peuvent
- pas dépendre d'un chemin de requête, si bien qu'elles échoueront
- dans des contextes tels que <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou <code class="directive"><a href="../mod/core.html#location"><Location></a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Exemples</a></h2>
-
- <ol>
- <li>
- Copie tous les en-têtes de requête qui commencent par "TS" vers
- les en-têtes de la réponse :
-
- <pre class="prettyprint lang-config">Header echo ^TS</pre>
-
- </li>
-
- <li>
- Ajoute à la réponse un en-tête, <code>mon-en-tête</code>, qui
- contient un horodatage permettant de déterminer le moment où la
- requête a été reçue, et le temps qui s'est écoulé jusqu'à ce que
- la requête ait commencé à être servie. Cet en-tête peut être
- utilisé par le client pour estimer la charge du serveur ou
- isoler les goulets d'étranglement entre le client et le
- serveur.
-
- <pre class="prettyprint lang-config">Header set mon-en-tête "%D %t"</pre>
-
-
- <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p>
-
- <div class="example"><p><code>
- mon-en-tête: D=3775428 t=991424704447256
- </code></p></div>
- </li>
-
- <li>
- Dit Bonjour à Joe
-
- <div class="example"><p><code>
- Header set mon-en-tête "Bonjour Joe. Il a fallu %D microsecondes \<br />
- à Apache pour servir cette requête."
- </code></p></div>
-
- <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p>
-
- <pre class="prettyprint lang-config"> Header set MyHeader "Bonjour Joe. Il a fallu D=3775428 microsecondes à Apache
- pour servir cette requête."</pre>
-
- </li>
-
- <li>
- Ajoute l'en-tête <code>mon-en-tête</code> à la réponse si et
- seulement si l'en-tête <code>mon-en-tête-requête</code> est
- présent dans la requête. Ceci peut s'avérer utile pour générer
- des en-têtes de réponse "à la tête du client". Notez que cet
- exemple nécessite les services du module
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>.
-
- <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
-Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre>
-
-
- <p>Si l'en-tête <code>mon-en-tête-requête: mavaleur</code> est
- présent dans la requête HTTP, la réponse contiendra un en-tête
- du type :</p>
-
- <div class="example"><p><code>
- mon-en-tête: D=3775428 t=991424704447256 montexte
- </code></p></div>
- </li>
-
- <li>
- Permet à DAV de fonctionner avec Apache sur SSL (voir la <a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">description
- du problème</a>) en remplaçant <var>https:</var> par
- <var>http:</var> dans l'en-tête <var>Destination</var> :
-
- <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre>
-
- </li>
-
- <li>
- Définit la valeur d'un même en-tête sous de multiples conditions
- non exclusives, mais ne duplique pas une valeur déjà définie
- dans l'en-tête qui en résulte. Si toutes les conditions
- suivantes sont satisfaites pour une requête (en d'autres termes,
- si les trois variables d'environnement <code>CGI</code>,
- <code>NO_CACHE</code> et <code>NO_STORE</code> existent pour la
- requête) :
-
- <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI
-Header merge Cache-Control no-cache env=NO_CACHE
-Header merge Cache-Control no-store env=NO_STORE</pre>
-
-
- <p>alors, la réponse contiendra l'en-tête suivant :</p>
-
- <div class="example"><p><code>
- Cache-Control: no-cache, no-store
- </code></p></div>
-
- <p>Si <code>append</code> avait été utilisé à la place de
- <code>merge</code>, la réponse aurait contenu l'en-tête suivant
- :</p>
-
- <div class="example"><p><code>
- Cache-Control: no-cache, no-cache, no-store
- </code></p></div>
- </li>
- <li>
- Définit un cookie de test si et seulement si le client n'envoie
- pas de cookie
- <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
-
- </li>
- <li>
- Ajoute un en-tête de mise en cache pour les réponses avec un
- code d'état HTTP de 200
- <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre>
-
- </li>
-
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="header" id="header">Directive</a> <a name="Header" id="Header">Header</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure les en-têtes d'une réponse HTTP</td></tr>
d'Apache.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">Chronologie du traitement</a></h2>
+
+ <p>Les directives fournies par <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> peuvent
+ s'insérer presque partout dans la configuration du serveur, et on
+ peut limiter leur portée en les plaçant dans des <a href="../sections.html">sections de configuration</a>.</p>
+
+ <p>La chronologie du traitement est importante et est affectée par
+ l'ordre d'apparition des directives dans le fichier de configuration
+ et par leur placement dans les <a href="../sections.html#mergin">sections de configuration</a>. Ainsi,
+ ces deux directives ont un effet différent si leur ordre est inversé
+ :</p>
+
+ <pre class="prettyprint lang-config">RequestHeader append MirrorID "mirror 12"
+RequestHeader unset MirrorID</pre>
+
+
+ <p>Dans cet ordre, l'en-tête <code>MirrorID</code> n'est pas défini.
+ Si l'ordre des directives était inversé, l'en-tête
+ <code>MirrorID</code> serait défini à "mirror 12".</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="early" id="early">Traitement précoce et traitement
+tardif</a></h2>
+ <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> peut agir soir précocement, soit
+ tardivement au niveau de la requête. Le mode normal est le mode
+ tardif, lorsque les en-têtes de <em>requête</em> sont définis, immédiatement
+ avant l'exécution du générateur de contenu, et pour les en-têtes de
+ <em>réponse</em>, juste au moment où la réponse est envoyée sur le réseau.
+ Utilisez toujours le mode tardif sur un serveur en production.</p>
+
+ <p>Le mode précoce a été conçu à des fins d'aide aux tests et au
+ débogage pour les développeurs. Les directives définies en utilisant
+ le mot-clé <code>early</code> sont censées agir au tout début du
+ traitement de la requête. Cela signifie que l'on peut les utiliser
+ pour simuler différentes requêtes et définir des situations de test,
+ tout en gardant à l'esprit que les en-têtes peuvent être modifiés à
+ tout moment par d'autres modules avant que le réponse ne soit
+ générée.</p>
+
+ <p>Comme les directives précoces sont traitées avant que le
+ chemin de la requête ne soit parcouru, les en-têtes
+ précoces ne peuvent être définis que dans un contexte de serveur
+ principal ou de serveur virtuel. Les directives précoces ne peuvent
+ pas dépendre d'un chemin de requête, si bien qu'elles échoueront
+ dans des contextes tels que <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou <code class="directive"><a href="../mod/core.html#location"><Location></a></code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Exemples</a></h2>
+
+ <ol>
+ <li>
+ Copie tous les en-têtes de requête qui commencent par "TS" vers
+ les en-têtes de la réponse :
+
+ <pre class="prettyprint lang-config">Header echo ^TS</pre>
+
+ </li>
+
+ <li>
+ Ajoute à la réponse un en-tête, <code>mon-en-tête</code>, qui
+ contient un horodatage permettant de déterminer le moment où la
+ requête a été reçue, et le temps qui s'est écoulé jusqu'à ce que
+ la requête ait commencé à être servie. Cet en-tête peut être
+ utilisé par le client pour estimer la charge du serveur ou
+ isoler les goulets d'étranglement entre le client et le
+ serveur.
+
+ <pre class="prettyprint lang-config">Header set mon-en-tête "%D %t"</pre>
+
+
+ <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p>
+
+ <div class="example"><p><code>
+ mon-en-tête: D=3775428 t=991424704447256
+ </code></p></div>
+ </li>
+
+ <li>
+ Dit Bonjour à Joe
+
+ <div class="example"><p><code>
+ Header set mon-en-tête "Bonjour Joe. Il a fallu %D microsecondes \<br />
+ à Apache pour servir cette requête."
+ </code></p></div>
+
+ <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p>
+
+ <pre class="prettyprint lang-config"> Header set MyHeader "Bonjour Joe. Il a fallu D=3775428 microsecondes à Apache
+ pour servir cette requête."</pre>
+
+ </li>
+
+ <li>
+ Ajoute l'en-tête <code>mon-en-tête</code> à la réponse si et
+ seulement si l'en-tête <code>mon-en-tête-requête</code> est
+ présent dans la requête. Ceci peut s'avérer utile pour générer
+ des en-têtes de réponse "à la tête du client". Notez que cet
+ exemple nécessite les services du module
+ <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>.
+
+ <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
+Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre>
+
+
+ <p>Si l'en-tête <code>mon-en-tête-requête: mavaleur</code> est
+ présent dans la requête HTTP, la réponse contiendra un en-tête
+ du type :</p>
+
+ <div class="example"><p><code>
+ mon-en-tête: D=3775428 t=991424704447256 montexte
+ </code></p></div>
+ </li>
+
+ <li>
+ Permet à DAV de fonctionner avec Apache sur SSL (voir la <a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">description
+ du problème</a>) en remplaçant <var>https:</var> par
+ <var>http:</var> dans l'en-tête <var>Destination</var> :
+
+ <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre>
+
+ </li>
+
+ <li>
+ Définit la valeur d'un même en-tête sous de multiples conditions
+ non exclusives, mais ne duplique pas une valeur déjà définie
+ dans l'en-tête qui en résulte. Si toutes les conditions
+ suivantes sont satisfaites pour une requête (en d'autres termes,
+ si les trois variables d'environnement <code>CGI</code>,
+ <code>NO_CACHE</code> et <code>NO_STORE</code> existent pour la
+ requête) :
+
+ <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI
+Header merge Cache-Control no-cache env=NO_CACHE
+Header merge Cache-Control no-store env=NO_STORE</pre>
+
+
+ <p>alors, la réponse contiendra l'en-tête suivant :</p>
+
+ <div class="example"><p><code>
+ Cache-Control: no-cache, no-store
+ </code></p></div>
+
+ <p>Si <code>append</code> avait été utilisé à la place de
+ <code>merge</code>, la réponse aurait contenu l'en-tête suivant
+ :</p>
+
+ <div class="example"><p><code>
+ Cache-Control: no-cache, no-cache, no-store
+ </code></p></div>
+ </li>
+ <li>
+ Définit un cookie de test si et seulement si le client n'envoie
+ pas de cookie
+ <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
+
+ </li>
+ <li>
+ Ajoute un en-tête de mise en cache pour les réponses avec un
+ code d'état HTTP de 200
+ <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre>
+
+ </li>
+
+ </ol>
+</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_headers.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#examples">例</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">処理の順番</a></h2>
-
- <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> のディレクティブはサーバ設定のほぼどこにでも
- 書くことができ、影響する範囲を<a href="../sections.html">設定用セクション</a>で囲むことで限定する
- ことができます。</p>
-
- <p>処理の順番は重要で、設定ファイル中の順番と、<a href="../sections.html">設定用セクション</a>内の位置との両方に
- 影響されます。以下の二つのヘッダは順番が逆になると
- 違う結果になります:</p>
-
- <div class="example"><p><code>
- RequestHeader append MirrorID "mirror 12"<br />
- RequestHeader unset MirrorID
- </code></p></div>
-
- <p>この順番の場合は、<code>MirrorID</code> ヘッダは設定されません。
- 逆になっていると、MirrorID ヘッダは "mirror 12" に設定されます。</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="early" id="early">早期処理、後期処理</a></h2>
- <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> では、リクエストの早期か後期かの
- どちらで適用するかを選べます。通常は後期モードで、
- コンテンツ生成が実行される直前にリクエストヘッダがセットされ、
- レスポンスとして送出される直前にレスポンスヘッダがセットされます。
- 運用中のサーバでは必ず後期モードを使ってください。</p>
-
- <p>早期モードは開発者向けのテスト/デバッグ用に設計されています。
- <code>early</code> キーワード指定されたディレクティブによって、
- リクエスト処理の開始地点になります。
- つまり、異なるリクエストを試したりテストケースをセットアップするのに
- 活用できる一方で、レスポンスを生成する前に他のモジュールによって
- ヘッダが書き換えられてしまうかもしれないということを意味します。</p>
-
- <p>early ディレクティブではリクエストパスの設定が解決される前に
- 処理されるので、メインサーバかバーチャルホストコンテキストでのみ、
- 早期ヘッダをセットできます。early ディレクティブはリクエストパスに
- 依存することはできませんので、<code><Directory></code> や
- <code><Location></code> といったコンテキスト内では使用
- できません。</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">例</a></h2>
-
- <ol>
- <li>リクエストヘッダ中の "TS" で始まるフィールドをすべて応答ヘッダに
- コピーします:
- <div class="example"><p><code>
- Header echo ^TS
- </code></p></div>
- </li>
-
- <li>
- リクエストを受け付けた時刻とリクエストを処理した時間を入れたヘッダ、
- <code>MyHeader</code> を応答に追加します。このヘッダはクライアントが
- サーバの負荷を直観的に知るためや、クライアント-サーバ間の
- ボトルネックを調べるために使うことができます。
-
- <div class="example"><p><code>
- Header add MyHeader "%D %t"
- </code></p></div>
-
- <p>上記の設定では、以下のようなヘッダが応答に追加されることになります:</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256
- </code></p></div>
- </li>
-
- <li>
- Joe にあいさつをします:
-
- <div class="example"><p><code>
- Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
- </code></p></div>
-
- <p>以下のようなヘッダが応答に追加されることになります</p>
-
- <div class="example"><p><code>
- MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
- </code></p></div>
- </li>
-
- <li>リクエストに "MyRequestHeader" があるときに限り <code>MyHeader</code> を応答に
- 付けます。これは、クライアントの要求に応えてヘッダを作成するときに
- 役に立ちます。この例では <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> モジュールが必要なことに
- 注意してください。
-
- <div class="example"><p><code>
- SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
- Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
- </code></p></div>
-
- <p>もし HTTP リクエストに <code>MyRequestHeader: value</code> ヘッダが
- あると、応答には以下のようなヘッダが付加されます。</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256 mytext
- </code></p></div>
- </li>
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>HTTP 応答ヘッダの設定</td></tr>
生成されたヘッダを上書きしたり修正したりできるようになっています。</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">処理の順番</a></h2>
+
+ <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> のディレクティブはサーバ設定のほぼどこにでも
+ 書くことができ、影響する範囲を<a href="../sections.html">設定用セクション</a>で囲むことで限定する
+ ことができます。</p>
+
+ <p>処理の順番は重要で、設定ファイル中の順番と、<a href="../sections.html">設定用セクション</a>内の位置との両方に
+ 影響されます。以下の二つのヘッダは順番が逆になると
+ 違う結果になります:</p>
+
+ <div class="example"><p><code>
+ RequestHeader append MirrorID "mirror 12"<br />
+ RequestHeader unset MirrorID
+ </code></p></div>
+
+ <p>この順番の場合は、<code>MirrorID</code> ヘッダは設定されません。
+ 逆になっていると、MirrorID ヘッダは "mirror 12" に設定されます。</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="early" id="early">早期処理、後期処理</a></h2>
+ <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> では、リクエストの早期か後期かの
+ どちらで適用するかを選べます。通常は後期モードで、
+ コンテンツ生成が実行される直前にリクエストヘッダがセットされ、
+ レスポンスとして送出される直前にレスポンスヘッダがセットされます。
+ 運用中のサーバでは必ず後期モードを使ってください。</p>
+
+ <p>早期モードは開発者向けのテスト/デバッグ用に設計されています。
+ <code>early</code> キーワード指定されたディレクティブによって、
+ リクエスト処理の開始地点になります。
+ つまり、異なるリクエストを試したりテストケースをセットアップするのに
+ 活用できる一方で、レスポンスを生成する前に他のモジュールによって
+ ヘッダが書き換えられてしまうかもしれないということを意味します。</p>
+
+ <p>early ディレクティブではリクエストパスの設定が解決される前に
+ 処理されるので、メインサーバかバーチャルホストコンテキストでのみ、
+ 早期ヘッダをセットできます。early ディレクティブはリクエストパスに
+ 依存することはできませんので、<code><Directory></code> や
+ <code><Location></code> といったコンテキスト内では使用
+ できません。</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">例</a></h2>
+
+ <ol>
+ <li>リクエストヘッダ中の "TS" で始まるフィールドをすべて応答ヘッダに
+ コピーします:
+ <div class="example"><p><code>
+ Header echo ^TS
+ </code></p></div>
+ </li>
+
+ <li>
+ リクエストを受け付けた時刻とリクエストを処理した時間を入れたヘッダ、
+ <code>MyHeader</code> を応答に追加します。このヘッダはクライアントが
+ サーバの負荷を直観的に知るためや、クライアント-サーバ間の
+ ボトルネックを調べるために使うことができます。
+
+ <div class="example"><p><code>
+ Header add MyHeader "%D %t"
+ </code></p></div>
+
+ <p>上記の設定では、以下のようなヘッダが応答に追加されることになります:</p>
+
+ <div class="example"><p><code>
+ MyHeader: D=3775428 t=991424704447256
+ </code></p></div>
+ </li>
+
+ <li>
+ Joe にあいさつをします:
+
+ <div class="example"><p><code>
+ Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
+ </code></p></div>
+
+ <p>以下のようなヘッダが応答に追加されることになります</p>
+
+ <div class="example"><p><code>
+ MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
+ </code></p></div>
+ </li>
+
+ <li>リクエストに "MyRequestHeader" があるときに限り <code>MyHeader</code> を応答に
+ 付けます。これは、クライアントの要求に応えてヘッダを作成するときに
+ 役に立ちます。この例では <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> モジュールが必要なことに
+ 注意してください。
+
+ <div class="example"><p><code>
+ SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
+ Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
+ </code></p></div>
+
+ <p>もし HTTP リクエストに <code>MyRequestHeader: value</code> ヘッダが
+ あると、応答には以下のようなヘッダが付加されます。</p>
+
+ <div class="example"><p><code>
+ MyHeader: D=3775428 t=991424704447256 mytext
+ </code></p></div>
+ </li>
+ </ol>
+</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_headers.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#examples">¿¹Á¦</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">ó¸® ¼ø¼</a></h2>
-
- <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>°¡ Á¦°øÇÏ´Â Áö½Ã¾î´Â ¼¹ö¼³Á¤ÀÇ
- °ÅÀÇ ¸ðµç Àå¼Ò¿¡¼ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, <a href="../sections.html">¼³Á¤ ¼½¼Ç</a>À¸·Î °¨½Î¼ Áö½Ã¾îÀÇ
- ¹üÀ§¸¦ Á¦ÇÑÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- <p>󸮼ø¼´Â Áß¿äÇϸç, ¼³Á¤ÆÄÀÏ¿¡ ³ª¿Â ¼ø¼¿Í <a href="../sections.html#mergin">¼³Á¤ ¼½¼Ç</a>ÀÇ ¿µÇâÀ» ¹Þ´Â´Ù.
- ´ÙÀ½ µÎ Áö½Ã¾î¸¦ ¹Ý´ë·Î ÀûÀ¸¸é È¿°ú°¡ ´Þ¶óÁø´Ù.</p>
-
- <div class="example"><p><code>
- RequestHeader append MirrorID "mirror 12"<br />
- RequestHeader unset MirrorID
- </code></p></div>
-
- <p>À§¿Í °°ÀÌ ÀûÀ¸¸é <code>MirrorID</code> Çì´õ°¡ ³ª¿ÀÁö
- ¾Ê´Â´Ù. ¹Ý´ë·Î ÀûÀ¸¸é MirrorID Çì´õ¸¦ "mirror 12"·Î ¼³Á¤ÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="early" id="early">À̸¥(early) ó¸®¿Í ´ÊÀº(late) ó¸®</a></h2>
- <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>¸¦ ¿äû Ãʱ⳪ ³ªÁß¿¡ Àû¿ëÇÒ
- ¼ö ÀÖ´Ù. º¸ÅëÀº ³»¿ë»ý¼ºÀÚ¸¦ ½ÇÇàÇϱâ Á÷Àü¿¡ ¿äû Çì´õ¸¦
- ¼³Á¤ÇÏ°í ÀÀ´äÀ» ³×Æ®¿÷¿¡ ¾µ¶§ ÀÀ´ä Çì´õ¸¦ ¼³Á¤ÇÏ´Â ´ÊÀº(late)
- ¹æ½ÄÀ» »ç¿ëÇÑ´Ù. ½ÇÁ¦ ¼ºñ½ºÇÏ´Â ¼¹ö¿¡¼´Â Ç×»ó ´À¸° ¹æ½ÄÀ»
- »ç¿ëÇ϶ó.</p>
-
- <p>À̸¥(early) ¹æ½ÄÀº °³¹ßÀÚ¸¦ À§ÇØ °Ë»ç/µð¹ö±ë¿ëÀ¸·Î ¸¸µé¾ú´Ù.
- <code>early</code> Å°¿öµå¸¦ »ç¿ëÇÏ¿© Á¤ÀÇÇÑ Áö½Ã¾î´Â ¿äûÀ»
- ó¸®Çϱ⠽ÃÀÛÇÒ¶§ ¼³Á¤ÇÑ´Ù. Áï, ´Ù¸¥ ¿äûÀ» ¸ðÀǽÇÇèÇϰųª
- °Ë»ç¸¦ ÇϱâÀ§ÇØ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ÀÀ´äÀ» »ý¼ºÇϱâ Àü¿¡ ´Ù¸¥
- ¸ðµâÀÌ ºÒ½Ã¿¡ Çì´õ¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¿äû°æ·Î¿¡ ´ëÇÑ ¼³Á¤À» »ìÆ캸±â Àü¿¡ À̸¥ Áö½Ã¾î¸¦
- ó¸®Çϱ⶧¹®¿¡ À̸¥ Çì´õ Áö½Ã¾î´Â ÁÖ¼¹öÀ̳ª °¡»óÈ£½ºÆ®
- »ç¿ëÀå¼Ò¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̸¥ Áö½Ã¾î´Â ¿äû°æ·Î¿¡
- ÀÇÁ¸ÇÒ ¼ö ¾ø±â¶§¹®¿¡ <code><Directory></code>³ª
- <code><Location></code>°°Àº »ç¿ëÀå¼Ò¿¡¼ »ç¿ëÇÒ ¼ö
- ¾ø´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
-
- <ol>
- <li>
- "TS"·Î ½ÃÀÛÇÏ´Â ¸ðµç ¿äû Çì´õ¸¦ ÀÀ´ä Çì´õ·Î º¹»çÇÑ´Ù.
-
- <div class="example"><p><code>
- Header echo ^TS
- </code></p></div>
- </li>
-
- <li>
- ÀÀ´ä¿¡ ¿äûÀ» ¹ÞÀº ½Ã°£°ú ¿äûÀ» ¼ºñ½ºÇϴµ¥ °É¸± ½Ã°£À»
- ¾Ë·ÁÁÖ´Â <code>MyHeader</code> Çì´õ¸¦ Ãß°¡ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®´Â
- ÀÌ Çì´õ¸¦ º¸°í ¼¹öÀÇ ºÎÇϸ¦ ÃßÁ¤Çϰųª Ŭ¶óÀ̾ðÆ®¿Í
- ¼¹ö°£ÀÇ º´¸ñÁ¡À» ãÀ» ¼ö ÀÖ´Ù.
-
- <div class="example"><p><code>
- Header add MyHeader "%D %t"
- </code></p></div>
-
- <p>ÀÀ´ä¿¡ ´ÙÀ½°ú °°Àº Çì´õ°¡ »ý±ä´Ù.</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256
- </code></p></div>
- </li>
-
- <li>
- Joe¿¡°Ô ¾È³ç
-
- <div class="example"><p><code>
- Header add MyHeader "Hello Joe. It took %D microseconds \<br />
- for Apache to serve this request."
- </code></p></div>
-
- <p>ÀÀ´ä¿¡ ´ÙÀ½°ú °°Àº Çì´õ°¡ »ý±ä´Ù.</p>
-
- <div class="example"><p><code>
- MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
- to serve this request.
- </code></p></div>
- </li>
-
- <li>
- ¿äû¿¡ "MyRequestHeader" Çì´õ°¡ ÀÖ´Â °æ¿ì¿¡¸¸ ¼±ÅÃÀûÀ¸·Î
- ÀÀ´ä¿¡ <code>MyHeader</code>¸¦ º¸³½´Ù. ƯÁ¤ Ŭ¶óÀ̾ðÆ®¿¡°Ô¸¸
- ÀÀ´ä¿¡ Çì´õ¸¦ Ãß°¡ÇÒ¶§ À¯¿ëÇÏ´Ù. ÀÌ ¿¹Á¦°¡ µ¿ÀÛÇÏ·Á¸é
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> ¸ðµâÀÌ ÇÊ¿äÇÏ´Ù.
-
- <div class="example"><p><code>
- SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
- Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader<br />
- </code></p></div>
-
- <p>HTTP ¿äû¿¡ <code>MyRequestHeader: value</code> Çì´õ°¡
- ÀÖ´Ù¸é, ÀÀ´ä¿¡ ´ÙÀ½°ú °°Àº Çì´õ°¡ »ý±ä´Ù.</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256 mytext
- </code></p></div>
- </li>
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">Áö½Ã¾î</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>HTTP ÀÀ´ä Çì´õ¸¦ ±¸¼ºÇÑ´Ù</td></tr>
¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="order" id="order">ó¸® ¼ø¼</a></h2>
+
+ <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>°¡ Á¦°øÇÏ´Â Áö½Ã¾î´Â ¼¹ö¼³Á¤ÀÇ
+ °ÅÀÇ ¸ðµç Àå¼Ò¿¡¼ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, <a href="../sections.html">¼³Á¤ ¼½¼Ç</a>À¸·Î °¨½Î¼ Áö½Ã¾îÀÇ
+ ¹üÀ§¸¦ Á¦ÇÑÇÒ ¼öµµ ÀÖ´Ù.</p>
+
+ <p>󸮼ø¼´Â Áß¿äÇϸç, ¼³Á¤ÆÄÀÏ¿¡ ³ª¿Â ¼ø¼¿Í <a href="../sections.html#mergin">¼³Á¤ ¼½¼Ç</a>ÀÇ ¿µÇâÀ» ¹Þ´Â´Ù.
+ ´ÙÀ½ µÎ Áö½Ã¾î¸¦ ¹Ý´ë·Î ÀûÀ¸¸é È¿°ú°¡ ´Þ¶óÁø´Ù.</p>
+
+ <div class="example"><p><code>
+ RequestHeader append MirrorID "mirror 12"<br />
+ RequestHeader unset MirrorID
+ </code></p></div>
+
+ <p>À§¿Í °°ÀÌ ÀûÀ¸¸é <code>MirrorID</code> Çì´õ°¡ ³ª¿ÀÁö
+ ¾Ê´Â´Ù. ¹Ý´ë·Î ÀûÀ¸¸é MirrorID Çì´õ¸¦ "mirror 12"·Î ¼³Á¤ÇÑ´Ù.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="early" id="early">À̸¥(early) ó¸®¿Í ´ÊÀº(late) ó¸®</a></h2>
+ <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>¸¦ ¿äû Ãʱ⳪ ³ªÁß¿¡ Àû¿ëÇÒ
+ ¼ö ÀÖ´Ù. º¸ÅëÀº ³»¿ë»ý¼ºÀÚ¸¦ ½ÇÇàÇϱâ Á÷Àü¿¡ ¿äû Çì´õ¸¦
+ ¼³Á¤ÇÏ°í ÀÀ´äÀ» ³×Æ®¿÷¿¡ ¾µ¶§ ÀÀ´ä Çì´õ¸¦ ¼³Á¤ÇÏ´Â ´ÊÀº(late)
+ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù. ½ÇÁ¦ ¼ºñ½ºÇÏ´Â ¼¹ö¿¡¼´Â Ç×»ó ´À¸° ¹æ½ÄÀ»
+ »ç¿ëÇ϶ó.</p>
+
+ <p>À̸¥(early) ¹æ½ÄÀº °³¹ßÀÚ¸¦ À§ÇØ °Ë»ç/µð¹ö±ë¿ëÀ¸·Î ¸¸µé¾ú´Ù.
+ <code>early</code> Å°¿öµå¸¦ »ç¿ëÇÏ¿© Á¤ÀÇÇÑ Áö½Ã¾î´Â ¿äûÀ»
+ ó¸®Çϱ⠽ÃÀÛÇÒ¶§ ¼³Á¤ÇÑ´Ù. Áï, ´Ù¸¥ ¿äûÀ» ¸ðÀǽÇÇèÇϰųª
+ °Ë»ç¸¦ ÇϱâÀ§ÇØ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ÀÀ´äÀ» »ý¼ºÇϱâ Àü¿¡ ´Ù¸¥
+ ¸ðµâÀÌ ºÒ½Ã¿¡ Çì´õ¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
+
+ <p>¿äû°æ·Î¿¡ ´ëÇÑ ¼³Á¤À» »ìÆ캸±â Àü¿¡ À̸¥ Áö½Ã¾î¸¦
+ ó¸®Çϱ⶧¹®¿¡ À̸¥ Çì´õ Áö½Ã¾î´Â ÁÖ¼¹öÀ̳ª °¡»óÈ£½ºÆ®
+ »ç¿ëÀå¼Ò¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̸¥ Áö½Ã¾î´Â ¿äû°æ·Î¿¡
+ ÀÇÁ¸ÇÒ ¼ö ¾ø±â¶§¹®¿¡ <code><Directory></code>³ª
+ <code><Location></code>°°Àº »ç¿ëÀå¼Ò¿¡¼ »ç¿ëÇÒ ¼ö
+ ¾ø´Ù.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
+
+ <ol>
+ <li>
+ "TS"·Î ½ÃÀÛÇÏ´Â ¸ðµç ¿äû Çì´õ¸¦ ÀÀ´ä Çì´õ·Î º¹»çÇÑ´Ù.
+
+ <div class="example"><p><code>
+ Header echo ^TS
+ </code></p></div>
+ </li>
+
+ <li>
+ ÀÀ´ä¿¡ ¿äûÀ» ¹ÞÀº ½Ã°£°ú ¿äûÀ» ¼ºñ½ºÇϴµ¥ °É¸± ½Ã°£À»
+ ¾Ë·ÁÁÖ´Â <code>MyHeader</code> Çì´õ¸¦ Ãß°¡ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®´Â
+ ÀÌ Çì´õ¸¦ º¸°í ¼¹öÀÇ ºÎÇϸ¦ ÃßÁ¤Çϰųª Ŭ¶óÀ̾ðÆ®¿Í
+ ¼¹ö°£ÀÇ º´¸ñÁ¡À» ãÀ» ¼ö ÀÖ´Ù.
+
+ <div class="example"><p><code>
+ Header add MyHeader "%D %t"
+ </code></p></div>
+
+ <p>ÀÀ´ä¿¡ ´ÙÀ½°ú °°Àº Çì´õ°¡ »ý±ä´Ù.</p>
+
+ <div class="example"><p><code>
+ MyHeader: D=3775428 t=991424704447256
+ </code></p></div>
+ </li>
+
+ <li>
+ Joe¿¡°Ô ¾È³ç
+
+ <div class="example"><p><code>
+ Header add MyHeader "Hello Joe. It took %D microseconds \<br />
+ for Apache to serve this request."
+ </code></p></div>
+
+ <p>ÀÀ´ä¿¡ ´ÙÀ½°ú °°Àº Çì´õ°¡ »ý±ä´Ù.</p>
+
+ <div class="example"><p><code>
+ MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
+ to serve this request.
+ </code></p></div>
+ </li>
+
+ <li>
+ ¿äû¿¡ "MyRequestHeader" Çì´õ°¡ ÀÖ´Â °æ¿ì¿¡¸¸ ¼±ÅÃÀûÀ¸·Î
+ ÀÀ´ä¿¡ <code>MyHeader</code>¸¦ º¸³½´Ù. ƯÁ¤ Ŭ¶óÀ̾ðÆ®¿¡°Ô¸¸
+ ÀÀ´ä¿¡ Çì´õ¸¦ Ãß°¡ÇÒ¶§ À¯¿ëÇÏ´Ù. ÀÌ ¿¹Á¦°¡ µ¿ÀÛÇÏ·Á¸é
+ <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> ¸ðµâÀÌ ÇÊ¿äÇÏ´Ù.
+
+ <div class="example"><p><code>
+ SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
+ Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader<br />
+ </code></p></div>
+
+ <p>HTTP ¿äû¿¡ <code>MyRequestHeader: value</code> Çì´õ°¡
+ ÀÖ´Ù¸é, ÀÀ´ä¿¡ ´ÙÀ½°ú °°Àº Çì´õ°¡ »ý±ä´Ù.</p>
+
+ <div class="example"><p><code>
+ MyHeader: D=3775428 t=991424704447256 mytext
+ </code></p></div>
+ </li>
+ </ol>
+</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_headers.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#consuming">Consuming mod_heartbeat Output</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="HeartbeatAddress" id="HeartbeatAddress">HeartbeatAddress</a> <a name="heartbeataddress" id="heartbeataddress">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Multicast address for heartbeat packets</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>HeartbeatAddress <var>addr:port</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>disabled</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_heartbeat</td></tr>
+</table>
+<p>The <code class="directive">HeartbeatAddress</code> directive specifies the
+multicast address to which <code class="module"><a href="../mod/mod_heartbeat.html">mod_heartbeat</a></code> will send
+status information. This address will usually correspond to a configured
+ <code class="directive"><a href="../mod/mod_heartmonitor.html#heartbeatlisten">HeartbeatListen</a></code> on a
+frontend proxy system.</p>
+<pre class="prettyprint lang-config">HeartbeatAddress 239.0.0.1:27999</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="consuming" id="consuming">Consuming mod_heartbeat Output</a></h2>
separated by '&', being added in the future.
</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="HeartbeatAddress" id="HeartbeatAddress">HeartbeatAddress</a> <a name="heartbeataddress" id="heartbeataddress">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Multicast address for heartbeat packets</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>HeartbeatAddress <var>addr:port</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>disabled</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_heartbeat</td></tr>
-</table>
-<p>The <code class="directive">HeartbeatAddress</code> directive specifies the
-multicast address to which <code class="module"><a href="../mod/mod_heartbeat.html">mod_heartbeat</a></code> will send
-status information. This address will usually correspond to a configured
- <code class="directive"><a href="../mod/mod_heartmonitor.html#heartbeatlisten">HeartbeatListen</a></code> on a
-frontend proxy system.</p>
-<pre class="prettyprint lang-config">HeartbeatAddress 239.0.0.1:27999</pre>
-
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#heartbeatstorage">HeartbeatStorage</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="HeartbeatListen" id="HeartbeatListen">HeartbeatListen</a> <a name="heartbeatlisten" id="heartbeatlisten">Directive</a></h2>
<table class="directive">
<code class="module"><a href="../mod/mod_slotmem_shm.html">mod_slotmem_shm</a></code> is not loaded.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_heartmonitor.html" title="English"> en </a></p>
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IdentityCheck" id="IdentityCheck">IdentityCheck</a> <a name="identitycheck" id="identitycheck">Directive</a></h2>
<table class="directive">
timeout value according to your local network speed.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_ident.html" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="identitycheck" id="identitycheck">Directive</a> <a name="IdentityCheck" id="IdentityCheck">IdentityCheck</a></h2>
<table class="directive">
valeur de ce délai en fonction du débit de votre réseau local.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_ident.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IdentityCheck" id="IdentityCheck">IdentityCheck</a> <a name="identitycheck" id="identitycheck">ディレクティブ</a></h2>
<table class="directive">
合わせてタイムアウト値を調節するのがよいでしょう。</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_ident.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IdentityCheck" id="IdentityCheck">IdentityCheck</a> <a name="identitycheck" id="identitycheck">Áö½Ã¾î</a></h2>
<table class="directive">
¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_ident.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#referencing">Referencing your mapfile</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ImapBase" id="ImapBase">ImapBase</a> <a name="imapbase" id="imapbase">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default <code>base</code> for imagemap files</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapBase map|referer|<var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapBase http://servername/</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imagemap</td></tr>
+</table>
+ <p>The <code class="directive">ImapBase</code> directive sets the default
+ <code>base</code> used in the imagemap files. Its value is
+ overridden by a <code>base</code> directive within the imagemap
+ file. If not present, the <code>base</code> defaults to
+ <code>http://<var>servername</var>/</code>.</p>
+
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ImapDefault" id="ImapDefault">ImapDefault</a> <a name="imapdefault" id="imapdefault">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default action when an imagemap is called with coordinates
+that are not explicitly mapped</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapDefault error|nocontent|map|referer|<var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapDefault nocontent</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imagemap</td></tr>
+</table>
+ <p>The <code class="directive">ImapDefault</code> directive sets the default
+ <code>default</code> used in the imagemap files. Its value is
+ overridden by a <code>default</code> directive within the
+ imagemap file. If not present, the <code>default</code> action
+ is <code>nocontent</code>, which means that a <code>204 No
+ Content</code> is sent to the client. In this case, the client
+ should continue to display the original page.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ImapMenu" id="ImapMenu">ImapMenu</a> <a name="imapmenu" id="imapmenu">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action if no coordinates are given when calling
+an imagemap</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapMenu none|formatted|semiformatted|unformatted</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapMenu formatted</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imagemap</td></tr>
+</table>
+ <p>The <code class="directive">ImapMenu</code> directive determines the
+ action taken if an imagemap file is called without valid
+ coordinates.</p>
+
+ <dl>
+ <dt><code>none</code></dt>
+ <dd>If ImapMenu is <code>none</code>, no menu is generated,
+ and the <code>default</code> action is performed.</dd>
+
+ <dt><code>formatted</code></dt>
+ <dd>A <code>formatted</code> menu is the simplest menu.
+ Comments in the imagemap file are ignored. A level one header
+ is printed, then an hrule, then the links each on a separate
+ line. The menu has a consistent, plain look close to that of
+ a directory listing.</dd>
+
+ <dt><code>semiformatted</code></dt>
+ <dd>In the <code>semiformatted</code> menu, comments are
+ printed where they occur in the imagemap file. Blank lines
+ are turned into HTML breaks. No header or hrule is printed,
+ but otherwise the menu is the same as a
+ <code>formatted</code> menu.</dd>
+
+ <dt><code>unformatted</code></dt>
+ <dd>Comments are printed, blank lines are ignored. Nothing is
+ printed that does not appear in the imagemap file. All breaks
+ and headers must be included as comments in the imagemap
+ file. This gives you the most flexibility over the appearance
+ of your menus, but requires you to treat your map files as
+ HTML instead of plaintext.</dd>
+ </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="features" id="features">New Features</a></h2>
</a>
</code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapBase" id="ImapBase">ImapBase</a> <a name="imapbase" id="imapbase">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default <code>base</code> for imagemap files</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapBase map|referer|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapBase http://servername/</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imagemap</td></tr>
-</table>
- <p>The <code class="directive">ImapBase</code> directive sets the default
- <code>base</code> used in the imagemap files. Its value is
- overridden by a <code>base</code> directive within the imagemap
- file. If not present, the <code>base</code> defaults to
- <code>http://<var>servername</var>/</code>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapDefault" id="ImapDefault">ImapDefault</a> <a name="imapdefault" id="imapdefault">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapDefault error|nocontent|map|referer|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapDefault nocontent</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imagemap</td></tr>
-</table>
- <p>The <code class="directive">ImapDefault</code> directive sets the default
- <code>default</code> used in the imagemap files. Its value is
- overridden by a <code>default</code> directive within the
- imagemap file. If not present, the <code>default</code> action
- is <code>nocontent</code>, which means that a <code>204 No
- Content</code> is sent to the client. In this case, the client
- should continue to display the original page.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapMenu" id="ImapMenu">ImapMenu</a> <a name="imapmenu" id="imapmenu">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action if no coordinates are given when calling
-an imagemap</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapMenu none|formatted|semiformatted|unformatted</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapMenu formatted</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imagemap</td></tr>
-</table>
- <p>The <code class="directive">ImapMenu</code> directive determines the
- action taken if an imagemap file is called without valid
- coordinates.</p>
-
- <dl>
- <dt><code>none</code></dt>
- <dd>If ImapMenu is <code>none</code>, no menu is generated,
- and the <code>default</code> action is performed.</dd>
-
- <dt><code>formatted</code></dt>
- <dd>A <code>formatted</code> menu is the simplest menu.
- Comments in the imagemap file are ignored. A level one header
- is printed, then an hrule, then the links each on a separate
- line. The menu has a consistent, plain look close to that of
- a directory listing.</dd>
-
- <dt><code>semiformatted</code></dt>
- <dd>In the <code>semiformatted</code> menu, comments are
- printed where they occur in the imagemap file. Blank lines
- are turned into HTML breaks. No header or hrule is printed,
- but otherwise the menu is the same as a
- <code>formatted</code> menu.</dd>
-
- <dt><code>unformatted</code></dt>
- <dd>Comments are printed, blank lines are ignored. Nothing is
- printed that does not appear in the imagemap file. All breaks
- and headers must be included as comments in the imagemap
- file. This gives you the most flexibility over the appearance
- of your menus, but requires you to treat your map files as
- HTML instead of plaintext.</dd>
- </dl>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#referencing">¸ÊÆÄÀÏ »ç¿ëÇϱâ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ImapBase" id="ImapBase">ImapBase</a> <a name="imapbase" id="imapbase">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>À̹ÌÁö¸Ê ÆÄÀÏ¿¡¼ <code>base</code> ±âº»°ª</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ImapBase map|referer|<var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ImapBase http://servername/</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_imagemap</td></tr>
+</table>
+ <p><code class="directive">ImapBase</code> Áö½Ã¾î´Â À̹ÌÁö¸Ê ÆÄÀÏ¿¡¼
+ »ç¿ëÇÒ <code>base</code> ±âº»°ªÀ» ¼³Á¤ÇÑ´Ù. À̹ÌÁö¸Ê ÆÄÀÏ
+ ¾È¿¡¼ <code>base</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ¿©±â¼ ¼³Á¤ÇÑ
+ °ªÀº ¹«½ÃÇÑ´Ù. µÑ ¸ðµÎ ¾ø´Ù¸é, <code>base</code> ±âº»°ªÀº
+ <code>http://<var>servername</var>/</code>ÀÌ´Ù.</p>
+
+<h3>Âü°í</h3>
+<ul>
+<li><code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ImapDefault" id="ImapDefault">ImapDefault</a> <a name="imapdefault" id="imapdefault">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>À̹ÌÁö¸Ê¿¡ ¾î´À ¿µ¿ª¿¡µµ ÇØ´çÇÏÁö ¾Ê´Â ÁÂÇ¥¸¦ ÁØ
+°æ¿ì ±âº» Çൿ</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ImapDefault error|nocontent|map|referer|<var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ImapDefault nocontent</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_imagemap</td></tr>
+</table>
+ <p><code class="directive">ImapDefault</code> Áö½Ã¾î´Â À̹ÌÁö¸Ê
+ ÆÄÀÏ¿¡¼ »ç¿ëÇÒ <code>default</code> ±âº»°ªÀ» ¼³Á¤ÇÑ´Ù.
+ À̹ÌÁö¸Ê ÆÄÀÏ ¾È¿¡¼ <code>default</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
+ ¿©±â¼ ¼³Á¤ÇÑ °ªÀº ¹«½ÃÇÑ´Ù. µÑ ¸ðµÎ ¾ø´Ù¸é, <code>default</code>
+ ÇൿÀº Ŭ¶óÀ̾ðÆ®¿¡°Ô <code>204 No Content</code>¸¦ º¸³»´Â
+ <code>nocontent</code>ÀÌ´Ù. ÀÌ °æ¿ì Ŭ¶óÀ̾ðÆ®´Â ¿ø·¡ ÆäÀÌÁö¸¦
+ ±×´ë·Î º¸¿©Áà¾ß ÇÑ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ImapMenu" id="ImapMenu">ImapMenu</a> <a name="imapmenu" id="imapmenu">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÁÂÇ¥¾øÀÌ À̹ÌÁö¸Ê ¿äû½Ã ÃëÇÒ Çൿ</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ImapMenu none|formatted|semiformatted|unformatted</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_imagemap</td></tr>
+</table>
+ <p><code class="directive">ImapMenu</code> Áö½Ã¾î´Â À̹ÌÁö¸Ê ÆÄÀÏ¿¡
+ À¯È¿ÇÑ ÁÂÇ¥¸¦ ÁÖÁö ¾ÊÀº °æ¿ì ÃëÇÒ ÇൿÀ» °áÁ¤ÇÑ´Ù.</p>
+
+ <dl>
+ <dt><code>none</code></dt>
+ <dd>ImapMenu°¡ <code>none</code>À̸é, ¸Þ´º¸¦ ¸¸µéÁö¾Ê°í
+ <code>default</code> ÇൿÀ» ÃëÇÑ´Ù.</dd>
+
+ <dt><code>formatted</code></dt>
+ <dd><code>formatted</code> ¸Þ´º´Â °¡Àå °£´ÜÇÑ ¸Þ´º´Ù.
+ À̹ÌÁö¸Ê ÆÄÀÏÀÇ ÁÖ¼®Àº ¹«½ÃÇÑ´Ù. °¡Àå Å« Ç¥Á¦¿Í ¼öÁ÷¼±À»
+ Ãâ·ÂÇÏ°í, ¸µÅ©¸¦ ÇÑÁÙ¾¿ Ãâ·ÂÇÑ´Ù. ¸Þ´º´Â ÀÏ°üµÇ°í ÆòÀÌÇϸç,
+ µð·ºÅ丮 ¸ñ·Ï°ú Èí»çÇÏ´Ù.</dd>
+
+ <dt><code>semiformatted</code></dt>
+ <dd><code>semiformatted</code> ¸Þ´º´Â À̹ÌÁö¸Ê ÆÄÀÏ¿¡
+ ³ª¿À´Â ÁÖ¼®À» Ãâ·ÂÇÑ´Ù. ºóÁÙÀº HTML Çà¹Ù²ÞÀ¸·Î º¯È¯ÇÑ´Ù.
+ Ç¥Á¦³ª ¼öÁ÷¼±À» ±×¸®Áö ¾ÊÁö¸¸, ³ª¸ÓÁö´Â <code>formatted</code>
+ ¸Þ´º¿Í °°´Ù.</dd>
+
+ <dt><code>unformatted</code></dt>
+ <dd>ÁÖ¼®Àº Ãâ·ÂÇÏ°í, ºóÁÙÀº ¹«½ÃÇÑ´Ù. À̹ÌÁö¸Ê ÆÄÀÏ¿¡
+ ÀÖ´Â ³»¿ë¸¸ Ãâ·ÂÇÑ´Ù. À̹ÌÁö¸Ê ÆÄÀÏÀÇ ÁÖ¼®¿¡ ÇÊ¿äÇÑ ¸ðµç
+ Çà¹Ù²Þ°ú Ç¥Á¦¸¦ Àû¾î¾ß ÇÑ´Ù. ¸Þ´ºÀÇ ¿Ü°üÀ» °¡Àå ÀÚÀ¯ÀÚÁ¦·Î
+ ²Ù¹Ð ¼ö ÀÖÁö¸¸, À̹ÌÁö¸Ê ÆÄÀÏÀ» »ç½Ç»ó ÀÏ¹Ý ¹®ÀÚÆÄÀÏÀÌ
+ ¾Æ´Ñ HTML·Î ºÁ¾ß ÇÑ´Ù.</dd>
+ </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="features" id="features">»õ·Î¿î ±â´É</a></h2>
</a>
</code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapBase" id="ImapBase">ImapBase</a> <a name="imapbase" id="imapbase">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>À̹ÌÁö¸Ê ÆÄÀÏ¿¡¼ <code>base</code> ±âº»°ª</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ImapBase map|referer|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ImapBase http://servername/</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_imagemap</td></tr>
-</table>
- <p><code class="directive">ImapBase</code> Áö½Ã¾î´Â À̹ÌÁö¸Ê ÆÄÀÏ¿¡¼
- »ç¿ëÇÒ <code>base</code> ±âº»°ªÀ» ¼³Á¤ÇÑ´Ù. À̹ÌÁö¸Ê ÆÄÀÏ
- ¾È¿¡¼ <code>base</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ¿©±â¼ ¼³Á¤ÇÑ
- °ªÀº ¹«½ÃÇÑ´Ù. µÑ ¸ðµÎ ¾ø´Ù¸é, <code>base</code> ±âº»°ªÀº
- <code>http://<var>servername</var>/</code>ÀÌ´Ù.</p>
-
-<h3>Âü°í</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapDefault" id="ImapDefault">ImapDefault</a> <a name="imapdefault" id="imapdefault">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>À̹ÌÁö¸Ê¿¡ ¾î´À ¿µ¿ª¿¡µµ ÇØ´çÇÏÁö ¾Ê´Â ÁÂÇ¥¸¦ ÁØ
-°æ¿ì ±âº» Çൿ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ImapDefault error|nocontent|map|referer|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ImapDefault nocontent</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_imagemap</td></tr>
-</table>
- <p><code class="directive">ImapDefault</code> Áö½Ã¾î´Â À̹ÌÁö¸Ê
- ÆÄÀÏ¿¡¼ »ç¿ëÇÒ <code>default</code> ±âº»°ªÀ» ¼³Á¤ÇÑ´Ù.
- À̹ÌÁö¸Ê ÆÄÀÏ ¾È¿¡¼ <code>default</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- ¿©±â¼ ¼³Á¤ÇÑ °ªÀº ¹«½ÃÇÑ´Ù. µÑ ¸ðµÎ ¾ø´Ù¸é, <code>default</code>
- ÇൿÀº Ŭ¶óÀ̾ðÆ®¿¡°Ô <code>204 No Content</code>¸¦ º¸³»´Â
- <code>nocontent</code>ÀÌ´Ù. ÀÌ °æ¿ì Ŭ¶óÀ̾ðÆ®´Â ¿ø·¡ ÆäÀÌÁö¸¦
- ±×´ë·Î º¸¿©Áà¾ß ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapMenu" id="ImapMenu">ImapMenu</a> <a name="imapmenu" id="imapmenu">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÁÂÇ¥¾øÀÌ À̹ÌÁö¸Ê ¿äû½Ã ÃëÇÒ Çൿ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ImapMenu none|formatted|semiformatted|unformatted</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_imagemap</td></tr>
-</table>
- <p><code class="directive">ImapMenu</code> Áö½Ã¾î´Â À̹ÌÁö¸Ê ÆÄÀÏ¿¡
- À¯È¿ÇÑ ÁÂÇ¥¸¦ ÁÖÁö ¾ÊÀº °æ¿ì ÃëÇÒ ÇൿÀ» °áÁ¤ÇÑ´Ù.</p>
-
- <dl>
- <dt><code>none</code></dt>
- <dd>ImapMenu°¡ <code>none</code>À̸é, ¸Þ´º¸¦ ¸¸µéÁö¾Ê°í
- <code>default</code> ÇൿÀ» ÃëÇÑ´Ù.</dd>
-
- <dt><code>formatted</code></dt>
- <dd><code>formatted</code> ¸Þ´º´Â °¡Àå °£´ÜÇÑ ¸Þ´º´Ù.
- À̹ÌÁö¸Ê ÆÄÀÏÀÇ ÁÖ¼®Àº ¹«½ÃÇÑ´Ù. °¡Àå Å« Ç¥Á¦¿Í ¼öÁ÷¼±À»
- Ãâ·ÂÇÏ°í, ¸µÅ©¸¦ ÇÑÁÙ¾¿ Ãâ·ÂÇÑ´Ù. ¸Þ´º´Â ÀÏ°üµÇ°í ÆòÀÌÇϸç,
- µð·ºÅ丮 ¸ñ·Ï°ú Èí»çÇÏ´Ù.</dd>
-
- <dt><code>semiformatted</code></dt>
- <dd><code>semiformatted</code> ¸Þ´º´Â À̹ÌÁö¸Ê ÆÄÀÏ¿¡
- ³ª¿À´Â ÁÖ¼®À» Ãâ·ÂÇÑ´Ù. ºóÁÙÀº HTML Çà¹Ù²ÞÀ¸·Î º¯È¯ÇÑ´Ù.
- Ç¥Á¦³ª ¼öÁ÷¼±À» ±×¸®Áö ¾ÊÁö¸¸, ³ª¸ÓÁö´Â <code>formatted</code>
- ¸Þ´º¿Í °°´Ù.</dd>
-
- <dt><code>unformatted</code></dt>
- <dd>ÁÖ¼®Àº Ãâ·ÂÇÏ°í, ºóÁÙÀº ¹«½ÃÇÑ´Ù. À̹ÌÁö¸Ê ÆÄÀÏ¿¡
- ÀÖ´Â ³»¿ë¸¸ Ãâ·ÂÇÑ´Ù. À̹ÌÁö¸Ê ÆÄÀÏÀÇ ÁÖ¼®¿¡ ÇÊ¿äÇÑ ¸ðµç
- Çà¹Ù²Þ°ú Ç¥Á¦¸¦ Àû¾î¾ß ÇÑ´Ù. ¸Þ´ºÀÇ ¿Ü°üÀ» °¡Àå ÀÚÀ¯ÀÚÁ¦·Î
- ²Ù¹Ð ¼ö ÀÖÁö¸¸, À̹ÌÁö¸Ê ÆÄÀÏÀ» »ç½Ç»ó ÀÏ¹Ý ¹®ÀÚÆÄÀÏÀÌ
- ¾Æ´Ñ HTML·Î ºÁ¾ß ÇÑ´Ù.</dd>
- </dl>
-
</div>
</div>
<div class="bottomlang">
<li><a href="../howto/ssi.html">SSI Tutorial</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enabling" id="enabling">Enabling Server-Side Includes</a></h2>
-
+<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that ends an include element</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIEndTag <var>tag</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIEndTag "-->"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
+ looks for to mark the end of an include element.</p>
- <p>Server Side Includes are implemented by the
- <code>INCLUDES</code> <a href="../filter.html">filter</a>. If
- documents containing server-side include directives are given
- the extension .shtml, the following directives will make Apache
- parse them and assign the resulting document the mime type of
- <code>text/html</code>:</p>
+ <pre class="prettyprint lang-config">SSIEndTag "%>"</pre>
- <pre class="prettyprint lang-config">AddType text/html .shtml
-AddOutputFilter INCLUDES .shtml</pre>
- <p>The following directive must be given for the directories
- containing the shtml files (typically in a
- <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> section,
- but this directive is also valid in <code>.htaccess</code> files if
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> <code>Options</code>
- is set):</p>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#ssistarttag">SSIStartTag</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIErrorMsg" id="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg" id="ssierrormsg">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Error message displayed when there is an SSI
+error</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIErrorMsg <var>message</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIErrorMsg "[an error occurred while processing this
+directive]"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>The <code class="directive">SSIErrorMsg</code> directive changes the error
+ message displayed when <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> encounters an
+ error. For production servers you may consider changing the default
+ error message to <code>"<!-- Error -->"</code> so that
+ the message is not presented to the user.</p>
- <pre class="prettyprint lang-config">Options +Includes</pre>
+ <p>This directive has the same effect as the <code><!--#config
+ errmsg=<var>message</var> --></code> element.</p>
+ <pre class="prettyprint lang-config">SSIErrorMsg "<!-- Error -->"</pre>
- <p>For backwards compatibility, the <code>server-parsed</code>
- <a href="../handler.html">handler</a> also activates the
- INCLUDES filter. As well, Apache will activate the INCLUDES
- filter for any document with mime type
- <code>text/x-server-parsed-html</code> or
- <code>text/x-server-parsed-html3</code> (and the resulting
- output will have the mime type <code>text/html</code>).</p>
- <p>For more information, see our <a href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pathinfo" id="pathinfo">PATH_INFO with Server Side Includes</a></h2>
-
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIETag" id="SSIETag">SSIETag</a> <a name="ssietag" id="ssietag">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls whether ETags are generated by the server.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIETag on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIETag off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>Under normal circumstances, a file filtered by <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
+ may contain elements that are either dynamically generated, or that may
+ have changed independently of the original file. As a result, by default
+ the server is asked not to generate an <code>ETag</code> header for the
+ response by adding <code>no-etag</code> to the request notes.</p>
- <p>Files processed for server-side includes no longer accept
- requests with <code>PATH_INFO</code> (trailing pathname information)
- by default. You can use the <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> directive to
- configure the server to accept requests with <code>PATH_INFO</code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="elements" id="elements">Available Elements</a></h2>
- <p>The document is parsed as an HTML document, with special
- commands embedded as SGML comments. A command has the syntax: </p>
+ <p>The <code class="directive">SSIETag</code> directive suppresses this
+ behaviour, and allows the server to generate an <code>ETag</code> header.
+ This can be used to enable caching of the output. Note that a backend server
+ or dynamic content generator may generate an ETag of its own, ignoring
+ <code>no-etag</code>, and this ETag will be passed by
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> regardless of the value of this setting.
+ <code class="directive">SSIETag</code> can take on the following values:</p>
- <div class="example"><p><code>
- <!--#<var>element</var> <var>attribute</var>=<var>value</var>
- <var>attribute</var>=<var>value</var> ... -->
- </code></p></div>
+ <dl>
- <p>The value will often be enclosed in double quotes, but single
- quotes (<code>'</code>) and backticks (<code>`</code>) are also
- possible. Many commands only allow a single attribute-value pair.
- Note that the comment terminator (<code>--></code>) should be
- preceded by whitespace to ensure that it isn't considered part of
- an SSI token. Note that the leading <code><!--#</code> is <em>one</em>
- token and may not contain any whitespaces.</p>
+ <dt><code>off</code></dt>
+ <dd><code>no-etag</code> will be added to the request notes, and the server
+ is asked not to generate an ETag. Where a server ignores the value of
+ <code>no-etag</code> and generates an ETag anyway, the ETag will be
+ respected.</dd>
- <p>The allowed elements are listed in the following table:</p>
+ <dt><code>on</code></dt>
+ <dd>Existing ETags will be respected, and ETags generated by the server will
+ be passed on in the response.</dd>
- <table class="bordered">
- <tr><th>Element</th><th>Description</th></tr>
- <tr><td><code><a href="#element.config">config</a></code></td>
- <td>configure output formats</td></tr>
- <tr><td><code><a href="#element.echo">echo</a></code></td>
- <td>print variables</td></tr>
- <tr><td><code><a href="#element.exec">exec</a></code></td>
- <td>execute external programs</td></tr>
- <tr><td><code><a href="#element.fsize">fsize</a></code></td>
- <td>print size of a file</td></tr>
- <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
- <td>print last modification time of a file</td></tr>
- <tr><td><code><a href="#element.include">include</a></code></td>
- <td>include a file</td></tr>
- <tr><td><code><a href="#element.printenv">printenv</a></code></td>
- <td>print all available variables</td></tr>
- <tr><td><code><a href="#element.set">set</a></code></td>
- <td>set a value of a variable</td></tr>
- </table>
+ </dl>
- <p>SSI elements may be defined by modules other than
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>. In fact, the <code><a href="#element.exec">exec</a></code> element is provided by
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, and will only be available if this
- module is loaded.</p>
- <h3><a name="element.config" id="element.config">The config Element</a></h3>
- <p>This command controls various aspects of the parsing. The
- valid attributes are:</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSILastModified" id="SSILastModified">SSILastModified</a> <a name="ssilastmodified" id="ssilastmodified">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls whether <code>Last-Modified</code> headers are generated by the
+server.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSILastModified on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSILastModified off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>Under normal circumstances, a file filtered by <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
+ may contain elements that are either dynamically generated, or that may
+ have changed independently of the original file. As a result, by default
+ the <code>Last-Modified</code> header is stripped from the response.</p>
- <dl>
- <dt><code>echomsg</code> (<em>Apache 2.1 and later</em>)</dt>
- <dd><p>The value is a message that is sent back to the
- client if the <code><a href="#element.echo">echo</a></code> element
- attempts to echo an undefined variable. This overrides any <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directives.</p>
+ <p>The <code class="directive">SSILastModified</code> directive overrides this
+ behaviour, and allows the <code>Last-Modified</code> header to be respected
+ if already present, or set if the header is not already present. This can
+ be used to enable caching of the output. <code class="directive">SSILastModified</code>
+ can take on the following values:</p>
- <div class="example"><p><code>
- <!--#config echomsg="[Value Undefined]" -->
- </code></p></div>
- </dd>
+ <dl>
- <dt><code>errmsg</code></dt>
- <dd><p>The value is a message that is sent back to the
- client if an error occurs while parsing the
- document. This overrides any <code class="directive"><a href="#ssierrormsg">SSIErrorMsg</a></code> directives.</p>
-
- <div class="example"><p><code>
- <!--#config errmsg="[Oops, something broke.]" -->
- </code></p></div>
- </dd>
+ <dt><code>off</code></dt>
+ <dd>The <code>Last-Modified</code> header will be stripped from responses,
+ unless the <code class="directive"><a href="#xbithack">XBitHack</a></code> directive
+ is set to <code>full</code> as described below.</dd>
- <dt><code>sizefmt</code></dt>
- <dd><p>The value sets the format to be used when displaying
- the size of a file. Valid values are <code>bytes</code>
- for a count in bytes, or <code>abbrev</code> for a count
- in Kb or Mb as appropriate, for example a size of 1024 bytes
- will be printed as "1K".</p>
-
- <div class="example"><p><code>
- <!--#config sizefmt="abbrev" -->
- </code></p></div>
-
- </dd>
+ <dt><code>on</code></dt>
+ <dd>The <code>Last-Modified</code> header will be respected if already
+ present in a response, and added to the response if the response is a
+ file and the header is missing. The
+ <code class="directive"><a href="#ssilastmodified">SSILastModified</a></code> directive
+ takes precedence over <code class="directive"><a href="#xbithack">XBitHack</a></code>.</dd>
- <dt><code>timefmt</code></dt>
- <dd><p>The value is a string to be used by the
- <code>strftime(3)</code> library routine when printing
- dates.</p>
-
- <div class="example"><p><code>
- <!--#config timefmt=""%R, %B %d, %Y"" -->
- </code></p></div>
-
- </dd>
</dl>
-
-
- <h3><a name="element.echo" id="element.echo">The echo Element</a></h3>
- <p>This command prints one of the <a href="#includevars">include
- variables</a> defined below. If the variable is unset, the result is
- determined by the <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directive. Any dates printed are
- subject to the currently configured <code>timefmt</code>.</p>
- <p>Attributes:</p>
- <dl>
- <dt><code>var</code></dt>
- <dd>The value is the name of the variable to print.</dd>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSILegacyExprParser" id="SSILegacyExprParser">SSILegacyExprParser</a> <a name="ssilegacyexprparser" id="ssilegacyexprparser">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable compatibility mode for conditional expressions.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSILegacyExprParser on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSILegacyExprParser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.13 and later.</td></tr>
+</table>
+ <p>As of version 2.3.13, <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> has switched to the
+ new <a href="../expr.html">ap_expr</a> syntax for conditional expressions
+ in <code>#if</code> flow control elements. This directive allows to
+ switch to the <a href="#legacyexpr">old syntax</a> which is compatible
+ with Apache HTTPD version 2.2.x and earlier.
+ </p>
- <dt><code>decoding</code></dt>
- <dd><p>Specifies whether Apache should strip an encoding from
- the variable before processing the variable further. The default
- is <code>none</code>, where no decoding will be done. If set to
- <code>url</code>, then URL decoding (also known as %-encoding;
- this is appropriate for use within URLs in links, etc.) will be
- performed. If set to <code>urlencoded</code>,
- application/x-www-form-urlencoded compatible encoding (found in
- query strings) will be stripped. If set to <code>base64</code>,
- base64 will be decoded, and if set to <code>entity</code>, HTML
- entity encoding will be stripped. Decoding is done prior to any
- further encoding on the variable. Multiple encodings can be
- stripped by specifying more than one comma separated encoding.
- The decoding setting will remain in effect until the next decoding
- attribute is encountered, or the element ends.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIStartTag" id="SSIStartTag">SSIStartTag</a> <a name="ssistarttag" id="ssistarttag">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that starts an include element</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIStartTag <var>tag</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIStartTag "<!--#"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
+ looks for to mark an include element to process.</p>
- <p>The <code>decoding</code> attribute must <em>precede</em> the
- corresponding <code>var</code> attribute to be effective.</p>
- </dd>
+ <p>You may want to use this option if you have 2 servers parsing the
+ output of a file each processing different commands (possibly at
+ different times).</p>
- <dt><code>encoding</code></dt>
- <dd><p>Specifies how Apache should encode special characters
- contained in the variable before outputting them. If set
- to <code>none</code>, no encoding will be done. If set to
- <code>url</code>, then URL encoding (also known as %-encoding;
- this is appropriate for use within URLs in links, etc.) will be
- performed. If set to <code>urlencoded</code>,
- application/x-www-form-urlencoded compatible encoding will be
- performed instead, and should be used with query strings. If set
- to <code>base64</code>, base64 encoding will be performed. At
- the start of an <code>echo</code> element, the default is set to
- <code>entity</code>, resulting in entity encoding (which is
- appropriate in the context of a block-level HTML element,
- <em>e.g.</em> a paragraph of text). This can be changed by adding
- an <code>encoding</code> attribute, which will remain in effect
- until the next <code>encoding</code> attribute is encountered or
- the element ends, whichever comes first.</p>
+ <pre class="prettyprint lang-config"> SSIStartTag "<%"<br />
+ SSIEndTag "%>"</pre>
- <p>The <code>encoding</code> attribute must <em>precede</em> the
- corresponding <code>var</code> attribute to be effective.</p>
- <div class="warning">
- In order to avoid cross-site scripting issues, you should
- <em>always</em> encode user supplied data.
- </div>
+ <p>The example given above, which also specifies a matching
+ <code class="directive"><a href="#ssiendtag">SSIEndTag</a></code>, will
+ allow you to use SSI directives as shown in the example
+ below:</p>
- <div class="example"><h3>Example</h3><p><code>
- <!--#echo encoding="entity" var="QUERY_STRING" -->
- </code></p></div>
- </dd>
- </dl>
-
+ <div class="example"><h3>SSI directives with alternate start and end tags</h3><p><code>
+ <%printenv %>
+ </code></p></div>
- <h3><a name="element.exec" id="element.exec">The exec Element</a></h3>
- <p>The <code>exec</code> command executes a given shell command or
- CGI script. It requires <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> to be present
- in the server. If <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- <code>IncludesNOEXEC</code> is set, this command is completely
- disabled. The valid attributes are:</p>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#ssiendtag">SSIEndTag</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSITimeFormat" id="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat" id="ssitimeformat">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the format in which date strings are
+displayed</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSITimeFormat <var>formatstring</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+<p>This directive changes the format in which date strings are displayed
+ when echoing <code>DATE</code> environment variables. The
+ <var>formatstring</var> is as in <code>strftime(3)</code> from the
+ C standard library.</p>
- <dl>
- <dt><code>cgi</code></dt>
- <dd><p>The value specifies a (%-encoded) URL-path to
- the CGI script. If the path does not begin with a slash (/),
- then it is taken to be relative to the current
- document. The document referenced by this path is
- invoked as a CGI script, even if the server would not
- normally recognize it as such. However, the directory
- containing the script must be enabled for CGI scripts
- (with <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- or <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- <code>ExecCGI</code>).</p>
+ <p>This directive has the same effect as the <code><!--#config
+ timefmt=<var>formatstring</var> --></code> element.</p>
- <p>The CGI script is given the <code>PATH_INFO</code> and query
- string (<code>QUERY_STRING</code>) of the original request from the
- client; these <em>cannot</em> be specified in the URL path. The
- include variables will be available to the script in addition to
- the standard <a href="mod_cgi.html">CGI</a> environment.</p>
+ <pre class="prettyprint lang-config">SSITimeFormat "%R, %B %d, %Y"</pre>
- <div class="example"><h3>Example</h3><p><code>
- <!--#exec cgi="/cgi-bin/example.cgi" -->
- </code></p></div>
- <p>If the script returns a <code>Location:</code> header instead of
- output, then this will be translated into an HTML anchor.</p>
+ <p>The above directive would cause times to be displayed in the
+ format "22:26, June 14, 2002".</p>
- <p>The <code><a href="#includevirtual">include virtual</a></code>
- element should be used in preference to <code>exec cgi</code>. In
- particular, if you need to pass additional arguments to a CGI program,
- using the query string, this cannot be done with <code>exec
- cgi</code>, but can be done with <code>include virtual</code>, as
- shown here:</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIUndefinedEcho" id="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho" id="ssiundefinedecho">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String displayed when an unset variable is echoed</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIUndefinedEcho <var>string</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIUndefinedEcho "(none)"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
+ displays when a variable is not set and "echoed".</p>
- <div class="example"><p><code>
- <!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
- </code></p></div>
- </dd>
+ <pre class="prettyprint lang-config">SSIUndefinedEcho "<!-- undef -->"</pre>
- <dt><code>cmd</code></dt>
- <dd><p>The server will execute the given string using
- <code>/bin/sh</code>. The <a href="#includevars">include variables</a> are available to the command, in addition
- to the usual set of CGI variables.</p>
- <p>The use of <code><a href="#includevirtual">#include virtual</a></code> is almost always prefered to using
- either <code>#exec cgi</code> or <code>#exec cmd</code>. The former
- (<code>#include virtual</code>) uses the standard Apache sub-request
- mechanism to include files or scripts. It is much better tested and
- maintained.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="XBitHack" id="XBitHack">XBitHack</a> <a name="xbithack" id="xbithack">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Parse SSI directives in files with the execute bit
+set</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>XBitHack on|off|full</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>XBitHack off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>The <code class="directive">XBitHack</code> directive controls the parsing
+ of ordinary html documents. This directive only affects files associated
+ with the <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> <code>text/html</code>. <code class="directive">XBitHack</code> can take on the following values:</p>
- <p>In addition, on some platforms, like Win32, and on unix when
- using <a href="../suexec.html">suexec</a>, you cannot pass arguments
- to a command in an <code>exec</code> directive, or otherwise include
- spaces in the command. Thus, while the following will work under a
- non-suexec configuration on unix, it will not produce the desired
- result under Win32, or when running suexec:</p>
+ <dl>
+ <dt><code>off</code></dt>
+ <dd>No special treatment of executable files.</dd>
- <div class="example"><p><code>
- <!--#exec cmd="perl /path/to/perlscript arg1 arg2" -->
- </code></p></div>
- </dd>
- </dl>
-
+ <dt><code>on</code></dt>
+ <dd>Any <code>text/html</code> file that has the user-execute bit
+ set will be treated as a server-parsed html document.</dd>
- <h3><a name="element.fsize" id="element.fsize">The fsize Element</a></h3>
- <p>This command prints the size of the specified file, subject
- to the <code>sizefmt</code> format specification. Attributes:</p>
+ <dt><code>full</code></dt>
+ <dd>As for <code>on</code> but also test the group-execute bit.
+ If it is set, then set the <code>Last-modified</code> date of the
+ returned file to be the last modified time of the file. If
+ it is not set, then no last-modified date is sent. Setting
+ this bit allows clients and proxies to cache the result of
+ the request.
- <dl>
- <dt><code>file</code></dt>
- <dd>The value is a path relative to the directory
- containing the current document being parsed.
+ <div class="note"><h3>Note</h3>
+ <p>You would not want to use the full option, unless you assure the
+ group-execute bit is unset for every SSI script which might <code>#include</code> a CGI or otherwise produces different output on
+ each hit (or could potentially change on subsequent requests).</p>
- <div class="example"><p><code>
- This file is <!--#fsize file="mod_include.html" --> bytes.
- </code></p></div>
+ <p>The <code class="directive"><a href="#ssilastmodified">SSILastModified</a></code>
+ directive takes precedence over the
+ <code class="directive"><a href="#xbithack">XBitHack</a></code> directive when
+ <code class="directive"><a href="#ssilastmodified">SSILastModified</a></code> is set to
+ <code>on</code>.</p>
+ </div>
- The value of <code>file</code> cannot start with a slash
- (<code>/</code>), nor can it contain <code>../</code> so as to
- refer to a file above the current directory or outside of the
- document root. Attempting to so will result in the error message:
- <code>The given path was above the root path</code>.
</dd>
+ </dl>
- <dt><code>virtual</code></dt>
- <dd>The value is a (%-encoded) URL-path. If it does not begin with
- a slash (/) then it is taken to be relative to the current document.
- Note, that this does <em>not</em> print the size of any CGI output,
- but the size of the CGI script itself.</dd>
- </dl>
- <div class="example"><p><code>
- This file is <!--#fsize virtual="/docs/mod/mod_include.html" --> bytes.
- </code></p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enabling" id="enabling">Enabling Server-Side Includes</a></h2>
+
- <p>Note that in many cases these two are exactly the same thing.
- However, the <code>file</code> attribute doesn't respect URL-space
- aliases.</p>
-
+ <p>Server Side Includes are implemented by the
+ <code>INCLUDES</code> <a href="../filter.html">filter</a>. If
+ documents containing server-side include directives are given
+ the extension .shtml, the following directives will make Apache
+ parse them and assign the resulting document the mime type of
+ <code>text/html</code>:</p>
- <h3><a name="element.flastmod" id="element.flastmod">The flastmod Element</a></h3>
- <p>This command prints the last modification date of the
- specified file, subject to the <code>timefmt</code> format
- specification. The attributes are the same as for the
- <code><a href="#element.fsize">fsize</a></code> command.</p>
-
+ <pre class="prettyprint lang-config">AddType text/html .shtml
+AddOutputFilter INCLUDES .shtml</pre>
- <h3><a name="element.include" id="element.include">The include Element</a></h3>
- <p>This command inserts the text of another document or file
- into the parsed file. Any included file is subject to the usual
- access control. If the directory containing the parsed file has
- <a href="core.html#options">Options</a>
- <code>IncludesNOEXEC</code> set, then only documents with a text
- <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> (<code>text/plain</code>,
- <code>text/html</code> etc.) will be included. Otherwise CGI
- scripts are invoked as normal using the complete URL given in
- the command, including any query string.</p>
- <p>An attribute defines the location of the document, and may
- appear more than once in an include element; an inclusion is
- done for each attribute given to the include command in turn.
- The valid attributes are:</p>
+ <p>The following directive must be given for the directories
+ containing the shtml files (typically in a
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> section,
+ but this directive is also valid in <code>.htaccess</code> files if
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> <code>Options</code>
+ is set):</p>
- <dl>
- <dt><code>file</code></dt>
- <dd>The value is a path relative to the directory
- containing the current document being parsed. It cannot
- contain <code>../</code>, nor can it be an absolute path.
- Therefore, you cannot include files that are outside of the
- document root, or above the current document in the directory
- structure. The <code>virtual</code> attribute should always be
- used in preference to this one.</dd>
+ <pre class="prettyprint lang-config">Options +Includes</pre>
- <dt><code><a id="includevirtual" name="includevirtual">virtual</a></code></dt>
- <dd><p>The value is a (%-encoded) URL-path. The URL cannot contain a
- scheme or hostname, only a path and an optional query string. If it
- does not begin with a slash (/) then it is taken to be relative to the
- current document.</p>
- <p>A URL is constructed from the attribute, and the output the
- server would return if the URL were accessed by the client is
- included in the parsed output. Thus included files can be nested.</p>
+ <p>For backwards compatibility, the <code>server-parsed</code>
+ <a href="../handler.html">handler</a> also activates the
+ INCLUDES filter. As well, Apache will activate the INCLUDES
+ filter for any document with mime type
+ <code>text/x-server-parsed-html</code> or
+ <code>text/x-server-parsed-html3</code> (and the resulting
+ output will have the mime type <code>text/html</code>).</p>
- <p>If the specified URL is a CGI program, the program will be
- executed and its output inserted in place of the directive in the
- parsed file. You may include a query string in a CGI url:</p>
+ <p>For more information, see our <a href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="pathinfo" id="pathinfo">PATH_INFO with Server Side Includes</a></h2>
+
- <div class="example"><p><code>
- <!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
- </code></p></div>
+ <p>Files processed for server-side includes no longer accept
+ requests with <code>PATH_INFO</code> (trailing pathname information)
+ by default. You can use the <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> directive to
+ configure the server to accept requests with <code>PATH_INFO</code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="elements" id="elements">Available Elements</a></h2>
+ <p>The document is parsed as an HTML document, with special
+ commands embedded as SGML comments. A command has the syntax: </p>
- <p><code>include virtual</code> should be used in preference
- to <code>exec cgi</code> to include the output of CGI programs
- into an HTML document.</p>
+ <div class="example"><p><code>
+ <!--#<var>element</var> <var>attribute</var>=<var>value</var>
+ <var>attribute</var>=<var>value</var> ... -->
+ </code></p></div>
- <p>If the <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code>
- directive is correctly configured and valid for this included
- file, attempts to POST requests to the enclosing HTML document
- will be passed through to subrequests as POST requests as well.
- Without the directive, all subrequests are processed as GET
- requests.</p>
+ <p>The value will often be enclosed in double quotes, but single
+ quotes (<code>'</code>) and backticks (<code>`</code>) are also
+ possible. Many commands only allow a single attribute-value pair.
+ Note that the comment terminator (<code>--></code>) should be
+ preceded by whitespace to ensure that it isn't considered part of
+ an SSI token. Note that the leading <code><!--#</code> is <em>one</em>
+ token and may not contain any whitespaces.</p>
- </dd>
+ <p>The allowed elements are listed in the following table:</p>
- <dt><code>onerror</code></dt>
- <dd><p>The value is a (%-encoded) URL-path which is shown should a
- previous attempt to include a file or virtual attribute failed.
- To be effective, this attribute must be specified after the
- file or virtual attributes being covered. If the attempt to
- include the onerror path fails, or if onerror is not specified, the
- default error message will be included.</p>
+ <table class="bordered">
+ <tr><th>Element</th><th>Description</th></tr>
+ <tr><td><code><a href="#element.config">config</a></code></td>
+ <td>configure output formats</td></tr>
+ <tr><td><code><a href="#element.echo">echo</a></code></td>
+ <td>print variables</td></tr>
+ <tr><td><code><a href="#element.exec">exec</a></code></td>
+ <td>execute external programs</td></tr>
+ <tr><td><code><a href="#element.fsize">fsize</a></code></td>
+ <td>print size of a file</td></tr>
+ <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
+ <td>print last modification time of a file</td></tr>
+ <tr><td><code><a href="#element.include">include</a></code></td>
+ <td>include a file</td></tr>
+ <tr><td><code><a href="#element.printenv">printenv</a></code></td>
+ <td>print all available variables</td></tr>
+ <tr><td><code><a href="#element.set">set</a></code></td>
+ <td>set a value of a variable</td></tr>
+ </table>
+
+ <p>SSI elements may be defined by modules other than
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>. In fact, the <code><a href="#element.exec">exec</a></code> element is provided by
+ <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, and will only be available if this
+ module is loaded.</p>
+
+ <h3><a name="element.config" id="element.config">The config Element</a></h3>
+ <p>This command controls various aspects of the parsing. The
+ valid attributes are:</p>
+
+ <dl>
+ <dt><code>echomsg</code> (<em>Apache 2.1 and later</em>)</dt>
+ <dd><p>The value is a message that is sent back to the
+ client if the <code><a href="#element.echo">echo</a></code> element
+ attempts to echo an undefined variable. This overrides any <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directives.</p>
<div class="example"><p><code>
- # Simple example<br />
- <!--#include virtual="/not-exist.html" onerror="/error.html" -->
+ <!--#config echomsg="[Value Undefined]" -->
+ </code></p></div>
+ </dd>
+
+ <dt><code>errmsg</code></dt>
+ <dd><p>The value is a message that is sent back to the
+ client if an error occurs while parsing the
+ document. This overrides any <code class="directive"><a href="#ssierrormsg">SSIErrorMsg</a></code> directives.</p>
+
+ <div class="example"><p><code>
+ <!--#config errmsg="[Oops, something broke.]" -->
</code></p></div>
+ </dd>
+ <dt><code>sizefmt</code></dt>
+ <dd><p>The value sets the format to be used when displaying
+ the size of a file. Valid values are <code>bytes</code>
+ for a count in bytes, or <code>abbrev</code> for a count
+ in Kb or Mb as appropriate, for example a size of 1024 bytes
+ will be printed as "1K".</p>
+
<div class="example"><p><code>
- # Dedicated onerror paths<br />
- <!--#include virtual="/path-a.html" onerror="/error-a.html" virtual="/path-b.html" onerror="/error-b.html" -->
+ <!--#config sizefmt="abbrev" -->
</code></p></div>
+
+ </dd>
+ <dt><code>timefmt</code></dt>
+ <dd><p>The value is a string to be used by the
+ <code>strftime(3)</code> library routine when printing
+ dates.</p>
+
+ <div class="example"><p><code>
+ <!--#config timefmt=""%R, %B %d, %Y"" -->
+ </code></p></div>
+
</dd>
</dl>
- <h3><a name="element.printenv" id="element.printenv">The printenv Element</a></h3>
- <p>This prints out a plain text listing of all existing variables and
- their values. Special characters are entity encoded (see the <code><a href="#element.echo">echo</a></code> element for details)
- before being output. There are no attributes.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- <pre>
- <!--#printenv -->
- </pre>
- </code></p></div>
-
+ <h3><a name="element.echo" id="element.echo">The echo Element</a></h3>
+ <p>This command prints one of the <a href="#includevars">include
+ variables</a> defined below. If the variable is unset, the result is
+ determined by the <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directive. Any dates printed are
+ subject to the currently configured <code>timefmt</code>.</p>
- <h3><a name="element.set" id="element.set">The set Element</a></h3>
- <p>This sets the value of a variable. Attributes:</p>
+ <p>Attributes:</p>
<dl>
<dt><code>var</code></dt>
- <dd>The name of the variable to set.</dd>
-
- <dt><code>value</code></dt>
- <dd>The value to give a variable.</dd>
+ <dd>The value is the name of the variable to print.</dd>
<dt><code>decoding</code></dt>
<dd><p>Specifies whether Apache should strip an encoding from
the variable before processing the variable further. The default
is <code>none</code>, where no decoding will be done. If set to
- <code>url</code>, <code>urlencoded</code>, <code>base64</code>
- or <code>entity</code>, URL decoding,
- application/x-www-form-urlencoded decoding, base64 decoding or HTML
- entity decoding will be performed respectively. More than one
- decoding can be specified by separating with commas. The decoding
- setting will remain in effect until the next decoding attribute
- is encountered, or the element ends. The <code>decoding</code>
- attribute must <em>precede</em> the corresponding
- <code>var</code> attribute to be effective.</p>
+ <code>url</code>, then URL decoding (also known as %-encoding;
+ this is appropriate for use within URLs in links, etc.) will be
+ performed. If set to <code>urlencoded</code>,
+ application/x-www-form-urlencoded compatible encoding (found in
+ query strings) will be stripped. If set to <code>base64</code>,
+ base64 will be decoded, and if set to <code>entity</code>, HTML
+ entity encoding will be stripped. Decoding is done prior to any
+ further encoding on the variable. Multiple encodings can be
+ stripped by specifying more than one comma separated encoding.
+ The decoding setting will remain in effect until the next decoding
+ attribute is encountered, or the element ends.</p>
+
+ <p>The <code>decoding</code> attribute must <em>precede</em> the
+ corresponding <code>var</code> attribute to be effective.</p>
</dd>
<dt><code>encoding</code></dt>
<dd><p>Specifies how Apache should encode special characters
- contained in the variable before setting them. The default is
- <code>none</code>, where no encoding will be done. If set to
- <code>url</code>, <code>urlencoding</code>, <code>base64</code>
- or <code>entity</code>, URL encoding,
- application/x-www-form-urlencoded encoding, base64 encoding or
- HTML entity encoding will be performed respectively. More than
- one encoding can be specified by separating with commas. The
- encoding setting will remain in effect until the next encoding
- attribute is encountered, or the element ends. The
- <code>encoding</code> attribute must <em>precede</em> the
- corresponding <code>var</code> attribute to be effective.
- Encodings are applied after all decodings have been
- stripped.</p>
- </dd>
- </dl>
+ contained in the variable before outputting them. If set
+ to <code>none</code>, no encoding will be done. If set to
+ <code>url</code>, then URL encoding (also known as %-encoding;
+ this is appropriate for use within URLs in links, etc.) will be
+ performed. If set to <code>urlencoded</code>,
+ application/x-www-form-urlencoded compatible encoding will be
+ performed instead, and should be used with query strings. If set
+ to <code>base64</code>, base64 encoding will be performed. At
+ the start of an <code>echo</code> element, the default is set to
+ <code>entity</code>, resulting in entity encoding (which is
+ appropriate in the context of a block-level HTML element,
+ <em>e.g.</em> a paragraph of text). This can be changed by adding
+ an <code>encoding</code> attribute, which will remain in effect
+ until the next <code>encoding</code> attribute is encountered or
+ the element ends, whichever comes first.</p>
+
+ <p>The <code>encoding</code> attribute must <em>precede</em> the
+ corresponding <code>var</code> attribute to be effective.</p>
+
+ <div class="warning">
+ In order to avoid cross-site scripting issues, you should
+ <em>always</em> encode user supplied data.
+ </div>
<div class="example"><h3>Example</h3><p><code>
- <!--#set var="category" value="help" -->
+ <!--#echo encoding="entity" var="QUERY_STRING" -->
</code></p></div>
+ </dd>
+ </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="includevars" id="includevars">Include Variables</a></h2>
-
- <p>In addition to the variables in the standard CGI environment,
- these are available for the <code>echo</code> command, for
- <code>if</code> and <code>elif</code>, and to any program
- invoked by the document.</p>
+ <h3><a name="element.exec" id="element.exec">The exec Element</a></h3>
+ <p>The <code>exec</code> command executes a given shell command or
+ CGI script. It requires <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> to be present
+ in the server. If <code class="directive"><a href="../mod/core.html#options">Options</a></code>
+ <code>IncludesNOEXEC</code> is set, this command is completely
+ disabled. The valid attributes are:</p>
- <dl>
- <dt><code>DATE_GMT</code></dt>
- <dd>The current date in Greenwich Mean Time.</dd>
+ <dl>
+ <dt><code>cgi</code></dt>
+ <dd><p>The value specifies a (%-encoded) URL-path to
+ the CGI script. If the path does not begin with a slash (/),
+ then it is taken to be relative to the current
+ document. The document referenced by this path is
+ invoked as a CGI script, even if the server would not
+ normally recognize it as such. However, the directory
+ containing the script must be enabled for CGI scripts
+ (with <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
+ or <code class="directive"><a href="../mod/core.html#options">Options</a></code>
+ <code>ExecCGI</code>).</p>
- <dt><code>DATE_LOCAL</code></dt>
- <dd>The current date in the local time zone.</dd>
+ <p>The CGI script is given the <code>PATH_INFO</code> and query
+ string (<code>QUERY_STRING</code>) of the original request from the
+ client; these <em>cannot</em> be specified in the URL path. The
+ include variables will be available to the script in addition to
+ the standard <a href="mod_cgi.html">CGI</a> environment.</p>
- <dt><code>DOCUMENT_NAME</code></dt>
- <dd>The filename (excluding directories) of the document
- requested by the user.</dd>
+ <div class="example"><h3>Example</h3><p><code>
+ <!--#exec cgi="/cgi-bin/example.cgi" -->
+ </code></p></div>
- <dt><code>DOCUMENT_URI</code></dt>
- <dd>The (%-decoded) URL path of the document requested by the
- user. Note that in the case of nested include files, this is
- <em>not</em> the URL for the current document. Note also that
- if the URL is modified internally (e.g. by an <code class="directive"><a href="../mod/mod_alias.html#alias">alias</a></code> or <code class="directive"><a href="../mod/mod_dir.html#directoryindex">directoryindex</a></code>), the modified
- URL is shown.</dd>
+ <p>If the script returns a <code>Location:</code> header instead of
+ output, then this will be translated into an HTML anchor.</p>
- <dt><code>LAST_MODIFIED</code></dt>
- <dd>The last modification date of the document requested by
- the user.</dd>
+ <p>The <code><a href="#includevirtual">include virtual</a></code>
+ element should be used in preference to <code>exec cgi</code>. In
+ particular, if you need to pass additional arguments to a CGI program,
+ using the query string, this cannot be done with <code>exec
+ cgi</code>, but can be done with <code>include virtual</code>, as
+ shown here:</p>
- <dt><code>QUERY_STRING_UNESCAPED</code></dt>
- <dd>If a query string is present, this variable contains the
- (%-decoded) query string, which is <em>escaped</em> for shell
- usage (special characters like <code>&</code> etc. are
- preceded by backslashes).</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="substitution" id="substitution">Variable Substitution</a></h2>
+ <div class="example"><p><code>
+ <!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
+ </code></p></div>
+ </dd>
- <p>Variable substitution is done within quoted strings in most
- cases where they may reasonably occur as an argument to an SSI
- directive. This includes the <code>config</code>,
- <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
- <code>include</code>, <code>echo</code>, and <code>set</code>
- directives. If <code class="directive"><a href="#ssilegacyexprparser">SSILegacyExprParser</a></code> is set to <code>on</code>,
- substitution also occurs in the arguments to conditional operators.
- You can insert a literal dollar sign into the string using backslash
- quoting:</p>
+ <dt><code>cmd</code></dt>
+ <dd><p>The server will execute the given string using
+ <code>/bin/sh</code>. The <a href="#includevars">include variables</a> are available to the command, in addition
+ to the usual set of CGI variables.</p>
- <div class="example"><p><code>
- <!--#set var="cur" value="\$test" -->
- </code></p></div>
+ <p>The use of <code><a href="#includevirtual">#include virtual</a></code> is almost always prefered to using
+ either <code>#exec cgi</code> or <code>#exec cmd</code>. The former
+ (<code>#include virtual</code>) uses the standard Apache sub-request
+ mechanism to include files or scripts. It is much better tested and
+ maintained.</p>
- <p>If a variable reference needs to be substituted in the
- middle of a character sequence that might otherwise be
- considered a valid identifier in its own right, it can be
- disambiguated by enclosing the reference in braces,
- <em>a la</em> shell substitution:</p>
+ <p>In addition, on some platforms, like Win32, and on unix when
+ using <a href="../suexec.html">suexec</a>, you cannot pass arguments
+ to a command in an <code>exec</code> directive, or otherwise include
+ spaces in the command. Thus, while the following will work under a
+ non-suexec configuration on unix, it will not produce the desired
+ result under Win32, or when running suexec:</p>
+
+ <div class="example"><p><code>
+ <!--#exec cmd="perl /path/to/perlscript arg1 arg2" -->
+ </code></p></div>
+ </dd>
+ </dl>
+
+
+ <h3><a name="element.fsize" id="element.fsize">The fsize Element</a></h3>
+ <p>This command prints the size of the specified file, subject
+ to the <code>sizefmt</code> format specification. Attributes:</p>
+
+ <dl>
+ <dt><code>file</code></dt>
+ <dd>The value is a path relative to the directory
+ containing the current document being parsed.
<div class="example"><p><code>
- <!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->
+ This file is <!--#fsize file="mod_include.html" --> bytes.
</code></p></div>
- <p>This will result in the <code>Zed</code> variable being set
- to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
- "<code>X</code>" and <code>REQUEST_METHOD</code> is
- "<code>Y</code>".</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="flowctrl" id="flowctrl">Flow Control Elements</a></h2>
-
+ The value of <code>file</code> cannot start with a slash
+ (<code>/</code>), nor can it contain <code>../</code> so as to
+ refer to a file above the current directory or outside of the
+ document root. Attempting to so will result in the error message:
+ <code>The given path was above the root path</code>.
+ </dd>
- <p>The basic flow control elements are:</p>
+ <dt><code>virtual</code></dt>
+ <dd>The value is a (%-encoded) URL-path. If it does not begin with
+ a slash (/) then it is taken to be relative to the current document.
+ Note, that this does <em>not</em> print the size of any CGI output,
+ but the size of the CGI script itself.</dd>
+ </dl>
<div class="example"><p><code>
- <!--#if expr="<var>test_condition</var>" --><br />
- <!--#elif expr="<var>test_condition</var>" --><br />
- <!--#else --><br />
- <!--#endif -->
+ This file is <!--#fsize virtual="/docs/mod/mod_include.html" --> bytes.
</code></p></div>
- <p>The <code>if</code> element works like an if statement in a
- programming language. The test condition is evaluated and if
- the result is true, then the text until the next <code>elif</code>,
- <code>else</code> or <code>endif</code> element is included in the
- output stream.</p>
+ <p>Note that in many cases these two are exactly the same thing.
+ However, the <code>file</code> attribute doesn't respect URL-space
+ aliases.</p>
+
- <p>The <code>elif</code> or <code>else</code> statements are used
- to put text into the output stream if the original
- <var>test_condition</var> was false. These elements are optional.</p>
+ <h3><a name="element.flastmod" id="element.flastmod">The flastmod Element</a></h3>
+ <p>This command prints the last modification date of the
+ specified file, subject to the <code>timefmt</code> format
+ specification. The attributes are the same as for the
+ <code><a href="#element.fsize">fsize</a></code> command.</p>
+
- <p>The <code>endif</code> element ends the <code>if</code> element
- and is required.</p>
+ <h3><a name="element.include" id="element.include">The include Element</a></h3>
+ <p>This command inserts the text of another document or file
+ into the parsed file. Any included file is subject to the usual
+ access control. If the directory containing the parsed file has
+ <a href="core.html#options">Options</a>
+ <code>IncludesNOEXEC</code> set, then only documents with a text
+ <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> (<code>text/plain</code>,
+ <code>text/html</code> etc.) will be included. Otherwise CGI
+ scripts are invoked as normal using the complete URL given in
+ the command, including any query string.</p>
- <p><var>test_condition</var> is a boolean expression which follows the
- <a href="../expr.html">ap_expr</a> syntax. The syntax can be changed
- to be compatible with Apache HTTPD 2.2.x using <code class="directive"><a href="#ssilegacyexprparser">SSILegacyExprParser</a></code>.</p>
+ <p>An attribute defines the location of the document, and may
+ appear more than once in an include element; an inclusion is
+ done for each attribute given to the include command in turn.
+ The valid attributes are:</p>
- <p>The SSI variables set with the <code>var</code> element are exported
- into the request environment and can be accessed with the
- <code>reqenv</code> function. As a short-cut, the function name
- <code>v</code> is also available inside <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>.</p>
+ <dl>
+ <dt><code>file</code></dt>
+ <dd>The value is a path relative to the directory
+ containing the current document being parsed. It cannot
+ contain <code>../</code>, nor can it be an absolute path.
+ Therefore, you cannot include files that are outside of the
+ document root, or above the current document in the directory
+ structure. The <code>virtual</code> attribute should always be
+ used in preference to this one.</dd>
- <p>The below example will print "from local net" if client IP address
- belongs to the 10.0.0.0/8 subnet.</p>
+ <dt><code><a id="includevirtual" name="includevirtual">virtual</a></code></dt>
+ <dd><p>The value is a (%-encoded) URL-path. The URL cannot contain a
+ scheme or hostname, only a path and an optional query string. If it
+ does not begin with a slash (/) then it is taken to be relative to the
+ current document.</p>
- <div class="example"><p><code>
- <!--#if expr='-R "10.0.0.0/8"' --><br />
- <span class="indent">
- from local net<br />
- </span>
- <!--#else --><br />
- <span class="indent">
- from somewhere else<br />
- </span>
- <!--#endif -->
- </code></p></div>
+ <p>A URL is constructed from the attribute, and the output the
+ server would return if the URL were accessed by the client is
+ included in the parsed output. Thus included files can be nested.</p>
- <p>The below example will print "foo is bar" if the variable
- <code>foo</code> is set to the value "bar".</p>
+ <p>If the specified URL is a CGI program, the program will be
+ executed and its output inserted in place of the directive in the
+ parsed file. You may include a query string in a CGI url:</p>
- <div class="example"><p><code>
- <!--#if expr='v("foo") = "bar"' --><br />
- <span class="indent">
- foo is bar<br />
- </span>
- <!--#endif -->
- </code></p></div>
+ <div class="example"><p><code>
+ <!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
+ </code></p></div>
- <div class="note"><h3>Reference Documentation</h3>
- <p>See also: <a href="../expr.html">Expressions in Apache HTTP Server</a>,
- for a complete reference and examples. The <em>restricted</em> functions
- are not available inside <code class="module"><a href="../mod/mod_include.html">mod_include</a></code></p>
- </div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="legacyexpr" id="legacyexpr">Legacy expression syntax</a></h2>
-
+ <p><code>include virtual</code> should be used in preference
+ to <code>exec cgi</code> to include the output of CGI programs
+ into an HTML document.</p>
- <p>This section describes the syntax of the <code>#if expr</code>
- element if <code class="directive"><a href="#ssilegacyexprparser">SSILegacyExprParser</a></code>
- is set to <code>on</code>.</p>
+ <p>If the <code class="directive"><a href="../mod/mod_request.html#keptbodysize">KeptBodySize</a></code>
+ directive is correctly configured and valid for this included
+ file, attempts to POST requests to the enclosing HTML document
+ will be passed through to subrequests as POST requests as well.
+ Without the directive, all subrequests are processed as GET
+ requests.</p>
- <dl>
- <dt><code><var>string</var></code></dt>
- <dd>true if <var>string</var> is not empty</dd>
+ </dd>
- <dt><code><var>-A string</var></code></dt>
- <dd><p>true if the URL represented by the string is accessible by
- configuration, false otherwise. This is useful where content on a
- page is to be hidden from users who are not authorized to view the
- URL, such as a link to that URL. Note that the URL is only tested
- for whether access would be granted, not whether the URL exists.</p>
+ <dt><code>onerror</code></dt>
+ <dd><p>The value is a (%-encoded) URL-path which is shown should a
+ previous attempt to include a file or virtual attribute failed.
+ To be effective, this attribute must be specified after the
+ file or virtual attributes being covered. If the attempt to
+ include the onerror path fails, or if onerror is not specified, the
+ default error message will be included.</p>
- <div class="example"><h3>Example</h3><p><code>
- <!--#if expr="-A /private" --><br />
- <span class="indent">
- Click <a href="/private">here</a> to access private
- information.<br />
- </span>
- <!--#endif -->
+ <div class="example"><p><code>
+ # Simple example<br />
+ <!--#include virtual="/not-exist.html" onerror="/error.html" -->
</code></p></div>
- </dd>
- <dt><code><var>string1</var> = <var>string2</var><br />
- <var>string1</var> == <var>string2</var><br />
- <var>string1</var> != <var>string2</var></code></dt>
+ <div class="example"><p><code>
+ # Dedicated onerror paths<br />
+ <!--#include virtual="/path-a.html" onerror="/error-a.html" virtual="/path-b.html" onerror="/error-b.html" -->
+ </code></p></div>
- <dd><p>Compare <var>string1</var> with <var>string2</var>. If
- <var>string2</var> has the form <code>/<var>string2</var>/</code>
- then it is treated as a regular expression. Regular expressions are
- implemented by the <a href="http://www.pcre.org">PCRE</a> engine and
- have the same syntax as those in <a href="http://www.perl.com">perl
- 5</a>. Note that <code>==</code> is just an alias for <code>=</code>
- and behaves exactly the same way.</p>
+ </dd>
+ </dl>
+
- <p>If you are matching positive (<code>=</code> or <code>==</code>), you
- can capture grouped parts of the regular expression. The captured parts
- are stored in the special variables <code>$1</code> ..
- <code>$9</code>. The whole string matched by the regular expression is
- stored in the special variable <code>$0</code></p>
+ <h3><a name="element.printenv" id="element.printenv">The printenv Element</a></h3>
+ <p>This prints out a plain text listing of all existing variables and
+ their values. Special characters are entity encoded (see the <code><a href="#element.echo">echo</a></code> element for details)
+ before being output. There are no attributes.</p>
<div class="example"><h3>Example</h3><p><code>
- <!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --><br />
- <span class="indent">
- <!--#set var="session" value="$1" --><br />
- </span>
- <!--#endif -->
+ <pre>
+ <!--#printenv -->
+ </pre>
</code></p></div>
- </dd>
-
- <dt><code><var>string1</var> < <var>string2</var><br />
- <var>string1</var> <= <var>string2</var><br />
- <var>string1</var> > <var>string2</var><br />
- <var>string1</var> >= <var>string2</var></code></dt>
-
- <dd>Compare <var>string1</var> with <var>string2</var>. Note, that
- strings are compared <em>literally</em> (using
- <code>strcmp(3)</code>). Therefore the string "100" is less than
- "20".</dd>
-
- <dt><code>( <var>test_condition</var> )</code></dt>
- <dd>true if <var>test_condition</var> is true</dd>
-
- <dt><code>! <var>test_condition</var></code></dt>
- <dd>true if <var>test_condition</var> is false</dd>
-
- <dt><code><var>test_condition1</var> &&
- <var>test_condition2</var></code></dt>
- <dd>true if both <var>test_condition1</var> and
- <var>test_condition2</var> are true</dd>
-
- <dt><code><var>test_condition1</var> ||
- <var>test_condition2</var></code></dt>
- <dd>true if either <var>test_condition1</var> or
- <var>test_condition2</var> is true</dd>
- </dl>
-
- <p>"<code>=</code>" and "<code>!=</code>" bind more tightly than
- "<code>&&</code>" and "<code>||</code>". "<code>!</code>" binds
- most tightly. Thus, the following are equivalent:</p>
+
- <div class="example"><p><code>
- <!--#if expr="$a = test1 && $b = test2" --><br />
- <!--#if expr="($a = test1) && ($b = test2)" -->
- </code></p></div>
+ <h3><a name="element.set" id="element.set">The set Element</a></h3>
+ <p>This sets the value of a variable. Attributes:</p>
- <p>The boolean operators <code>&&</code> and <code>||</code>
- share the same priority. So if you want to bind such an operator more
- tightly, you should use parentheses.</p>
+ <dl>
+ <dt><code>var</code></dt>
+ <dd>The name of the variable to set.</dd>
- <p>Anything that's not recognized as a variable or an operator
- is treated as a string. Strings can also be quoted:
- <code>'string'</code>. Unquoted strings can't contain whitespace
- (blanks and tabs) because it is used to separate tokens such as
- variables. If multiple strings are found in a row, they are
- concatenated using blanks. So,</p>
+ <dt><code>value</code></dt>
+ <dd>The value to give a variable.</dd>
- <div class="example"><p><code><var>string1</var> <var>string2</var></code> results in <code><var>string1</var> <var>string2</var></code><br />
- <br />
- and<br />
- <br />
- <code>'<var>string1</var> <var>string2</var>'</code> results in <code><var>string1</var> <var>string2</var></code>.</p></div>
+ <dt><code>decoding</code></dt>
+ <dd><p>Specifies whether Apache should strip an encoding from
+ the variable before processing the variable further. The default
+ is <code>none</code>, where no decoding will be done. If set to
+ <code>url</code>, <code>urlencoded</code>, <code>base64</code>
+ or <code>entity</code>, URL decoding,
+ application/x-www-form-urlencoded decoding, base64 decoding or HTML
+ entity decoding will be performed respectively. More than one
+ decoding can be specified by separating with commas. The decoding
+ setting will remain in effect until the next decoding attribute
+ is encountered, or the element ends. The <code>decoding</code>
+ attribute must <em>precede</em> the corresponding
+ <code>var</code> attribute to be effective.</p>
+ </dd>
- <div class="note"><h3>Optimization of Boolean Expressions</h3>
- <p>If the expressions become more complex and slow down processing
- significantly, you can try to optimize them according to the
- evaluation rules:</p>
- <ul>
- <li>Expressions are evaluated from left to right</li>
- <li>Binary boolean operators (<code>&&</code> and <code>||</code>)
- are short circuited wherever possible. In conclusion with the rule
- above that means, <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> evaluates at first
- the left expression. If the left result is sufficient to determine
- the end result, processing stops here. Otherwise it evaluates the
- right side and computes the end result from both left and right
- results.</li>
- <li>Short circuit evaluation is turned off as long as there are regular
- expressions to deal with. These must be evaluated to fill in the
- backreference variables (<code>$1</code> .. <code>$9</code>).</li>
- </ul>
- <p>If you want to look how a particular expression is handled, you can
- recompile <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> using the
- <code>-DDEBUG_INCLUDE</code> compiler option. This inserts for every
- parsed expression tokenizer information, the parse tree and how it is
- evaluated into the output sent to the client.</p>
- </div>
+ <dt><code>encoding</code></dt>
+ <dd><p>Specifies how Apache should encode special characters
+ contained in the variable before setting them. The default is
+ <code>none</code>, where no encoding will be done. If set to
+ <code>url</code>, <code>urlencoding</code>, <code>base64</code>
+ or <code>entity</code>, URL encoding,
+ application/x-www-form-urlencoded encoding, base64 encoding or
+ HTML entity encoding will be performed respectively. More than
+ one encoding can be specified by separating with commas. The
+ encoding setting will remain in effect until the next encoding
+ attribute is encountered, or the element ends. The
+ <code>encoding</code> attribute must <em>precede</em> the
+ corresponding <code>var</code> attribute to be effective.
+ Encodings are applied after all decodings have been
+ stripped.</p>
+ </dd>
+ </dl>
- <div class="note"><h3>Escaping slashes in regex strings</h3>
- <p>All slashes which are not intended to act as delimiters in your regex must
- be escaped. This is regardless of their meaning to the regex engine.</p>
- </div>
+ <div class="example"><h3>Example</h3><p><code>
+ <!--#set var="category" value="help" -->
+ </code></p></div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="includevars" id="includevars">Include Variables</a></h2>
+
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that ends an include element</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIEndTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIEndTag "-->"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- looks for to mark the end of an include element.</p>
+ <p>In addition to the variables in the standard CGI environment,
+ these are available for the <code>echo</code> command, for
+ <code>if</code> and <code>elif</code>, and to any program
+ invoked by the document.</p>
- <pre class="prettyprint lang-config">SSIEndTag "%>"</pre>
+ <dl>
+ <dt><code>DATE_GMT</code></dt>
+ <dd>The current date in Greenwich Mean Time.</dd>
+ <dt><code>DATE_LOCAL</code></dt>
+ <dd>The current date in the local time zone.</dd>
+ <dt><code>DOCUMENT_NAME</code></dt>
+ <dd>The filename (excluding directories) of the document
+ requested by the user.</dd>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#ssistarttag">SSIStartTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIErrorMsg" id="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg" id="ssierrormsg">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Error message displayed when there is an SSI
-error</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIErrorMsg <var>message</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIErrorMsg "[an error occurred while processing this
-directive]"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>The <code class="directive">SSIErrorMsg</code> directive changes the error
- message displayed when <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> encounters an
- error. For production servers you may consider changing the default
- error message to <code>"<!-- Error -->"</code> so that
- the message is not presented to the user.</p>
+ <dt><code>DOCUMENT_URI</code></dt>
+ <dd>The (%-decoded) URL path of the document requested by the
+ user. Note that in the case of nested include files, this is
+ <em>not</em> the URL for the current document. Note also that
+ if the URL is modified internally (e.g. by an <code class="directive"><a href="../mod/mod_alias.html#alias">alias</a></code> or <code class="directive"><a href="../mod/mod_dir.html#directoryindex">directoryindex</a></code>), the modified
+ URL is shown.</dd>
- <p>This directive has the same effect as the <code><!--#config
- errmsg=<var>message</var> --></code> element.</p>
+ <dt><code>LAST_MODIFIED</code></dt>
+ <dd>The last modification date of the document requested by
+ the user.</dd>
- <pre class="prettyprint lang-config">SSIErrorMsg "<!-- Error -->"</pre>
+ <dt><code>QUERY_STRING_UNESCAPED</code></dt>
+ <dd>If a query string is present, this variable contains the
+ (%-decoded) query string, which is <em>escaped</em> for shell
+ usage (special characters like <code>&</code> etc. are
+ preceded by backslashes).</dd>
+ </dl>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="substitution" id="substitution">Variable Substitution</a></h2>
+ <p>Variable substitution is done within quoted strings in most
+ cases where they may reasonably occur as an argument to an SSI
+ directive. This includes the <code>config</code>,
+ <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
+ <code>include</code>, <code>echo</code>, and <code>set</code>
+ directives. If <code class="directive"><a href="#ssilegacyexprparser">SSILegacyExprParser</a></code> is set to <code>on</code>,
+ substitution also occurs in the arguments to conditional operators.
+ You can insert a literal dollar sign into the string using backslash
+ quoting:</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIETag" id="SSIETag">SSIETag</a> <a name="ssietag" id="ssietag">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls whether ETags are generated by the server.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIETag on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIETag off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>Under normal circumstances, a file filtered by <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- may contain elements that are either dynamically generated, or that may
- have changed independently of the original file. As a result, by default
- the server is asked not to generate an <code>ETag</code> header for the
- response by adding <code>no-etag</code> to the request notes.</p>
+ <div class="example"><p><code>
+ <!--#set var="cur" value="\$test" -->
+ </code></p></div>
- <p>The <code class="directive">SSIETag</code> directive suppresses this
- behaviour, and allows the server to generate an <code>ETag</code> header.
- This can be used to enable caching of the output. Note that a backend server
- or dynamic content generator may generate an ETag of its own, ignoring
- <code>no-etag</code>, and this ETag will be passed by
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> regardless of the value of this setting.
- <code class="directive">SSIETag</code> can take on the following values:</p>
+ <p>If a variable reference needs to be substituted in the
+ middle of a character sequence that might otherwise be
+ considered a valid identifier in its own right, it can be
+ disambiguated by enclosing the reference in braces,
+ <em>a la</em> shell substitution:</p>
- <dl>
+ <div class="example"><p><code>
+ <!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->
+ </code></p></div>
- <dt><code>off</code></dt>
- <dd><code>no-etag</code> will be added to the request notes, and the server
- is asked not to generate an ETag. Where a server ignores the value of
- <code>no-etag</code> and generates an ETag anyway, the ETag will be
- respected.</dd>
+ <p>This will result in the <code>Zed</code> variable being set
+ to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
+ "<code>X</code>" and <code>REQUEST_METHOD</code> is
+ "<code>Y</code>".</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="flowctrl" id="flowctrl">Flow Control Elements</a></h2>
+
- <dt><code>on</code></dt>
- <dd>Existing ETags will be respected, and ETags generated by the server will
- be passed on in the response.</dd>
+ <p>The basic flow control elements are:</p>
- </dl>
+ <div class="example"><p><code>
+ <!--#if expr="<var>test_condition</var>" --><br />
+ <!--#elif expr="<var>test_condition</var>" --><br />
+ <!--#else --><br />
+ <!--#endif -->
+ </code></p></div>
+ <p>The <code>if</code> element works like an if statement in a
+ programming language. The test condition is evaluated and if
+ the result is true, then the text until the next <code>elif</code>,
+ <code>else</code> or <code>endif</code> element is included in the
+ output stream.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSILastModified" id="SSILastModified">SSILastModified</a> <a name="ssilastmodified" id="ssilastmodified">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls whether <code>Last-Modified</code> headers are generated by the
-server.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSILastModified on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSILastModified off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>Under normal circumstances, a file filtered by <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- may contain elements that are either dynamically generated, or that may
- have changed independently of the original file. As a result, by default
- the <code>Last-Modified</code> header is stripped from the response.</p>
+ <p>The <code>elif</code> or <code>else</code> statements are used
+ to put text into the output stream if the original
+ <var>test_condition</var> was false. These elements are optional.</p>
- <p>The <code class="directive">SSILastModified</code> directive overrides this
- behaviour, and allows the <code>Last-Modified</code> header to be respected
- if already present, or set if the header is not already present. This can
- be used to enable caching of the output. <code class="directive">SSILastModified</code>
- can take on the following values:</p>
+ <p>The <code>endif</code> element ends the <code>if</code> element
+ and is required.</p>
- <dl>
+ <p><var>test_condition</var> is a boolean expression which follows the
+ <a href="../expr.html">ap_expr</a> syntax. The syntax can be changed
+ to be compatible with Apache HTTPD 2.2.x using <code class="directive"><a href="#ssilegacyexprparser">SSILegacyExprParser</a></code>.</p>
- <dt><code>off</code></dt>
- <dd>The <code>Last-Modified</code> header will be stripped from responses,
- unless the <code class="directive"><a href="#xbithack">XBitHack</a></code> directive
- is set to <code>full</code> as described below.</dd>
+ <p>The SSI variables set with the <code>var</code> element are exported
+ into the request environment and can be accessed with the
+ <code>reqenv</code> function. As a short-cut, the function name
+ <code>v</code> is also available inside <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>.</p>
- <dt><code>on</code></dt>
- <dd>The <code>Last-Modified</code> header will be respected if already
- present in a response, and added to the response if the response is a
- file and the header is missing. The
- <code class="directive"><a href="#ssilastmodified">SSILastModified</a></code> directive
- takes precedence over <code class="directive"><a href="#xbithack">XBitHack</a></code>.</dd>
+ <p>The below example will print "from local net" if client IP address
+ belongs to the 10.0.0.0/8 subnet.</p>
- </dl>
+ <div class="example"><p><code>
+ <!--#if expr='-R "10.0.0.0/8"' --><br />
+ <span class="indent">
+ from local net<br />
+ </span>
+ <!--#else --><br />
+ <span class="indent">
+ from somewhere else<br />
+ </span>
+ <!--#endif -->
+ </code></p></div>
+ <p>The below example will print "foo is bar" if the variable
+ <code>foo</code> is set to the value "bar".</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSILegacyExprParser" id="SSILegacyExprParser">SSILegacyExprParser</a> <a name="ssilegacyexprparser" id="ssilegacyexprparser">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable compatibility mode for conditional expressions.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSILegacyExprParser on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSILegacyExprParser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.13 and later.</td></tr>
-</table>
- <p>As of version 2.3.13, <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> has switched to the
- new <a href="../expr.html">ap_expr</a> syntax for conditional expressions
- in <code>#if</code> flow control elements. This directive allows to
- switch to the <a href="#legacyexpr">old syntax</a> which is compatible
- with Apache HTTPD version 2.2.x and earlier.
- </p>
+ <div class="example"><p><code>
+ <!--#if expr='v("foo") = "bar"' --><br />
+ <span class="indent">
+ foo is bar<br />
+ </span>
+ <!--#endif -->
+ </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIStartTag" id="SSIStartTag">SSIStartTag</a> <a name="ssistarttag" id="ssistarttag">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that starts an include element</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIStartTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIStartTag "<!--#"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- looks for to mark an include element to process.</p>
+ <div class="note"><h3>Reference Documentation</h3>
+ <p>See also: <a href="../expr.html">Expressions in Apache HTTP Server</a>,
+ for a complete reference and examples. The <em>restricted</em> functions
+ are not available inside <code class="module"><a href="../mod/mod_include.html">mod_include</a></code></p>
+ </div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="legacyexpr" id="legacyexpr">Legacy expression syntax</a></h2>
+
- <p>You may want to use this option if you have 2 servers parsing the
- output of a file each processing different commands (possibly at
- different times).</p>
+ <p>This section describes the syntax of the <code>#if expr</code>
+ element if <code class="directive"><a href="#ssilegacyexprparser">SSILegacyExprParser</a></code>
+ is set to <code>on</code>.</p>
- <pre class="prettyprint lang-config"> SSIStartTag "<%"<br />
- SSIEndTag "%>"</pre>
+ <dl>
+ <dt><code><var>string</var></code></dt>
+ <dd>true if <var>string</var> is not empty</dd>
+ <dt><code><var>-A string</var></code></dt>
+ <dd><p>true if the URL represented by the string is accessible by
+ configuration, false otherwise. This is useful where content on a
+ page is to be hidden from users who are not authorized to view the
+ URL, such as a link to that URL. Note that the URL is only tested
+ for whether access would be granted, not whether the URL exists.</p>
- <p>The example given above, which also specifies a matching
- <code class="directive"><a href="#ssiendtag">SSIEndTag</a></code>, will
- allow you to use SSI directives as shown in the example
- below:</p>
+ <div class="example"><h3>Example</h3><p><code>
+ <!--#if expr="-A /private" --><br />
+ <span class="indent">
+ Click <a href="/private">here</a> to access private
+ information.<br />
+ </span>
+ <!--#endif -->
+ </code></p></div>
+ </dd>
- <div class="example"><h3>SSI directives with alternate start and end tags</h3><p><code>
- <%printenv %>
- </code></p></div>
+ <dt><code><var>string1</var> = <var>string2</var><br />
+ <var>string1</var> == <var>string2</var><br />
+ <var>string1</var> != <var>string2</var></code></dt>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#ssiendtag">SSIEndTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSITimeFormat" id="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat" id="ssitimeformat">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the format in which date strings are
-displayed</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSITimeFormat <var>formatstring</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
-<p>This directive changes the format in which date strings are displayed
- when echoing <code>DATE</code> environment variables. The
- <var>formatstring</var> is as in <code>strftime(3)</code> from the
- C standard library.</p>
+ <dd><p>Compare <var>string1</var> with <var>string2</var>. If
+ <var>string2</var> has the form <code>/<var>string2</var>/</code>
+ then it is treated as a regular expression. Regular expressions are
+ implemented by the <a href="http://www.pcre.org">PCRE</a> engine and
+ have the same syntax as those in <a href="http://www.perl.com">perl
+ 5</a>. Note that <code>==</code> is just an alias for <code>=</code>
+ and behaves exactly the same way.</p>
- <p>This directive has the same effect as the <code><!--#config
- timefmt=<var>formatstring</var> --></code> element.</p>
+ <p>If you are matching positive (<code>=</code> or <code>==</code>), you
+ can capture grouped parts of the regular expression. The captured parts
+ are stored in the special variables <code>$1</code> ..
+ <code>$9</code>. The whole string matched by the regular expression is
+ stored in the special variable <code>$0</code></p>
- <pre class="prettyprint lang-config">SSITimeFormat "%R, %B %d, %Y"</pre>
+ <div class="example"><h3>Example</h3><p><code>
+ <!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --><br />
+ <span class="indent">
+ <!--#set var="session" value="$1" --><br />
+ </span>
+ <!--#endif -->
+ </code></p></div>
+ </dd>
+ <dt><code><var>string1</var> < <var>string2</var><br />
+ <var>string1</var> <= <var>string2</var><br />
+ <var>string1</var> > <var>string2</var><br />
+ <var>string1</var> >= <var>string2</var></code></dt>
- <p>The above directive would cause times to be displayed in the
- format "22:26, June 14, 2002".</p>
+ <dd>Compare <var>string1</var> with <var>string2</var>. Note, that
+ strings are compared <em>literally</em> (using
+ <code>strcmp(3)</code>). Therefore the string "100" is less than
+ "20".</dd>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIUndefinedEcho" id="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho" id="ssiundefinedecho">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String displayed when an unset variable is echoed</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIUndefinedEcho <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIUndefinedEcho "(none)"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- displays when a variable is not set and "echoed".</p>
+ <dt><code>( <var>test_condition</var> )</code></dt>
+ <dd>true if <var>test_condition</var> is true</dd>
- <pre class="prettyprint lang-config">SSIUndefinedEcho "<!-- undef -->"</pre>
+ <dt><code>! <var>test_condition</var></code></dt>
+ <dd>true if <var>test_condition</var> is false</dd>
+ <dt><code><var>test_condition1</var> &&
+ <var>test_condition2</var></code></dt>
+ <dd>true if both <var>test_condition1</var> and
+ <var>test_condition2</var> are true</dd>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="XBitHack" id="XBitHack">XBitHack</a> <a name="xbithack" id="xbithack">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Parse SSI directives in files with the execute bit
-set</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>XBitHack on|off|full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>XBitHack off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>The <code class="directive">XBitHack</code> directive controls the parsing
- of ordinary html documents. This directive only affects files associated
- with the <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> <code>text/html</code>. <code class="directive">XBitHack</code> can take on the following values:</p>
+ <dt><code><var>test_condition1</var> ||
+ <var>test_condition2</var></code></dt>
+ <dd>true if either <var>test_condition1</var> or
+ <var>test_condition2</var> is true</dd>
+ </dl>
- <dl>
- <dt><code>off</code></dt>
- <dd>No special treatment of executable files.</dd>
+ <p>"<code>=</code>" and "<code>!=</code>" bind more tightly than
+ "<code>&&</code>" and "<code>||</code>". "<code>!</code>" binds
+ most tightly. Thus, the following are equivalent:</p>
- <dt><code>on</code></dt>
- <dd>Any <code>text/html</code> file that has the user-execute bit
- set will be treated as a server-parsed html document.</dd>
+ <div class="example"><p><code>
+ <!--#if expr="$a = test1 && $b = test2" --><br />
+ <!--#if expr="($a = test1) && ($b = test2)" -->
+ </code></p></div>
- <dt><code>full</code></dt>
- <dd>As for <code>on</code> but also test the group-execute bit.
- If it is set, then set the <code>Last-modified</code> date of the
- returned file to be the last modified time of the file. If
- it is not set, then no last-modified date is sent. Setting
- this bit allows clients and proxies to cache the result of
- the request.
+ <p>The boolean operators <code>&&</code> and <code>||</code>
+ share the same priority. So if you want to bind such an operator more
+ tightly, you should use parentheses.</p>
- <div class="note"><h3>Note</h3>
- <p>You would not want to use the full option, unless you assure the
- group-execute bit is unset for every SSI script which might <code>#include</code> a CGI or otherwise produces different output on
- each hit (or could potentially change on subsequent requests).</p>
+ <p>Anything that's not recognized as a variable or an operator
+ is treated as a string. Strings can also be quoted:
+ <code>'string'</code>. Unquoted strings can't contain whitespace
+ (blanks and tabs) because it is used to separate tokens such as
+ variables. If multiple strings are found in a row, they are
+ concatenated using blanks. So,</p>
- <p>The <code class="directive"><a href="#ssilastmodified">SSILastModified</a></code>
- directive takes precedence over the
- <code class="directive"><a href="#xbithack">XBitHack</a></code> directive when
- <code class="directive"><a href="#ssilastmodified">SSILastModified</a></code> is set to
- <code>on</code>.</p>
- </div>
+ <div class="example"><p><code><var>string1</var> <var>string2</var></code> results in <code><var>string1</var> <var>string2</var></code><br />
+ <br />
+ and<br />
+ <br />
+ <code>'<var>string1</var> <var>string2</var>'</code> results in <code><var>string1</var> <var>string2</var></code>.</p></div>
- </dd>
- </dl>
+ <div class="note"><h3>Optimization of Boolean Expressions</h3>
+ <p>If the expressions become more complex and slow down processing
+ significantly, you can try to optimize them according to the
+ evaluation rules:</p>
+ <ul>
+ <li>Expressions are evaluated from left to right</li>
+ <li>Binary boolean operators (<code>&&</code> and <code>||</code>)
+ are short circuited wherever possible. In conclusion with the rule
+ above that means, <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> evaluates at first
+ the left expression. If the left result is sufficient to determine
+ the end result, processing stops here. Otherwise it evaluates the
+ right side and computes the end result from both left and right
+ results.</li>
+ <li>Short circuit evaluation is turned off as long as there are regular
+ expressions to deal with. These must be evaluated to fill in the
+ backreference variables (<code>$1</code> .. <code>$9</code>).</li>
+ </ul>
+ <p>If you want to look how a particular expression is handled, you can
+ recompile <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> using the
+ <code>-DDEBUG_INCLUDE</code> compiler option. This inserts for every
+ parsed expression tokenizer information, the parse tree and how it is
+ evaluated into the output sent to the client.</p>
+ </div>
+ <div class="note"><h3>Escaping slashes in regex strings</h3>
+ <p>All slashes which are not intended to act as delimiters in your regex must
+ be escaped. This is regardless of their meaning to the regex engine.</p>
+ </div>
</div>
</div>
<li><a href="../howto/ssi.html">SSI チュートリアル</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>include 要素を終了させる文字列</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIEndTag <var>tag</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIEndTag "-->"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.30 以降で利用可能</td></tr>
+</table>
+ <p>このディレクティブは <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> が探す、
+ include 要素の終了を示す文字列を変更します。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ SSIEndTag "%>"
+ </code></p></div>
+
+
+<h3>参照</h3>
+<ul>
+<li><code class="directive"><a href="#ssistarttag">SSIStartTag</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIErrorMsg" id="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg" id="ssierrormsg">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>SSI のエラーがあったときに表示されるエラーメッセージ</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIErrorMsg <var>message</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIErrorMsg "[an error occurred while processing this
+directive]"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>バージョン 2.0.30 以降で使用可能</td></tr>
+</table>
+ <p><code class="directive">SSIErrorMsg</code> ディレクティブは <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
+ がエラーが起こったときに表示するメッセージを変更します。プロダクションサーバでは
+ メッセージがユーザに表示されないようにするために
+ デフォルトエラーメッセージを <code>"<!-- Error -->"</code>
+ に変えるというようなことを考えるかもしれません。</p>
+
+ <p>このディレクティブは <code><!--#config
+ errmsg=<var>message</var> --></code> 要素と同じ効果になります。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ SSIErrorMsg "<!-- Error -->"
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIETag" id="SSIETag">SSIETag</a> <a name="ssietag" id="ssietag">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Controls whether ETags are generated by the server.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIETag on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIETag off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSILastModified" id="SSILastModified">SSILastModified</a> <a name="ssilastmodified" id="ssilastmodified">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Controls whether <code>Last-Modified</code> headers are generated by the
+server.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSILastModified on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSILastModified off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSILegacyExprParser" id="SSILegacyExprParser">SSILegacyExprParser</a> <a name="ssilegacyexprparser" id="ssilegacyexprparser">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Enable compatibility mode for conditional expressions.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSILegacyExprParser on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSILegacyExprParser off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Available in version 2.3.13 and later.</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIStartTag" id="SSIStartTag">SSIStartTag</a> <a name="ssistarttag" id="ssistarttag">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>include 要素を開始する文字列</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIStartTag <var>tag</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIStartTag "<!--#"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>バージョン 2.0.30 以降で使用可能</td></tr>
+</table>
+
+ <p>このディレクティブは <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> が探す、include
+ 要素の開始を示す文字列を変更します。</p>
+
+ <p>二つのサーバで (もしかすると別々の段階で) ファイルの出力を解析していて、
+ それぞれに違うコマンドを処理させたい、
+ というようなときにこのオプションを使います。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ SSIStartTag "<%"<br />
+ SSIEndTag "%>"
+ </code></p></div>
+
+ <p>上の例のように対応する
+ <code class="directive"><a href="#ssiendtag">SSIEndTag</a></code> を併せて使うと、
+ 下に示す例のように SSI ディレクティブを使えます:</p>
+
+ <div class="example"><h3>違う開始と終了のタグを使った SSI ディレクティブ</h3><p><code>
+ <%printenv %>
+ </code></p></div>
+
+<h3>参照</h3>
+<ul>
+<li><code class="directive"><a href="#ssiendtag">SSIEndTag</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSITimeFormat" id="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat" id="ssitimeformat">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>日付けを現す文字列の書式を設定する</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSITimeFormat <var>formatstring</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.30 以降で使用可能</td></tr>
+</table>
+<p>このディレクティブは <code>DATE</code> 環境変数を echo して日付を現す文字列が
+ 表示されるときの書式を変更します。<var>formatstring</var> は
+ C 標準ライブラリの <code>strftime(3)</code> と同じ形式です。</p>
+
+ <p>このディレクティブは <code><!--#config
+ timefmt=<var>formatstring</var> --></code> 要素と同じ効果になります。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ SSITimeFormat "%R, %B %d, %Y"
+ </code></p></div>
+
+ <p>上のディレクティブでは、日付は "22:26, June 14, 2002" という
+ 形式で表示されます。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIUndefinedEcho" id="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho" id="ssiundefinedecho">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>未定義の変数が echo されたときに表示される文字列</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIUndefinedEcho <var>string</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIUndefinedEcho "(none)"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.34 以降で利用可能</td></tr>
+</table>
+ <p>このディレクティブは変数が定義されていないにも関わらず
+ "echo" されたときに <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
+ が表示する文字列を変更します。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ SSIUndefinedEcho "<!-- undef -->"
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="XBitHack" id="XBitHack">XBitHack</a> <a name="xbithack" id="xbithack">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>実行ビットが設定されたファイルの SSI ディレクティブを
+解析する</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>XBitHack on|off|full</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>XBitHack off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>Options</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
+</table>
+ <p><code class="directive">XBitHack</code> ディレクティブは通常の HTML
+ ドキュメントの解析を制御します。このディレクティブは <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a>
+ <code>text/html</code> と関連付けられているファイルにのみ影響します。
+ <code class="directive">XBitHack</code> は以下の値をとることができます。</p>
+
+ <dl>
+ <dt><code>off</code></dt>
+ <dd>実行可能ファイルに対して特別な扱いをしません。</dd>
+
+ <dt><code>on</code></dt>
+ <dd>ユーザの実行ビットが設定されている <code>text/html</code>
+ ファイルは全てサーバで解析する html ドキュメントとして扱われます。</dd>
+
+ <dt><code>full</code></dt>
+ <dd><code>on</code> と同様ですが、グループ実行ビットもテストします。
+ もしそれが設定されていれば、返されるファイルの <code>Last-modified</code> の
+ 日付をファイルの最終修正時刻にします。それが設定されていないときは、
+ last-modified の日付は送られません。このビットを設定すると、
+ クライアントやプロキシがリクエストをキャッシュできるようになります。
+
+ <div class="note"><strong>注意</strong> 他の CGI を <code>#include</code>
+ するかもしれないものや、各アクセスに対して違う出力を生成する
+ (もしくは後のリクエストで変わるかもしれないもの)
+ すべての SSI スクリプトに対してグループ実行ビットが
+ 設定されていないことを確認できない場合は、full は使わない方が良い
+ でしょう。</div>
+ </dd>
+ </dl>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="enabling" id="enabling">Server-Side Includes を有効にする</a></h2>
エスケープしなければなりません。
正規表現の意味がどうであろうとエスケープは必要です。</p>
</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>include 要素を終了させる文字列</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIEndTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIEndTag "-->"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.30 以降で利用可能</td></tr>
-</table>
- <p>このディレクティブは <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> が探す、
- include 要素の終了を示す文字列を変更します。</p>
-
- <div class="example"><h3>例</h3><p><code>
- SSIEndTag "%>"
- </code></p></div>
-
-
-<h3>参照</h3>
-<ul>
-<li><code class="directive"><a href="#ssistarttag">SSIStartTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIErrorMsg" id="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg" id="ssierrormsg">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>SSI のエラーがあったときに表示されるエラーメッセージ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIErrorMsg <var>message</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIErrorMsg "[an error occurred while processing this
-directive]"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>バージョン 2.0.30 以降で使用可能</td></tr>
-</table>
- <p><code class="directive">SSIErrorMsg</code> ディレクティブは <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- がエラーが起こったときに表示するメッセージを変更します。プロダクションサーバでは
- メッセージがユーザに表示されないようにするために
- デフォルトエラーメッセージを <code>"<!-- Error -->"</code>
- に変えるというようなことを考えるかもしれません。</p>
-
- <p>このディレクティブは <code><!--#config
- errmsg=<var>message</var> --></code> 要素と同じ効果になります。</p>
-
- <div class="example"><h3>例</h3><p><code>
- SSIErrorMsg "<!-- Error -->"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIETag" id="SSIETag">SSIETag</a> <a name="ssietag" id="ssietag">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Controls whether ETags are generated by the server.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIETag on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIETag off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSILastModified" id="SSILastModified">SSILastModified</a> <a name="ssilastmodified" id="ssilastmodified">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Controls whether <code>Last-Modified</code> headers are generated by the
-server.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSILastModified on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSILastModified off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSILegacyExprParser" id="SSILegacyExprParser">SSILegacyExprParser</a> <a name="ssilegacyexprparser" id="ssilegacyexprparser">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Enable compatibility mode for conditional expressions.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSILegacyExprParser on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSILegacyExprParser off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Available in version 2.3.13 and later.</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIStartTag" id="SSIStartTag">SSIStartTag</a> <a name="ssistarttag" id="ssistarttag">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>include 要素を開始する文字列</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIStartTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIStartTag "<!--#"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>バージョン 2.0.30 以降で使用可能</td></tr>
-</table>
-
- <p>このディレクティブは <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> が探す、include
- 要素の開始を示す文字列を変更します。</p>
-
- <p>二つのサーバで (もしかすると別々の段階で) ファイルの出力を解析していて、
- それぞれに違うコマンドを処理させたい、
- というようなときにこのオプションを使います。</p>
-
- <div class="example"><h3>例</h3><p><code>
- SSIStartTag "<%"<br />
- SSIEndTag "%>"
- </code></p></div>
-
- <p>上の例のように対応する
- <code class="directive"><a href="#ssiendtag">SSIEndTag</a></code> を併せて使うと、
- 下に示す例のように SSI ディレクティブを使えます:</p>
-
- <div class="example"><h3>違う開始と終了のタグを使った SSI ディレクティブ</h3><p><code>
- <%printenv %>
- </code></p></div>
-
-<h3>参照</h3>
-<ul>
-<li><code class="directive"><a href="#ssiendtag">SSIEndTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSITimeFormat" id="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat" id="ssitimeformat">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>日付けを現す文字列の書式を設定する</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSITimeFormat <var>formatstring</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.30 以降で使用可能</td></tr>
-</table>
-<p>このディレクティブは <code>DATE</code> 環境変数を echo して日付を現す文字列が
- 表示されるときの書式を変更します。<var>formatstring</var> は
- C 標準ライブラリの <code>strftime(3)</code> と同じ形式です。</p>
-
- <p>このディレクティブは <code><!--#config
- timefmt=<var>formatstring</var> --></code> 要素と同じ効果になります。</p>
-
- <div class="example"><h3>例</h3><p><code>
- SSITimeFormat "%R, %B %d, %Y"
- </code></p></div>
-
- <p>上のディレクティブでは、日付は "22:26, June 14, 2002" という
- 形式で表示されます。</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIUndefinedEcho" id="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho" id="ssiundefinedecho">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>未定義の変数が echo されたときに表示される文字列</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>SSIUndefinedEcho <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>SSIUndefinedEcho "(none)"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.34 以降で利用可能</td></tr>
-</table>
- <p>このディレクティブは変数が定義されていないにも関わらず
- "echo" されたときに <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- が表示する文字列を変更します。</p>
-
- <div class="example"><h3>例</h3><p><code>
- SSIUndefinedEcho "<!-- undef -->"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="XBitHack" id="XBitHack">XBitHack</a> <a name="xbithack" id="xbithack">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>実行ビットが設定されたファイルの SSI ディレクティブを
-解析する</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>XBitHack on|off|full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>XBitHack off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_include</td></tr>
-</table>
- <p><code class="directive">XBitHack</code> ディレクティブは通常の HTML
- ドキュメントの解析を制御します。このディレクティブは <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a>
- <code>text/html</code> と関連付けられているファイルにのみ影響します。
- <code class="directive">XBitHack</code> は以下の値をとることができます。</p>
-
- <dl>
- <dt><code>off</code></dt>
- <dd>実行可能ファイルに対して特別な扱いをしません。</dd>
-
- <dt><code>on</code></dt>
- <dd>ユーザの実行ビットが設定されている <code>text/html</code>
- ファイルは全てサーバで解析する html ドキュメントとして扱われます。</dd>
-
- <dt><code>full</code></dt>
- <dd><code>on</code> と同様ですが、グループ実行ビットもテストします。
- もしそれが設定されていれば、返されるファイルの <code>Last-modified</code> の
- 日付をファイルの最終修正時刻にします。それが設定されていないときは、
- last-modified の日付は送られません。このビットを設定すると、
- クライアントやプロキシがリクエストをキャッシュできるようになります。
-
- <div class="note"><strong>注意</strong> 他の CGI を <code>#include</code>
- するかもしれないものや、各アクセスに対して違う出力を生成する
- (もしくは後のリクエストで変わるかもしれないもの)
- すべての SSI スクリプトに対してグループ実行ビットが
- 設定されていないことを確認できない場合は、full は使わない方が良い
- でしょう。</div>
- </dd>
- </dl>
-
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#limitations">Known Limitations</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adds additional information to the module
+information displayed by the server-info handler</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_info</td></tr>
+</table>
+ <p>This allows the content of <var>string</var> to be shown as
+ HTML interpreted, <strong>Additional Information</strong> for
+ the module <var>module-name</var>. Example:</p>
+
+ <pre class="prettyprint lang-config">AddModuleInfo mod_deflate.c 'See <a \
+ href="http://httpd.apache.org/docs/trunk/mod/mod_deflate.html">\
+ http://httpd.apache.org/docs/trunk/mod/mod_deflate.html</a>'</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="security" id="security">Security Issues</a></h2>
<p>Once <code class="module"><a href="../mod/mod_info.html">mod_info</a></code> is loaded into the server, its
<li>Directives generated by third party modules such as <a href="http://perl.apache.org">mod_perl</a>
might not be listed.</li>
</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adds additional information to the module
-information displayed by the server-info handler</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_info</td></tr>
-</table>
- <p>This allows the content of <var>string</var> to be shown as
- HTML interpreted, <strong>Additional Information</strong> for
- the module <var>module-name</var>. Example:</p>
-
- <pre class="prettyprint lang-config">AddModuleInfo mod_deflate.c 'See <a \
- href="http://httpd.apache.org/docs/trunk/mod/mod_deflate.html">\
- http://httpd.apache.org/docs/trunk/mod/mod_deflate.html</a>'</pre>
-
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#limitations">Limitations connues</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="addmoduleinfo" id="addmoduleinfo">Directive</a> <a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute des données supplémentaires aux informations de
+module affichées par le gestionnaire server-info</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AddModuleInfo <var>nom-module</var> <var>chaîne</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_info</td></tr>
+</table>
+ <p>Cette directive permet d'afficher le contenu de <var>chaîne</var>
+ en tant qu'<strong>Information supplémentaire</strong> interprétée
+ en HTML pour le module <var>nom-module</var>. Exemple :</p>
+
+ <pre class="prettyprint lang-config">AddModuleInfo mod_deflate.c 'See <a \
+ href="http://httpd.apache.org/docs/trunk/mod/mod_deflate.html">\
+ http://httpd.apache.org/docs/trunk/mod/mod_deflate.html</a>'</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="security" id="security">Problèmes liés à la sécurité</a></h2>
<p>Une fois <code class="module"><a href="../mod/mod_info.html">mod_info</a></code> chargé dans le serveur, sa
<a href="http://perl.apache.org">mod_perl</a> peuvent ne pas être
prises en compte.</li>
</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="addmoduleinfo" id="addmoduleinfo">Directive</a> <a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute des données supplémentaires aux informations de
-module affichées par le gestionnaire server-info</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AddModuleInfo <var>nom-module</var> <var>chaîne</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_info</td></tr>
-</table>
- <p>Cette directive permet d'afficher le contenu de <var>chaîne</var>
- en tant qu'<strong>Information supplémentaire</strong> interprétée
- en HTML pour le module <var>nom-module</var>. Exemple :</p>
-
- <pre class="prettyprint lang-config">AddModuleInfo mod_deflate.c 'See <a \
- href="http://httpd.apache.org/docs/trunk/mod/mod_deflate.html">\
- http://httpd.apache.org/docs/trunk/mod/mod_deflate.html</a>'</pre>
-
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#limitations">既知の制限</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>server-info ハンドラにより表示されるモジュールの情報に
+追加の情報を付け加える</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_info</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Apache 1.3 以降</td></tr>
+</table>
+ <p>これは、<var>string</var> の内容がモジュール <var>module-name</var>
+ の<strong>追加情報</strong> として HTML
+ として解釈され、表示されるようにします。例:</p>
+
+ <div class="example"><p><code>
+ AddModuleInfo mod_deflate.c 'See <a \<br />
+ <span class="indent">
+ href="http://www.apache.org/docs/trunk/mod/mod_deflate.html">\<br />
+ http://www.apache.org/docs/trunk/mod/mod_deflate.html</a>'
+ </span>
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="security" id="security">Security Issues</a></h2>
<p>一旦 <code class="module"><a href="../mod/mod_info.html">mod_info</a></code> がサーバに読み込まれると、
のディレクティブは表示されないかもしれません。</li>
</ul>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>server-info ハンドラにより表示されるモジュールの情報に
-追加の情報を付け加える</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_info</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Apache 1.3 以降</td></tr>
-</table>
- <p>これは、<var>string</var> の内容がモジュール <var>module-name</var>
- の<strong>追加情報</strong> として HTML
- として解釈され、表示されるようにします。例:</p>
-
- <div class="example"><p><code>
- AddModuleInfo mod_deflate.c 'See <a \<br />
- <span class="indent">
- href="http://www.apache.org/docs/trunk/mod/mod_deflate.html">\<br />
- http://www.apache.org/docs/trunk/mod/mod_deflate.html</a>'
- </span>
- </code></p></div>
-
-</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_info.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#limitations">¾Ë·ÁÁø ÇÑ°è</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸ðµâ¿¡ ´ëÇÑ Ãß°¡ Á¤º¸¸¦ server-info Çڵ鷯°¡ º¸¿©ÁÖµµ·Ï
+Ãß°¡ÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_info</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 1.3 ÀÌÈÄ</td></tr>
+</table>
+ <p><var>module-name</var> ¸ðµâ¿¡ ´ëÇÑ <strong>Ãß°¡ Á¤º¸</strong>·Î
+ <var>string</var>ÀÇ ³»¿ëÀ» HTML·Î º¸¿©ÁØ´Ù. ¿¹¸¦ µé¾î,</p>
+
+ <div class="example"><p><code>
+ AddModuleInfo mod_deflate.c 'See <a \<br />
+ <span class="indent">
+ href="http://www.apache.org/docs/trunk/mod/mod_deflate.html">\<br />
+ http://www.apache.org/docs/docs/trunk/mod/mod_deflate.html</a>'
+ </span>
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="security" id="security">º¸¾È ¹®Á¦</a></h2>
<p>Çѹø ¼¹ö°¡ <code class="module"><a href="../mod/mod_info.html">mod_info</a></code>¸¦ ÀоîµéÀ̸é, µð·ºÅ丮º°
Áö½Ã¾î¸¦ º¸¿©ÁÖÁö ¸øÇÒ ¼ö ÀÖ´Ù.</li>
</ul>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸ðµâ¿¡ ´ëÇÑ Ãß°¡ Á¤º¸¸¦ server-info Çڵ鷯°¡ º¸¿©ÁÖµµ·Ï
-Ãß°¡ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_info</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 1.3 ÀÌÈÄ</td></tr>
-</table>
- <p><var>module-name</var> ¸ðµâ¿¡ ´ëÇÑ <strong>Ãß°¡ Á¤º¸</strong>·Î
- <var>string</var>ÀÇ ³»¿ëÀ» HTML·Î º¸¿©ÁØ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <div class="example"><p><code>
- AddModuleInfo mod_deflate.c 'See <a \<br />
- <span class="indent">
- href="http://www.apache.org/docs/trunk/mod/mod_deflate.html">\<br />
- http://www.apache.org/docs/docs/trunk/mod/mod_deflate.html</a>'
- </span>
- </code></p></div>
-
-</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_info.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#journal">Programmer's Journal</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIAppendLogToErrors" id="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors" id="isapiappendlogtoerrors">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
+ISAPI extensions to the error log</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIAppendLogToErrors on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIAppendLogToErrors off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
+ extensions to the server error log.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIAppendLogToQuery" id="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery" id="isapiappendlogtoquery">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
+ISAPI extensions to the query field</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIAppendLogToQuery on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIAppendLogToQuery on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
+ extensions to the query field (appended to the <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> <code>%q</code>
+ component).</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPICacheFile" id="ISAPICacheFile">ISAPICacheFile</a> <a name="isapicachefile" id="isapicachefile">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>ISAPI .dll files to be loaded at startup</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
+...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>Specifies a space-separated list of file names to be loaded
+ when the Apache server is launched, and remain loaded until the
+ server is shut down. This directive may be repeated for every
+ ISAPI .dll file desired. The full path name of each file should
+ be specified. If the path name is not absolute, it will be treated
+ relative to <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIFakeAsync" id="ISAPIFakeAsync">ISAPIFakeAsync</a> <a name="isapifakeasync" id="isapifakeasync">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fake asynchronous support for ISAPI callbacks</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIFakeAsync on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIFakeAsync off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>While set to on, asynchronous support for ISAPI callbacks is
+ simulated.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPILogNotSupported" id="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported" id="isapilognotsupported">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Log unsupported feature requests from ISAPI
+extensions</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPILogNotSupported on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPILogNotSupported off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>Logs all requests for unsupported features from ISAPI
+ extensions in the server error log. This may help administrators
+ to track down problems. Once set to on and all desired ISAPI modules
+ are functioning, it should be set back to off.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIReadAheadBuffer" id="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer" id="isapireadaheadbuffer">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size of the Read Ahead Buffer sent to ISAPI
+extensions</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIReadAheadBuffer <var>size</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIReadAheadBuffer 49152</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>Defines the maximum size of the Read Ahead Buffer sent to
+ ISAPI extensions when they are initially invoked. All remaining
+ data must be retrieved using the <code>ReadClient</code> callback; some
+ ISAPI extensions may not support the <code>ReadClient</code> function.
+ Refer questions to the ISAPI extension's author.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">Usage</a></h2>
<code>TransmitFile</code> semantics. Apache httpd also supports preloading
ISAPI .dlls for performance.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIAppendLogToErrors" id="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors" id="isapiappendlogtoerrors">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the error log</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIAppendLogToErrors on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIAppendLogToErrors off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the server error log.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIAppendLogToQuery" id="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery" id="isapiappendlogtoquery">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the query field</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIAppendLogToQuery on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIAppendLogToQuery on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the query field (appended to the <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> <code>%q</code>
- component).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPICacheFile" id="ISAPICacheFile">ISAPICacheFile</a> <a name="isapicachefile" id="isapicachefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>ISAPI .dll files to be loaded at startup</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Specifies a space-separated list of file names to be loaded
- when the Apache server is launched, and remain loaded until the
- server is shut down. This directive may be repeated for every
- ISAPI .dll file desired. The full path name of each file should
- be specified. If the path name is not absolute, it will be treated
- relative to <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIFakeAsync" id="ISAPIFakeAsync">ISAPIFakeAsync</a> <a name="isapifakeasync" id="isapifakeasync">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fake asynchronous support for ISAPI callbacks</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIFakeAsync on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIFakeAsync off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>While set to on, asynchronous support for ISAPI callbacks is
- simulated.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPILogNotSupported" id="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported" id="isapilognotsupported">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Log unsupported feature requests from ISAPI
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPILogNotSupported on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPILogNotSupported off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Logs all requests for unsupported features from ISAPI
- extensions in the server error log. This may help administrators
- to track down problems. Once set to on and all desired ISAPI modules
- are functioning, it should be set back to off.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIReadAheadBuffer" id="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer" id="isapireadaheadbuffer">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size of the Read Ahead Buffer sent to ISAPI
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIReadAheadBuffer <var>size</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIReadAheadBuffer 49152</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Defines the maximum size of the Read Ahead Buffer sent to
- ISAPI extensions when they are initially invoked. All remaining
- data must be retrieved using the <code>ReadClient</code> callback; some
- ISAPI extensions may not support the <code>ReadClient</code> function.
- Refer questions to the ISAPI extension's author.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_isapi.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#journal">°³¹ßÀÚ Á¤º¸</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIAppendLogToErrors" id="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors" id="isapiappendlogtoerrors">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
+¿äûÀ» ¿À·ù ·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIAppendLogToErrors on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIAppendLogToErrors off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
+ ¿äûÀ» ¿À·ù ·Î±×¿¡ ±â·ÏÇÑ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIAppendLogToQuery" id="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery" id="isapiappendlogtoquery">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
+¿äûÀ» ÁúÀǹ®ÀÚ¿¿¡ ±â·ÏÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIAppendLogToQuery on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIAppendLogToQuery on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
+ ¿äûÀ» ÁúÀǹ®ÀÚ¿¿¡ ±â·ÏÇÑ´Ù (<code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> <code>%q</code>
+ Ç׸ñ¿¡ µ¡ºÙÀδÙ).</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPICacheFile" id="ISAPICacheFile">ISAPICacheFile</a> <a name="isapicachefile" id="isapicachefile">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼¹ö°¡ ½ÃÀÛÇÒ¶§ ¸Þ¸ð¸®·Î ÀоîµéÀÏ ISAPI .dll ÆÄÀϵé</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
+...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>¾ÆÆÄÄ¡ ¼¹ö°¡ ½ÃÀÛÇÒ¶§ ¸Þ¸ð¸®·Î Àоîµé¿©¼ ¼¹ö¸¦ Á¾·áÇÒ¶§±îÁö
+ ¸Þ¸ð¸®¿¡ ³²¾ÆÀÖÀ» ÆÄÀϸíÀ» °ø¹éÀ¸·Î ±¸ºÐÇÏ¿© ÁöÁ¤ÇÑ´Ù. ÀÌ
+ Áö½Ã¾î´Â ISAPI .dll ÆÄÀϺ°·Î ¿©·¯¹ø »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏÀÇ
+ Àüü °æ·Î¸¦ Àû´Â´Ù. Àý´ë °æ·Î°¡ ¾Æ´Ï¸é <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡ »ó´ë °æ·Î·Î ¹Þ¾ÆµéÀδÙ.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIFakeAsync" id="ISAPIFakeAsync">ISAPIFakeAsync</a> <a name="isapifakeasync" id="isapifakeasync">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ºñµ¿±â ISAPI ÄݹéÀ» Áö¿øÇϴ ôÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIFakeAsync on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIFakeAsync off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>onÀ¸·Î ¼³Á¤ÇÏ¸é ºñµ¿±â ISAPI Äݹé Áö¿øÀ» Èä³»³½´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPILogNotSupported" id="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported" id="isapilognotsupported">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI extensionÀÌ Áö¿øÇÏÁö ¾Ê´Â ±â´ÉÀ» ¿äûÇϸé
+·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPILogNotSupported on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPILogNotSupported off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>ISAPI extensionÀÌ Áö¿øÇÏÁö ¾Ê´Â ±â´ÉÀ» ¿äûÇÏ¸é ¼¹ö
+ ¿À·ù ·Î±×¿¡ ±â·ÏÇÑ´Ù. ³ªÁß¿¡ °ü¸®ÀÚ°¡ ¹®Á¦¸¦ ÃßÀûÇϴµ¥
+ µµ¿òÀÌ µÈ´Ù. ¿øÇÏ´Â ¸ðµç ISAPI ¸ðµâÀÌ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϸé
+ ´Ù½Ã off·Î µÇµ¹·Á¾ß ÇÑ´Ù.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ISAPIReadAheadBuffer" id="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer" id="isapireadaheadbuffer">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI extensionÀÇ ¹Ì¸®Àбâ¹öÆÛ(read ahead buffer)
+Å©±â</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIReadAheadBuffer <var>size</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIReadAheadBuffer 49152</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
+</table>
+ <p>ISAPI extensionÀ» óÀ½ È£ÃâÇÒ¶§ ¹Ì¸®Àбâ¹öÆÛÀÇ ÃÖ´ë Å©±â¸¦
+ ÁöÁ¤ÇÑ´Ù. (ÀÌ Å©±âº¸´Ù Å«) ³ª¸ÓÁö ÀÚ·á´Â <code>ReadClient</code>
+ ÄݹéÀ» »ç¿ëÇÏ¿© Àоî¾ß ÇÑ´Ù. ¾î¶² ISAPI extensionÀº
+ <code>ReadClient</code> ±â´ÉÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. ÀÌ °æ¿ì
+ ISAPI extension Á¦ÀÛÀÚ¿¡°Ô ¹®ÀÇÇ϶ó.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">»ç¿ë¹ý</a></h2>
.dllÀ» ¹Ì¸® Àоîµé¿©¼ ¼º´ÉÀ» ³ôÀÌ´Â ¾ÆÆÄÄ¡ 1.3
<code>mod_isapi</code>¿¡´Â ¾ø´Â ±â´ÉÀ» Áö¿øÇÑ´Ù.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIAppendLogToErrors" id="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors" id="isapiappendlogtoerrors">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
-¿äûÀ» ¿À·ù ·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIAppendLogToErrors on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIAppendLogToErrors off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
- ¿äûÀ» ¿À·ù ·Î±×¿¡ ±â·ÏÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIAppendLogToQuery" id="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery" id="isapiappendlogtoquery">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
-¿äûÀ» ÁúÀǹ®ÀÚ¿¿¡ ±â·ÏÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIAppendLogToQuery on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIAppendLogToQuery on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>ISAPI exntensionÀÇ <code>HSE_APPEND_LOG_PARAMETER</code>
- ¿äûÀ» ÁúÀǹ®ÀÚ¿¿¡ ±â·ÏÇÑ´Ù (<code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> <code>%q</code>
- Ç׸ñ¿¡ µ¡ºÙÀδÙ).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPICacheFile" id="ISAPICacheFile">ISAPICacheFile</a> <a name="isapicachefile" id="isapicachefile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼¹ö°¡ ½ÃÀÛÇÒ¶§ ¸Þ¸ð¸®·Î ÀоîµéÀÏ ISAPI .dll ÆÄÀϵé</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>¾ÆÆÄÄ¡ ¼¹ö°¡ ½ÃÀÛÇÒ¶§ ¸Þ¸ð¸®·Î Àоîµé¿©¼ ¼¹ö¸¦ Á¾·áÇÒ¶§±îÁö
- ¸Þ¸ð¸®¿¡ ³²¾ÆÀÖÀ» ÆÄÀϸíÀ» °ø¹éÀ¸·Î ±¸ºÐÇÏ¿© ÁöÁ¤ÇÑ´Ù. ÀÌ
- Áö½Ã¾î´Â ISAPI .dll ÆÄÀϺ°·Î ¿©·¯¹ø »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏÀÇ
- Àüü °æ·Î¸¦ Àû´Â´Ù. Àý´ë °æ·Î°¡ ¾Æ´Ï¸é <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡ »ó´ë °æ·Î·Î ¹Þ¾ÆµéÀδÙ.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIFakeAsync" id="ISAPIFakeAsync">ISAPIFakeAsync</a> <a name="isapifakeasync" id="isapifakeasync">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ºñµ¿±â ISAPI ÄݹéÀ» Áö¿øÇϴ ôÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIFakeAsync on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIFakeAsync off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>onÀ¸·Î ¼³Á¤ÇÏ¸é ºñµ¿±â ISAPI Äݹé Áö¿øÀ» Èä³»³½´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPILogNotSupported" id="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported" id="isapilognotsupported">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI extensionÀÌ Áö¿øÇÏÁö ¾Ê´Â ±â´ÉÀ» ¿äûÇϸé
-·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPILogNotSupported on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPILogNotSupported off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>ISAPI extensionÀÌ Áö¿øÇÏÁö ¾Ê´Â ±â´ÉÀ» ¿äûÇÏ¸é ¼¹ö
- ¿À·ù ·Î±×¿¡ ±â·ÏÇÑ´Ù. ³ªÁß¿¡ °ü¸®ÀÚ°¡ ¹®Á¦¸¦ ÃßÀûÇϴµ¥
- µµ¿òÀÌ µÈ´Ù. ¿øÇÏ´Â ¸ðµç ISAPI ¸ðµâÀÌ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϸé
- ´Ù½Ã off·Î µÇµ¹·Á¾ß ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIReadAheadBuffer" id="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer" id="isapireadaheadbuffer">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ISAPI extensionÀÇ ¹Ì¸®Àбâ¹öÆÛ(read ahead buffer)
-Å©±â</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ISAPIReadAheadBuffer <var>size</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ISAPIReadAheadBuffer 49152</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>ISAPI extensionÀ» óÀ½ È£ÃâÇÒ¶§ ¹Ì¸®Àбâ¹öÆÛÀÇ ÃÖ´ë Å©±â¸¦
- ÁöÁ¤ÇÑ´Ù. (ÀÌ Å©±âº¸´Ù Å«) ³ª¸ÓÁö ÀÚ·á´Â <code>ReadClient</code>
- ÄݹéÀ» »ç¿ëÇÏ¿© Àоî¾ß ÇÑ´Ù. ¾î¶² ISAPI extensionÀº
- <code>ReadClient</code> ±â´ÉÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. ÀÌ °æ¿ì
- ISAPI extension Á¦ÀÛÀÚ¿¡°Ô ¹®ÀÇÇ϶ó.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_isapi.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="JournaldCustomLog" id="JournaldCustomLog">JournaldCustomLog</a> <a name="journaldcustomlog" id="journaldcustomlog">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable logging of CustomLog/TransferLog to systemd-journald</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>JournaldCustomLog on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>JournaldCustomLog off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_journald</td></tr>
+</table>
+
+ <p>The <code class="directive">JournaldCustomLog</code> directive enables logging
+ of CustomLog and TransferLog messages to systemd-journald.
+ </p>
+
+ <div class="warning"><h3>Performance warning</h3><p>
+ Currently, systemd-journald is not designed for high-throughput logging
+ and logging access_log to systemd-journald could decrease the performance
+ a lot.
+ </p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="structured" id="structured">Structured logging</a></h2>
<pre class="prettyprint lang-config">ErrorLog journald</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="JournaldCustomLog" id="JournaldCustomLog">JournaldCustomLog</a> <a name="journaldcustomlog" id="journaldcustomlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable logging of CustomLog/TransferLog to systemd-journald</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>JournaldCustomLog on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>JournaldCustomLog off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_journald</td></tr>
-</table>
-
- <p>The <code class="directive">JournaldCustomLog</code> directive enables logging
- of CustomLog and TransferLog messages to systemd-journald.
- </p>
-
- <div class="warning"><h3>Performance warning</h3><p>
- Currently, systemd-journald is not designed for high-throughput logging
- and logging access_log to systemd-journald could decrease the performance
- a lot.
- </p></div>
-
</div>
</div>
<div class="bottomlang">
<li><code class="module"><a href="../mod/mod_heartbeat.html">mod_heartbeat</a></code></li>
<li><code class="module"><a href="../mod/mod_heartmonitor.html">mod_heartmonitor</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="HeartbeatStorage" id="HeartbeatStorage">HeartbeatStorage</a> <a name="heartbeatstorage" id="heartbeatstorage">Directive</a></h2>
<table class="directive">
<code class="module"><a href="../mod/mod_slotmem_shm.html">mod_slotmem_shm</a></code> is not loaded.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_lbmethod_heartbeat.html" title="English"> en </a></p>
<li><img alt="" src="../images/down.gif" /> <a href="#settingcerts">SSL/TLS Certificates</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exampleconfig" id="exampleconfig">Example Configuration</a></h2>
- <p>The following is an example configuration that uses
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> to increase the performance of HTTP Basic
- authentication provided by <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>.</p>
-
- <pre class="prettyprint lang-config"># Enable the LDAP connection pool and shared
-# memory cache. Enable the LDAP cache status
-# handler. Requires that mod_ldap and mod_authnz_ldap
-# be loaded. Change the "yourdomain.example.com" to
-# match your domain.
+<div class="directive-section"><h2><a name="LDAPCacheEntries" id="LDAPCacheEntries">LDAPCacheEntries</a> <a name="ldapcacheentries" id="ldapcacheentries">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of entries in the primary LDAP cache</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPCacheEntries <var>number</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPCacheEntries 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Specifies the maximum size of the primary LDAP cache. This
+ cache contains successful search/binds. Set it to 0 to turn off
+ search/bind caching. The default size is 1024 cached
+ searches.</p>
-LDAPSharedCacheSize 500000
-LDAPCacheEntries 1024
-LDAPCacheTTL 600
-LDAPOpCacheEntries 1024
-LDAPOpCacheTTL 600
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPCacheTTL" id="LDAPCacheTTL">LDAPCacheTTL</a> <a name="ldapcachettl" id="ldapcachettl">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Time that cached items remain valid</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPCacheTTL <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPCacheTTL 600</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Specifies the time (in seconds) that an item in the
+ search/bind cache remains valid. The default is 600 seconds (10
+ minutes).</p>
-<Location /ldap-status>
- SetHandler ldap-status
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPConnectionPoolTTL" id="LDAPConnectionPoolTTL">LDAPConnectionPoolTTL</a> <a name="ldapconnectionpoolttl" id="ldapconnectionpoolttl">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Discard backend connections that have been sitting in the connection pool too long</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPConnectionPoolTTL <var>n</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPConnectionPoolTTL -1</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Apache HTTP Server 2.3.12 and later</td></tr>
+</table>
+ <p>Specifies the maximum age, in seconds, that a pooled LDAP connection can remain idle
+ and still be available for use. Connections are cleaned up when they are next needed,
+ not asynchronously.</p>
- Require host yourdomain.example.com
+ <p>A setting of 0 causes connections to never be saved in the backend
+ connection pool. The default value of -1, and any other negative value,
+ allows connections of any age to be reused.</p>
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one
- Require valid-user
-</Location></pre>
+ <p>For performance reasons, the reference time used by this directive is
+ based on when the LDAP connection is returned to the pool, not the time
+ of the last successful I/O with the LDAP server. </p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pool" id="pool">LDAP Connection Pool</a></h2>
+ <p>Since 2.4.10, new measures are in place to avoid the reference time
+ from being inflated by cache hits or slow requests. First, the reference
+ time is not updated if no backend LDAP conncetions were needed. Second,
+ the reference time uses the time the HTTP request was received instead
+ of the time the request is completed.</p>
+
+ <div class="note"><p>This timeout defaults to units of seconds, but accepts
+ suffixes for milliseconds (ms), minutes (min), and hours (h).
+ </p></div>
- <p>LDAP connections are pooled from request to request. This
- allows the LDAP server to remain connected and bound ready for
- the next request, without the need to unbind/connect/rebind.
- The performance advantages are similar to the effect of HTTP
- keepalives.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPConnectionTimeout" id="LDAPConnectionTimeout">LDAPConnectionTimeout</a> <a name="ldapconnectiontimeout" id="ldapconnectiontimeout">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the socket connection timeout in seconds</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPConnectionTimeout <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>This directive configures the LDAP_OPT_NETWORK_TIMEOUT (or LDAP_OPT_CONNECT_TIMEOUT)
+ option in the underlying LDAP client library, when available. This value
+ typically controls how long the LDAP client library will wait for the TCP
+ connection to the LDAP server to complete.</p>
- <p>On a busy server it is possible that many requests will try
- and access the same LDAP server connection simultaneously.
- Where an LDAP connection is in use, Apache will create a new
- connection alongside the original one. This ensures that the
- connection pool does not become a bottleneck.</p>
+ <p> If a connection is not successful with the timeout period, either an error will be
+ returned or the LDAP client library will attempt to connect to a secondary LDAP
+ server if one is specified (via a space-separated list of hostnames in the
+ <code class="directive"><a href="../mod/mod_authnz_ldap.html#authldapurl">AuthLDAPURL</a></code>).</p>
- <p>There is no need to manually enable connection pooling in
- the Apache configuration. Any module using this module for
- access to LDAP services will share the connection pool.</p>
+ <p>The default is 10 seconds, if the LDAP client library linked with the
+ server supports the LDAP_OPT_NETWORK_TIMEOUT option.</p>
- <p>LDAP connections can keep track of the ldap client
- credentials used when binding to an LDAP server. These
- credentials can be provided to LDAP servers that do not
- allow anonymous binds during referral chasing. To control
- this feature, see the
- <code class="directive"><a href="#ldapreferrals">LDAPReferrals</a></code> and
- <code class="directive"><a href="#ldapreferralhoplimit">LDAPReferralHopLimit</a></code>
- directives. By default, this feature is enabled.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cache" id="cache">LDAP Cache</a></h2>
+ <div class="note">LDAPConnectionTimeout is only available when the LDAP client library linked
+ with the server supports the LDAP_OPT_NETWORK_TIMEOUT
+ (or LDAP_OPT_CONNECT_TIMEOUT) option, and the ultimate behavior is
+ dictated entirely by the LDAP client library.
+ </div>
- <p>For improved performance, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> uses an aggressive
- caching strategy to minimize the number of times that the LDAP
- server must be contacted. Caching can easily double or triple
- the throughput of Apache when it is serving pages protected
- with mod_authnz_ldap. In addition, the load on the LDAP server
- will be significantly decreased.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPLibraryDebug" id="LDAPLibraryDebug">LDAPLibraryDebug</a> <a name="ldaplibrarydebug" id="ldaplibrarydebug">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable debugging in the LDAP SDK</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPLibraryDebug <var>7</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>disabled</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Turns on SDK-specific LDAP debug options that generally cause the LDAP
+ SDK to log verbose trace information to the main Apache error log.
+ The trace messages from the LDAP SDK provide gory details that
+ can be useful during debugging of connectivity problems with backend LDAP servers</p>
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> supports two types of LDAP caching during
- the search/bind phase with a <em>search/bind cache</em> and
- during the compare phase with two <em>operation
- caches</em>. Each LDAP URL that is used by the server has
- its own set of these three caches.</p>
+ <p>This option is only configurable when Apache HTTP Server is linked with
+ an LDAP SDK that implements <code>LDAP_OPT_DEBUG</code> or
+ <code>LDAP_OPT_DEBUG_LEVEL</code>, such as OpenLDAP (a value of 7 is verbose)
+ or Tivoli Directory Server (a value of 65535 is verbose).</p>
- <h3><a name="search-bind" id="search-bind">The Search/Bind Cache</a></h3>
- <p>The process of doing a search and then a bind is the
- most time-consuming aspect of LDAP operation, especially if
- the directory is large. The search/bind cache is used to
- cache all searches that resulted in successful binds.
- Negative results (<em>i.e.</em>, unsuccessful searches, or searches
- that did not result in a successful bind) are not cached.
- The rationale behind this decision is that connections with
- invalid credentials are only a tiny percentage of the total
- number of connections, so by not caching invalid
- credentials, the size of the cache is reduced.</p>
+ <div class="warning">
+ <p>The logged information will likely contain plaintext credentials being used or
+ validated by LDAP authentication, so care should be taken in protecting and purging
+ the error log when this directive is used.</p>
+ </div>
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> stores the username, the DN
- retrieved, the password used to bind, and the time of the bind
- in the cache. Whenever a new connection is initiated with the
- same username, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> compares the password
- of the new connection with the password in the cache. If the
- passwords match, and if the cached entry is not too old,
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> bypasses the search/bind phase.</p>
- <p>The search and bind cache is controlled with the <code class="directive"><a href="#ldapcacheentries">LDAPCacheEntries</a></code> and <code class="directive"><a href="#ldapcachettl">LDAPCacheTTL</a></code> directives.</p>
-
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPOpCacheEntries" id="LDAPOpCacheEntries">LDAPOpCacheEntries</a> <a name="ldapopcacheentries" id="ldapopcacheentries">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of entries used to cache LDAP compare
+operations</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPOpCacheEntries <var>number</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPOpCacheEntries 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>This specifies the number of entries <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>
+ will use to cache LDAP compare operations. The default is 1024
+ entries. Setting it to 0 disables operation caching.</p>
- <h3><a name="opcaches" id="opcaches">Operation Caches</a></h3>
- <p>During attribute and distinguished name comparison
- functions, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> uses two operation caches
- to cache the compare operations. The first compare cache is
- used to cache the results of compares done to test for LDAP
- group membership. The second compare cache is used to cache
- the results of comparisons done between distinguished
- names.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPOpCacheTTL" id="LDAPOpCacheTTL">LDAPOpCacheTTL</a> <a name="ldapopcachettl" id="ldapopcachettl">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Time that entries in the operation cache remain
+valid</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPOpCacheTTL <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPOpCacheTTL 600</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Specifies the time (in seconds) that entries in the
+ operation cache remain valid. The default is 600 seconds.</p>
- <p>Note that, when group membership is being checked, any sub-group
- comparison results are cached to speed future sub-group comparisons.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPReferralHopLimit" id="LDAPReferralHopLimit">LDAPReferralHopLimit</a> <a name="ldapreferralhoplimit" id="ldapreferralhoplimit">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum number of referral hops to chase before terminating an LDAP query.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPReferralHopLimit <var>number</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SDK dependent, typically between 5 and 10</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>This directive, if enabled by the <code class="directive">LDAPReferrals</code> directive,
+ limits the number of referral hops that are followed before terminating an
+ LDAP query.</p>
- <p>The behavior of both of these caches is controlled with
- the <code class="directive"><a href="#ldapopcacheentries">LDAPOpCacheEntries</a></code>
- and <code class="directive"><a href="#ldapopcachettl">LDAPOpCacheTTL</a></code>
- directives.</p>
-
+<div class="warning">
+<p> Support for this tunable is uncommon in LDAP SDKs.</p>
+</div>
- <h3><a name="monitoring" id="monitoring">Monitoring the Cache</a></h3>
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> has a content handler that allows
- administrators to monitor the cache performance. The name of
- the content handler is <code>ldap-status</code>, so the
- following directives could be used to access the
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache information:</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPReferrals" id="LDAPReferrals">LDAPReferrals</a> <a name="ldapreferrals" id="ldapreferrals">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable referral chasing during queries to the LDAP server.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPReferrals <var>On|Off|default</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPReferrals On</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The <var>default</var> parameter is available in Apache 2.4.7 and later</td></tr>
+</table>
+ <p>Some LDAP servers divide their directory among multiple domains and use referrals
+ to direct a client when a domain boundary is crossed. This is similar to a HTTP redirect.
+ LDAP client libraries may or may not chase referrals by default. This directive
+ explicitly configures the referral chasing in the underlying SDK.</p>
- <pre class="prettyprint lang-config"><Location /server/cache-info>
- SetHandler ldap-status
-</Location></pre>
+ <p><code class="directive">LDAPReferrals</code> takes the following values:</p>
+ <dl>
+ <dt>"on"</dt>
+ <dd> <p> When set to "on", the underlying SDK's referral chasing state
+ is enabled, <code class="directive">LDAPReferralHopLimit</code> is used to
+ override the SDK's hop limit, and an LDAP rebind callback is
+ registered.</p></dd>
+ <dt>"off"</dt>
+ <dd> <p> When set to "off", the underlying SDK's referral chasing state
+ is disabled completely.</p></dd>
+ <dt>"default"</dt>
+ <dd> <p> When set to "default", the underlying SDK's referral chasing state
+ is not changed, <code class="directive">LDAPReferralHopLimit</code> is not
+ used to overide the SDK's hop limit, and no LDAP rebind callback is
+ registered.</p></dd>
+ </dl>
- <p>By fetching the URL <code>http://servername/cache-info</code>,
- the administrator can get a status report of every cache that is used
- by <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache. Note that if Apache does not
- support shared memory, then each <code class="program"><a href="../programs/httpd.html">httpd</a></code> instance has its
- own cache, so reloading the URL will result in different
- information each time, depending on which <code class="program"><a href="../programs/httpd.html">httpd</a></code>
- instance processes the request.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingssltls" id="usingssltls">Using SSL/TLS</a></h2>
+ <p>The directive <code class="directive">LDAPReferralHopLimit</code> works in conjunction with
+ this directive to limit the number of referral hops to follow before terminating the LDAP query.
+ When referral processing is enabled by a value of "On", client credentials will be provided,
+ via a rebind callback, for any LDAP server requiring them.</p>
- <p>The ability to create an SSL and TLS connections to an LDAP server
- is defined by the directives
- <code class="directive"><a href="#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code>,
- <code class="directive"><a href="#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>
- and <code class="directive"><a href="#ldaptrustedmode">LDAPTrustedMode</a></code>.
- These directives specify the CA and optional client certificates to be used,
- as well as the type of encryption to be used on the connection (none, SSL or
- TLS/STARTTLS).</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPRetries" id="LDAPRetries">LDAPRetries</a> <a name="ldapretries" id="ldapretries">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the number of LDAP server retries.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPRetries <var>number-of-retries</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPRetries 3</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>The server will retry failed LDAP requests up to
+ <code class="directive">LDAPRetries</code> times. Setting this
+ directive to 0 disables retries.</p>
+ <p>LDAP errors such as timeouts and refused connections are retryable.</p>
- <pre class="prettyprint lang-config"># Establish an SSL LDAP connection on port 636. Requires that
-# mod_ldap and mod_authnz_ldap be loaded. Change the
-# "yourdomain.example.com" to match your domain.
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPRetryDelay" id="LDAPRetryDelay">LDAPRetryDelay</a> <a name="ldapretrydelay" id="ldapretrydelay">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the delay between LDAP server retries.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPRetryDelay <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPRetryDelay 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>If <code class="directive">LDAPRetryDelay</code> is set to a non-zero
+ value, the server will delay retrying an LDAP request for the
+ specified amount of time. Setting this directive to 0 will
+ result in any retry to occur without delay.</p>
-LDAPTrustedGlobalCert CA_DER /certs/certfile.der
+ <p>LDAP errors such as timeouts and refused connections are retryable.</p>
-<Location /ldap-status>
- SetHandler ldap-status
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPSharedCacheFile" id="LDAPSharedCacheFile">LDAPSharedCacheFile</a> <a name="ldapsharedcachefile" id="ldapsharedcachefile">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the shared memory cache file</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPSharedCacheFile <var>file-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Specifies the path of the shared memory cache file. If not set,
+ anonymous shared memory will be used if the platform supports it.</p>
- Require host yourdomain.example.com
+ <p>If <var>file-path</var> is not an absolute path, the location specified
+ will be relative to the value of
+ <code class="directive"><a href="../mod/core.html#defaultruntimedir">DefaultRuntimeDir</a></code>.</p>
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
- Require valid-user
-</Location></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPSharedCacheSize" id="LDAPSharedCacheSize">LDAPSharedCacheSize</a> <a name="ldapsharedcachesize" id="ldapsharedcachesize">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size in bytes of the shared-memory cache</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPSharedCacheSize <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPSharedCacheSize 500000</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Specifies the number of bytes to allocate for the shared
+ memory cache. The default is 500kb. If set to 0, shared memory
+ caching will not be used and every HTTPD process will create its
+ own cache.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPTimeout" id="LDAPTimeout">LDAPTimeout</a> <a name="ldaptimeout" id="ldaptimeout">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the timeout for LDAP search and bind operations, in seconds</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTimeout <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPTimeout 60</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Apache HTTP Server 2.3.5 and later</td></tr>
+</table>
+ <p>This directive configures the timeout for bind and search operations, as well as
+ the LDAP_OPT_TIMEOUT option in the underlying LDAP client library, when available.</p>
- <pre class="prettyprint lang-config"># Establish a TLS LDAP connection on port 389. Requires that
-# mod_ldap and mod_authnz_ldap be loaded. Change the
-# "yourdomain.example.com" to match your domain.
+ <p> If the timeout expires, httpd will retry in case an existing connection has
+ been silently dropped by a firewall. However, performance will be much better if
+ the firewall is configured to send TCP RST packets instead of silently dropping
+ packets.</p>
-LDAPTrustedGlobalCert CA_DER /certs/certfile.der
+ <div class="note">
+ <p>Timeouts for ldap compare operations requires an SDK with LDAP_OPT_TIMEOUT, such as OpenLDAP >= 2.4.4.</p>
+ </div>
-<Location /ldap-status>
- SetHandler ldap-status
- Require host yourdomain.example.com
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPTrustedClientCert" id="LDAPTrustedClientCert">LDAPTrustedClientCert</a> <a name="ldaptrustedclientcert" id="ldaptrustedclientcert">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the file containing or nickname referring to a per
+connection client certificate. Not all LDAP toolkits support per
+connection client certificates.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedClientCert <var>type</var> <var>directory-path/filename/nickname</var> <var>[password]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>It specifies the directory path, file name or nickname of a
+ per connection client certificate used when establishing an SSL
+ or TLS connection to an LDAP server. Different locations or
+ directories may have their own independent client certificate
+ settings. Some LDAP toolkits (notably Novell)
+ do not support per connection client certificates, and will throw an
+ error on LDAP server connection if you try to use this directive
+ (Use the LDAPTrustedGlobalCert directive instead for Novell client
+ certificates - See the SSL/TLS certificate guide above for details).
+ The type specifies the kind of certificate parameter being
+ set, depending on the LDAP toolkit being used. Supported types are:</p>
+ <ul>
+ <li>CA_DER - binary DER encoded CA certificate</li>
+ <li>CA_BASE64 - PEM encoded CA certificate</li>
+ <li>CERT_DER - binary DER encoded client certificate</li>
+ <li>CERT_BASE64 - PEM encoded client certificate</li>
+ <li>CERT_NICKNAME - Client certificate "nickname" (Netscape SDK)</li>
+ <li>KEY_DER - binary DER encoded private key</li>
+ <li>KEY_BASE64 - PEM encoded private key</li>
+ </ul>
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS
- Require valid-user
-</Location></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPTrustedGlobalCert" id="LDAPTrustedGlobalCert">LDAPTrustedGlobalCert</a> <a name="ldaptrustedglobalcert" id="ldaptrustedglobalcert">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the file or database containing global trusted
+Certificate Authority or global client certificates</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedGlobalCert <var>type</var> <var>directory-path/filename</var> <var>[password]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>It specifies the directory path and file name of the trusted CA
+ certificates and/or system wide client certificates <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>
+ should use when establishing an SSL or TLS connection to an LDAP
+ server. Note that all certificate information specified using this directive
+ is applied globally to the entire server installation. Some LDAP toolkits
+ (notably Novell) require all client certificates to be set globally using
+ this directive. Most other toolkits require clients certificates to be set
+ per Directory or per Location using LDAPTrustedClientCert. If you get this
+ wrong, an error may be logged when an attempt is made to contact the LDAP
+ server, or the connection may silently fail (See the SSL/TLS certificate
+ guide above for details).
+ The type specifies the kind of certificate parameter being
+ set, depending on the LDAP toolkit being used. Supported types are:</p>
+ <ul>
+ <li>CA_DER - binary DER encoded CA certificate</li>
+ <li>CA_BASE64 - PEM encoded CA certificate</li>
+ <li>CA_CERT7_DB - Netscape cert7.db CA certificate database file</li>
+ <li>CA_SECMOD - Netscape secmod database file</li>
+ <li>CERT_DER - binary DER encoded client certificate</li>
+ <li>CERT_BASE64 - PEM encoded client certificate</li>
+ <li>CERT_KEY3_DB - Netscape key3.db client certificate database file</li>
+ <li>CERT_NICKNAME - Client certificate "nickname" (Netscape SDK)</li>
+ <li>CERT_PFX - PKCS#12 encoded client certificate (Novell SDK)</li>
+ <li>KEY_DER - binary DER encoded private key</li>
+ <li>KEY_BASE64 - PEM encoded private key</li>
+ <li>KEY_PFX - PKCS#12 encoded private key (Novell SDK)</li>
+ </ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPTrustedMode" id="LDAPTrustedMode">LDAPTrustedMode</a> <a name="ldaptrustedmode" id="ldaptrustedmode">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the SSL/TLS mode to be used when connecting to an LDAP server.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedMode <var>type</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>The following modes are supported:</p>
+ <ul>
+ <li>NONE - no encryption</li>
+ <li>SSL - ldaps:// encryption on default port 636</li>
+ <li>TLS - STARTTLS encryption on default port 389</li>
+ </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="settingcerts" id="settingcerts">SSL/TLS Certificates</a></h2>
+ <p>Not all LDAP toolkits support all the above modes. An error message
+ will be logged at runtime if a mode is not supported, and the
+ connection to the LDAP server will fail.
+ </p>
- <p>The different LDAP SDKs have widely different methods of setting
- and handling both CA and client side certificates.</p>
+ <p>If an ldaps:// URL is specified, the mode becomes SSL and the setting
+ of LDAPTrustedMode is ignored.</p>
- <p>If you intend to use SSL or TLS, read this section CAREFULLY so as to
- understand the differences between configurations on the different LDAP
- toolkits supported.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LDAPVerifyServerCert" id="LDAPVerifyServerCert">LDAPVerifyServerCert</a> <a name="ldapverifyservercert" id="ldapverifyservercert">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Force server certificate verification</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPVerifyServerCert <var>On|Off</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPVerifyServerCert On</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Specifies whether to force the verification of a
+ server certificate when establishing an SSL connection to the
+ LDAP server.</p>
- <h3><a name="settingcerts-netscape" id="settingcerts-netscape">Netscape/Mozilla/iPlanet SDK</a></h3>
- <p>CA certificates are specified within a file called cert7.db.
- The SDK will not talk to any LDAP server whose certificate was
- not signed by a CA specified in this file. If
- client certificates are required, an optional key3.db file may
- be specified with an optional password. The secmod file can be
- specified if required. These files are in the same format as
- used by the Netscape Communicator or Mozilla web browsers. The easiest
- way to obtain these files is to grab them from your browser
- installation.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="exampleconfig" id="exampleconfig">Example Configuration</a></h2>
+ <p>The following is an example configuration that uses
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> to increase the performance of HTTP Basic
+ authentication provided by <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>.</p>
- <p>Client certificates are specified per connection using the
- LDAPTrustedClientCert directive by referring
- to the certificate "nickname". An optional password may be
- specified to unlock the certificate's private key.</p>
+ <pre class="prettyprint lang-config"># Enable the LDAP connection pool and shared
+# memory cache. Enable the LDAP cache status
+# handler. Requires that mod_ldap and mod_authnz_ldap
+# be loaded. Change the "yourdomain.example.com" to
+# match your domain.
- <p>The SDK supports SSL only. An attempt to use STARTTLS will cause
- an error when an attempt is made to contact the LDAP server at
- runtime.</p>
+LDAPSharedCacheSize 500000
+LDAPCacheEntries 1024
+LDAPCacheTTL 600
+LDAPOpCacheEntries 1024
+LDAPOpCacheTTL 600
- <pre class="prettyprint lang-config"># Specify a Netscape CA certificate file
-LDAPTrustedGlobalCert CA_CERT7_DB /certs/cert7.db
-# Specify an optional key3.db file for client certificate support
-LDAPTrustedGlobalCert CERT_KEY3_DB /certs/key3.db
-# Specify the secmod file if required
-LDAPTrustedGlobalCert CA_SECMOD /certs/secmod
<Location /ldap-status>
SetHandler ldap-status
AuthType Basic
AuthName "LDAP Protected"
AuthBasicProvider ldap
- LDAPTrustedClientCert CERT_NICKNAME <nickname> [password]
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one
Require valid-user
</Location></pre>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="pool" id="pool">LDAP Connection Pool</a></h2>
-
+ <p>LDAP connections are pooled from request to request. This
+ allows the LDAP server to remain connected and bound ready for
+ the next request, without the need to unbind/connect/rebind.
+ The performance advantages are similar to the effect of HTTP
+ keepalives.</p>
- <h3><a name="settingcerts-novell" id="settingcerts-novell">Novell SDK</a></h3>
+ <p>On a busy server it is possible that many requests will try
+ and access the same LDAP server connection simultaneously.
+ Where an LDAP connection is in use, Apache will create a new
+ connection alongside the original one. This ensures that the
+ connection pool does not become a bottleneck.</p>
- <p>One or more CA certificates must be specified for the Novell
- SDK to work correctly. These certificates can be specified as
- binary DER or Base64 (PEM) encoded files.</p>
+ <p>There is no need to manually enable connection pooling in
+ the Apache configuration. Any module using this module for
+ access to LDAP services will share the connection pool.</p>
- <p>Note: Client certificates are specified globally rather than per
- connection, and so must be specified with the LDAPTrustedGlobalCert
- directive as below. Trying to set client certificates via the
- LDAPTrustedClientCert directive will cause an error to be logged
- when an attempt is made to connect to the LDAP server..</p>
+ <p>LDAP connections can keep track of the ldap client
+ credentials used when binding to an LDAP server. These
+ credentials can be provided to LDAP servers that do not
+ allow anonymous binds during referral chasing. To control
+ this feature, see the
+ <code class="directive"><a href="#ldapreferrals">LDAPReferrals</a></code> and
+ <code class="directive"><a href="#ldapreferralhoplimit">LDAPReferralHopLimit</a></code>
+ directives. By default, this feature is enabled.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="cache" id="cache">LDAP Cache</a></h2>
- <p>The SDK supports both SSL and STARTTLS, set using the
- LDAPTrustedMode parameter. If an ldaps:// URL is specified,
- SSL mode is forced, override this directive.</p>
+ <p>For improved performance, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> uses an aggressive
+ caching strategy to minimize the number of times that the LDAP
+ server must be contacted. Caching can easily double or triple
+ the throughput of Apache when it is serving pages protected
+ with mod_authnz_ldap. In addition, the load on the LDAP server
+ will be significantly decreased.</p>
- <pre class="prettyprint lang-config"># Specify two CA certificate files
-LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
-LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
-# Specify a client certificate file and key
-LDAPTrustedGlobalCert CERT_BASE64 /certs/cert1.pem
-LDAPTrustedGlobalCert KEY_BASE64 /certs/key1.pem [password]
-# Do not use this directive, as it will throw an error
-#LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem</pre>
+ <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> supports two types of LDAP caching during
+ the search/bind phase with a <em>search/bind cache</em> and
+ during the compare phase with two <em>operation
+ caches</em>. Each LDAP URL that is used by the server has
+ its own set of these three caches.</p>
+
+ <h3><a name="search-bind" id="search-bind">The Search/Bind Cache</a></h3>
+ <p>The process of doing a search and then a bind is the
+ most time-consuming aspect of LDAP operation, especially if
+ the directory is large. The search/bind cache is used to
+ cache all searches that resulted in successful binds.
+ Negative results (<em>i.e.</em>, unsuccessful searches, or searches
+ that did not result in a successful bind) are not cached.
+ The rationale behind this decision is that connections with
+ invalid credentials are only a tiny percentage of the total
+ number of connections, so by not caching invalid
+ credentials, the size of the cache is reduced.</p>
+ <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> stores the username, the DN
+ retrieved, the password used to bind, and the time of the bind
+ in the cache. Whenever a new connection is initiated with the
+ same username, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> compares the password
+ of the new connection with the password in the cache. If the
+ passwords match, and if the cached entry is not too old,
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> bypasses the search/bind phase.</p>
+ <p>The search and bind cache is controlled with the <code class="directive"><a href="#ldapcacheentries">LDAPCacheEntries</a></code> and <code class="directive"><a href="#ldapcachettl">LDAPCacheTTL</a></code> directives.</p>
- <h3><a name="settingcerts-openldap" id="settingcerts-openldap">OpenLDAP SDK</a></h3>
+ <h3><a name="opcaches" id="opcaches">Operation Caches</a></h3>
+ <p>During attribute and distinguished name comparison
+ functions, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> uses two operation caches
+ to cache the compare operations. The first compare cache is
+ used to cache the results of compares done to test for LDAP
+ group membership. The second compare cache is used to cache
+ the results of comparisons done between distinguished
+ names.</p>
- <p>One or more CA certificates must be specified for the OpenLDAP
- SDK to work correctly. These certificates can be specified as
- binary DER or Base64 (PEM) encoded files.</p>
+ <p>Note that, when group membership is being checked, any sub-group
+ comparison results are cached to speed future sub-group comparisons.</p>
- <p>Both CA and client certificates may be specified globally
- (LDAPTrustedGlobalCert) or per-connection (LDAPTrustedClientCert).
- When any settings are specified per-connection, the global
- settings are superceded.</p>
+ <p>The behavior of both of these caches is controlled with
+ the <code class="directive"><a href="#ldapopcacheentries">LDAPOpCacheEntries</a></code>
+ and <code class="directive"><a href="#ldapopcachettl">LDAPOpCacheTTL</a></code>
+ directives.</p>
+
- <p>The documentation for the SDK claims to support both SSL and
- STARTTLS, however STARTTLS does not seem to work on all versions
- of the SDK. The SSL/TLS mode can be set using the
- LDAPTrustedMode parameter. If an ldaps:// URL is specified,
- SSL mode is forced. The OpenLDAP documentation notes that SSL
- (ldaps://) support has been deprecated to be replaced with TLS,
- although the SSL functionality still works.</p>
+ <h3><a name="monitoring" id="monitoring">Monitoring the Cache</a></h3>
+ <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> has a content handler that allows
+ administrators to monitor the cache performance. The name of
+ the content handler is <code>ldap-status</code>, so the
+ following directives could be used to access the
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache information:</p>
- <pre class="prettyprint lang-config"># Specify two CA certificate files
-LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
-LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
-<Location /ldap-status>
+ <pre class="prettyprint lang-config"><Location /server/cache-info>
SetHandler ldap-status
-
- Require host yourdomain.example.com
-
- LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem
- LDAPTrustedClientCert KEY_BASE64 /certs/key1.pem
- # CA certs respecified due to per-directory client certs
- LDAPTrustedClientCert CA_DER /certs/cacert1.der
- LDAPTrustedClientCert CA_BASE64 /certs/cacert2.pem
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
- Require valid-user
</Location></pre>
+ <p>By fetching the URL <code>http://servername/cache-info</code>,
+ the administrator can get a status report of every cache that is used
+ by <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache. Note that if Apache does not
+ support shared memory, then each <code class="program"><a href="../programs/httpd.html">httpd</a></code> instance has its
+ own cache, so reloading the URL will result in different
+ information each time, depending on which <code class="program"><a href="../programs/httpd.html">httpd</a></code>
+ instance processes the request.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usingssltls" id="usingssltls">Using SSL/TLS</a></h2>
- <h3><a name="settingcerts-solaris" id="settingcerts-solaris">Solaris SDK</a></h3>
-
- <p>SSL/TLS for the native Solaris LDAP libraries is not yet
- supported. If required, install and use the OpenLDAP libraries
- instead.</p>
-
-
+ <p>The ability to create an SSL and TLS connections to an LDAP server
+ is defined by the directives
+ <code class="directive"><a href="#ldaptrustedglobalcert">LDAPTrustedGlobalCert</a></code>,
+ <code class="directive"><a href="#ldaptrustedclientcert">LDAPTrustedClientCert</a></code>
+ and <code class="directive"><a href="#ldaptrustedmode">LDAPTrustedMode</a></code>.
+ These directives specify the CA and optional client certificates to be used,
+ as well as the type of encryption to be used on the connection (none, SSL or
+ TLS/STARTTLS).</p>
- <h3><a name="settingcerts-microsoft" id="settingcerts-microsoft">Microsoft SDK</a></h3>
+ <pre class="prettyprint lang-config"># Establish an SSL LDAP connection on port 636. Requires that
+# mod_ldap and mod_authnz_ldap be loaded. Change the
+# "yourdomain.example.com" to match your domain.
- <p>SSL/TLS certificate configuration for the native Microsoft
- LDAP libraries is done inside the system registry, and no
- configuration directives are required.</p>
+LDAPTrustedGlobalCert CA_DER /certs/certfile.der
- <p>Both SSL and TLS are supported by using the ldaps:// URL
- format, or by using the LDAPTrustedMode directive accordingly.</p>
+<Location /ldap-status>
+ SetHandler ldap-status
- <p>Note: The status of support for client certificates is not yet known
- for this toolkit.</p>
+ Require host yourdomain.example.com
-
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ Require valid-user
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPCacheEntries" id="LDAPCacheEntries">LDAPCacheEntries</a> <a name="ldapcacheentries" id="ldapcacheentries">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of entries in the primary LDAP cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPCacheEntries <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPCacheEntries 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the maximum size of the primary LDAP cache. This
- cache contains successful search/binds. Set it to 0 to turn off
- search/bind caching. The default size is 1024 cached
- searches.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPCacheTTL" id="LDAPCacheTTL">LDAPCacheTTL</a> <a name="ldapcachettl" id="ldapcachettl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Time that cached items remain valid</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPCacheTTL <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPCacheTTL 600</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the time (in seconds) that an item in the
- search/bind cache remains valid. The default is 600 seconds (10
- minutes).</p>
+ <pre class="prettyprint lang-config"># Establish a TLS LDAP connection on port 389. Requires that
+# mod_ldap and mod_authnz_ldap be loaded. Change the
+# "yourdomain.example.com" to match your domain.
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPConnectionPoolTTL" id="LDAPConnectionPoolTTL">LDAPConnectionPoolTTL</a> <a name="ldapconnectionpoolttl" id="ldapconnectionpoolttl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Discard backend connections that have been sitting in the connection pool too long</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPConnectionPoolTTL <var>n</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPConnectionPoolTTL -1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Apache HTTP Server 2.3.12 and later</td></tr>
-</table>
- <p>Specifies the maximum age, in seconds, that a pooled LDAP connection can remain idle
- and still be available for use. Connections are cleaned up when they are next needed,
- not asynchronously.</p>
+LDAPTrustedGlobalCert CA_DER /certs/certfile.der
- <p>A setting of 0 causes connections to never be saved in the backend
- connection pool. The default value of -1, and any other negative value,
- allows connections of any age to be reused.</p>
+<Location /ldap-status>
+ SetHandler ldap-status
- <p>For performance reasons, the reference time used by this directive is
- based on when the LDAP connection is returned to the pool, not the time
- of the last successful I/O with the LDAP server. </p>
+ Require host yourdomain.example.com
- <p>Since 2.4.10, new measures are in place to avoid the reference time
- from being inflated by cache hits or slow requests. First, the reference
- time is not updated if no backend LDAP conncetions were needed. Second,
- the reference time uses the time the HTTP request was received instead
- of the time the request is completed.</p>
-
- <div class="note"><p>This timeout defaults to units of seconds, but accepts
- suffixes for milliseconds (ms), minutes (min), and hours (h).
- </p></div>
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS
+ Require valid-user
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPConnectionTimeout" id="LDAPConnectionTimeout">LDAPConnectionTimeout</a> <a name="ldapconnectiontimeout" id="ldapconnectiontimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the socket connection timeout in seconds</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPConnectionTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>This directive configures the LDAP_OPT_NETWORK_TIMEOUT (or LDAP_OPT_CONNECT_TIMEOUT)
- option in the underlying LDAP client library, when available. This value
- typically controls how long the LDAP client library will wait for the TCP
- connection to the LDAP server to complete.</p>
- <p> If a connection is not successful with the timeout period, either an error will be
- returned or the LDAP client library will attempt to connect to a secondary LDAP
- server if one is specified (via a space-separated list of hostnames in the
- <code class="directive"><a href="../mod/mod_authnz_ldap.html#authldapurl">AuthLDAPURL</a></code>).</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="settingcerts" id="settingcerts">SSL/TLS Certificates</a></h2>
- <p>The default is 10 seconds, if the LDAP client library linked with the
- server supports the LDAP_OPT_NETWORK_TIMEOUT option.</p>
+ <p>The different LDAP SDKs have widely different methods of setting
+ and handling both CA and client side certificates.</p>
- <div class="note">LDAPConnectionTimeout is only available when the LDAP client library linked
- with the server supports the LDAP_OPT_NETWORK_TIMEOUT
- (or LDAP_OPT_CONNECT_TIMEOUT) option, and the ultimate behavior is
- dictated entirely by the LDAP client library.
- </div>
+ <p>If you intend to use SSL or TLS, read this section CAREFULLY so as to
+ understand the differences between configurations on the different LDAP
+ toolkits supported.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPLibraryDebug" id="LDAPLibraryDebug">LDAPLibraryDebug</a> <a name="ldaplibrarydebug" id="ldaplibrarydebug">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable debugging in the LDAP SDK</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPLibraryDebug <var>7</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>disabled</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Turns on SDK-specific LDAP debug options that generally cause the LDAP
- SDK to log verbose trace information to the main Apache error log.
- The trace messages from the LDAP SDK provide gory details that
- can be useful during debugging of connectivity problems with backend LDAP servers</p>
+ <h3><a name="settingcerts-netscape" id="settingcerts-netscape">Netscape/Mozilla/iPlanet SDK</a></h3>
+ <p>CA certificates are specified within a file called cert7.db.
+ The SDK will not talk to any LDAP server whose certificate was
+ not signed by a CA specified in this file. If
+ client certificates are required, an optional key3.db file may
+ be specified with an optional password. The secmod file can be
+ specified if required. These files are in the same format as
+ used by the Netscape Communicator or Mozilla web browsers. The easiest
+ way to obtain these files is to grab them from your browser
+ installation.</p>
- <p>This option is only configurable when Apache HTTP Server is linked with
- an LDAP SDK that implements <code>LDAP_OPT_DEBUG</code> or
- <code>LDAP_OPT_DEBUG_LEVEL</code>, such as OpenLDAP (a value of 7 is verbose)
- or Tivoli Directory Server (a value of 65535 is verbose).</p>
+ <p>Client certificates are specified per connection using the
+ LDAPTrustedClientCert directive by referring
+ to the certificate "nickname". An optional password may be
+ specified to unlock the certificate's private key.</p>
- <div class="warning">
- <p>The logged information will likely contain plaintext credentials being used or
- validated by LDAP authentication, so care should be taken in protecting and purging
- the error log when this directive is used.</p>
- </div>
+ <p>The SDK supports SSL only. An attempt to use STARTTLS will cause
+ an error when an attempt is made to contact the LDAP server at
+ runtime.</p>
+ <pre class="prettyprint lang-config"># Specify a Netscape CA certificate file
+LDAPTrustedGlobalCert CA_CERT7_DB /certs/cert7.db
+# Specify an optional key3.db file for client certificate support
+LDAPTrustedGlobalCert CERT_KEY3_DB /certs/key3.db
+# Specify the secmod file if required
+LDAPTrustedGlobalCert CA_SECMOD /certs/secmod
+<Location /ldap-status>
+ SetHandler ldap-status
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPOpCacheEntries" id="LDAPOpCacheEntries">LDAPOpCacheEntries</a> <a name="ldapopcacheentries" id="ldapopcacheentries">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of entries used to cache LDAP compare
-operations</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPOpCacheEntries <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPOpCacheEntries 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>This specifies the number of entries <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>
- will use to cache LDAP compare operations. The default is 1024
- entries. Setting it to 0 disables operation caching.</p>
+ Require host yourdomain.example.com
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPOpCacheTTL" id="LDAPOpCacheTTL">LDAPOpCacheTTL</a> <a name="ldapopcachettl" id="ldapopcachettl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Time that entries in the operation cache remain
-valid</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPOpCacheTTL <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPOpCacheTTL 600</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the time (in seconds) that entries in the
- operation cache remain valid. The default is 600 seconds.</p>
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ LDAPTrustedClientCert CERT_NICKNAME <nickname> [password]
+ AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ Require valid-user
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPReferralHopLimit" id="LDAPReferralHopLimit">LDAPReferralHopLimit</a> <a name="ldapreferralhoplimit" id="ldapreferralhoplimit">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum number of referral hops to chase before terminating an LDAP query.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPReferralHopLimit <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SDK dependent, typically between 5 and 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>This directive, if enabled by the <code class="directive">LDAPReferrals</code> directive,
- limits the number of referral hops that are followed before terminating an
- LDAP query.</p>
-<div class="warning">
-<p> Support for this tunable is uncommon in LDAP SDKs.</p>
-</div>
+
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPReferrals" id="LDAPReferrals">LDAPReferrals</a> <a name="ldapreferrals" id="ldapreferrals">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable referral chasing during queries to the LDAP server.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPReferrals <var>On|Off|default</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPReferrals On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The <var>default</var> parameter is available in Apache 2.4.7 and later</td></tr>
-</table>
- <p>Some LDAP servers divide their directory among multiple domains and use referrals
- to direct a client when a domain boundary is crossed. This is similar to a HTTP redirect.
- LDAP client libraries may or may not chase referrals by default. This directive
- explicitly configures the referral chasing in the underlying SDK.</p>
+ <h3><a name="settingcerts-novell" id="settingcerts-novell">Novell SDK</a></h3>
+ <p>One or more CA certificates must be specified for the Novell
+ SDK to work correctly. These certificates can be specified as
+ binary DER or Base64 (PEM) encoded files.</p>
- <p><code class="directive">LDAPReferrals</code> takes the following values:</p>
- <dl>
- <dt>"on"</dt>
- <dd> <p> When set to "on", the underlying SDK's referral chasing state
- is enabled, <code class="directive">LDAPReferralHopLimit</code> is used to
- override the SDK's hop limit, and an LDAP rebind callback is
- registered.</p></dd>
- <dt>"off"</dt>
- <dd> <p> When set to "off", the underlying SDK's referral chasing state
- is disabled completely.</p></dd>
- <dt>"default"</dt>
- <dd> <p> When set to "default", the underlying SDK's referral chasing state
- is not changed, <code class="directive">LDAPReferralHopLimit</code> is not
- used to overide the SDK's hop limit, and no LDAP rebind callback is
- registered.</p></dd>
- </dl>
+ <p>Note: Client certificates are specified globally rather than per
+ connection, and so must be specified with the LDAPTrustedGlobalCert
+ directive as below. Trying to set client certificates via the
+ LDAPTrustedClientCert directive will cause an error to be logged
+ when an attempt is made to connect to the LDAP server..</p>
- <p>The directive <code class="directive">LDAPReferralHopLimit</code> works in conjunction with
- this directive to limit the number of referral hops to follow before terminating the LDAP query.
- When referral processing is enabled by a value of "On", client credentials will be provided,
- via a rebind callback, for any LDAP server requiring them.</p>
+ <p>The SDK supports both SSL and STARTTLS, set using the
+ LDAPTrustedMode parameter. If an ldaps:// URL is specified,
+ SSL mode is forced, override this directive.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPRetries" id="LDAPRetries">LDAPRetries</a> <a name="ldapretries" id="ldapretries">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the number of LDAP server retries.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPRetries <var>number-of-retries</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPRetries 3</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>The server will retry failed LDAP requests up to
- <code class="directive">LDAPRetries</code> times. Setting this
- directive to 0 disables retries.</p>
- <p>LDAP errors such as timeouts and refused connections are retryable.</p>
+ <pre class="prettyprint lang-config"># Specify two CA certificate files
+LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
+LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
+# Specify a client certificate file and key
+LDAPTrustedGlobalCert CERT_BASE64 /certs/cert1.pem
+LDAPTrustedGlobalCert KEY_BASE64 /certs/key1.pem [password]
+# Do not use this directive, as it will throw an error
+#LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPRetryDelay" id="LDAPRetryDelay">LDAPRetryDelay</a> <a name="ldapretrydelay" id="ldapretrydelay">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the delay between LDAP server retries.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPRetryDelay <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPRetryDelay 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>If <code class="directive">LDAPRetryDelay</code> is set to a non-zero
- value, the server will delay retrying an LDAP request for the
- specified amount of time. Setting this directive to 0 will
- result in any retry to occur without delay.</p>
- <p>LDAP errors such as timeouts and refused connections are retryable.</p>
+
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPSharedCacheFile" id="LDAPSharedCacheFile">LDAPSharedCacheFile</a> <a name="ldapsharedcachefile" id="ldapsharedcachefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the shared memory cache file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPSharedCacheFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the path of the shared memory cache file. If not set,
- anonymous shared memory will be used if the platform supports it.</p>
+ <h3><a name="settingcerts-openldap" id="settingcerts-openldap">OpenLDAP SDK</a></h3>
- <p>If <var>file-path</var> is not an absolute path, the location specified
- will be relative to the value of
- <code class="directive"><a href="../mod/core.html#defaultruntimedir">DefaultRuntimeDir</a></code>.</p>
+ <p>One or more CA certificates must be specified for the OpenLDAP
+ SDK to work correctly. These certificates can be specified as
+ binary DER or Base64 (PEM) encoded files.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPSharedCacheSize" id="LDAPSharedCacheSize">LDAPSharedCacheSize</a> <a name="ldapsharedcachesize" id="ldapsharedcachesize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size in bytes of the shared-memory cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPSharedCacheSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPSharedCacheSize 500000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the number of bytes to allocate for the shared
- memory cache. The default is 500kb. If set to 0, shared memory
- caching will not be used and every HTTPD process will create its
- own cache.</p>
+ <p>Both CA and client certificates may be specified globally
+ (LDAPTrustedGlobalCert) or per-connection (LDAPTrustedClientCert).
+ When any settings are specified per-connection, the global
+ settings are superceded.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPTimeout" id="LDAPTimeout">LDAPTimeout</a> <a name="ldaptimeout" id="ldaptimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the timeout for LDAP search and bind operations, in seconds</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPTimeout 60</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Apache HTTP Server 2.3.5 and later</td></tr>
-</table>
- <p>This directive configures the timeout for bind and search operations, as well as
- the LDAP_OPT_TIMEOUT option in the underlying LDAP client library, when available.</p>
+ <p>The documentation for the SDK claims to support both SSL and
+ STARTTLS, however STARTTLS does not seem to work on all versions
+ of the SDK. The SSL/TLS mode can be set using the
+ LDAPTrustedMode parameter. If an ldaps:// URL is specified,
+ SSL mode is forced. The OpenLDAP documentation notes that SSL
+ (ldaps://) support has been deprecated to be replaced with TLS,
+ although the SSL functionality still works.</p>
- <p> If the timeout expires, httpd will retry in case an existing connection has
- been silently dropped by a firewall. However, performance will be much better if
- the firewall is configured to send TCP RST packets instead of silently dropping
- packets.</p>
+ <pre class="prettyprint lang-config"># Specify two CA certificate files
+LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
+LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
+<Location /ldap-status>
+ SetHandler ldap-status
- <div class="note">
- <p>Timeouts for ldap compare operations requires an SDK with LDAP_OPT_TIMEOUT, such as OpenLDAP >= 2.4.4.</p>
- </div>
+ Require host yourdomain.example.com
+
+ LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem
+ LDAPTrustedClientCert KEY_BASE64 /certs/key1.pem
+ # CA certs respecified due to per-directory client certs
+ LDAPTrustedClientCert CA_DER /certs/cacert1.der
+ LDAPTrustedClientCert CA_BASE64 /certs/cacert2.pem
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ Require valid-user
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPTrustedClientCert" id="LDAPTrustedClientCert">LDAPTrustedClientCert</a> <a name="ldaptrustedclientcert" id="ldaptrustedclientcert">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the file containing or nickname referring to a per
-connection client certificate. Not all LDAP toolkits support per
-connection client certificates.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedClientCert <var>type</var> <var>directory-path/filename/nickname</var> <var>[password]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>It specifies the directory path, file name or nickname of a
- per connection client certificate used when establishing an SSL
- or TLS connection to an LDAP server. Different locations or
- directories may have their own independent client certificate
- settings. Some LDAP toolkits (notably Novell)
- do not support per connection client certificates, and will throw an
- error on LDAP server connection if you try to use this directive
- (Use the LDAPTrustedGlobalCert directive instead for Novell client
- certificates - See the SSL/TLS certificate guide above for details).
- The type specifies the kind of certificate parameter being
- set, depending on the LDAP toolkit being used. Supported types are:</p>
- <ul>
- <li>CA_DER - binary DER encoded CA certificate</li>
- <li>CA_BASE64 - PEM encoded CA certificate</li>
- <li>CERT_DER - binary DER encoded client certificate</li>
- <li>CERT_BASE64 - PEM encoded client certificate</li>
- <li>CERT_NICKNAME - Client certificate "nickname" (Netscape SDK)</li>
- <li>KEY_DER - binary DER encoded private key</li>
- <li>KEY_BASE64 - PEM encoded private key</li>
- </ul>
+
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPTrustedGlobalCert" id="LDAPTrustedGlobalCert">LDAPTrustedGlobalCert</a> <a name="ldaptrustedglobalcert" id="ldaptrustedglobalcert">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the file or database containing global trusted
-Certificate Authority or global client certificates</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedGlobalCert <var>type</var> <var>directory-path/filename</var> <var>[password]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>It specifies the directory path and file name of the trusted CA
- certificates and/or system wide client certificates <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>
- should use when establishing an SSL or TLS connection to an LDAP
- server. Note that all certificate information specified using this directive
- is applied globally to the entire server installation. Some LDAP toolkits
- (notably Novell) require all client certificates to be set globally using
- this directive. Most other toolkits require clients certificates to be set
- per Directory or per Location using LDAPTrustedClientCert. If you get this
- wrong, an error may be logged when an attempt is made to contact the LDAP
- server, or the connection may silently fail (See the SSL/TLS certificate
- guide above for details).
- The type specifies the kind of certificate parameter being
- set, depending on the LDAP toolkit being used. Supported types are:</p>
- <ul>
- <li>CA_DER - binary DER encoded CA certificate</li>
- <li>CA_BASE64 - PEM encoded CA certificate</li>
- <li>CA_CERT7_DB - Netscape cert7.db CA certificate database file</li>
- <li>CA_SECMOD - Netscape secmod database file</li>
- <li>CERT_DER - binary DER encoded client certificate</li>
- <li>CERT_BASE64 - PEM encoded client certificate</li>
- <li>CERT_KEY3_DB - Netscape key3.db client certificate database file</li>
- <li>CERT_NICKNAME - Client certificate "nickname" (Netscape SDK)</li>
- <li>CERT_PFX - PKCS#12 encoded client certificate (Novell SDK)</li>
- <li>KEY_DER - binary DER encoded private key</li>
- <li>KEY_BASE64 - PEM encoded private key</li>
- <li>KEY_PFX - PKCS#12 encoded private key (Novell SDK)</li>
- </ul>
+ <h3><a name="settingcerts-solaris" id="settingcerts-solaris">Solaris SDK</a></h3>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPTrustedMode" id="LDAPTrustedMode">LDAPTrustedMode</a> <a name="ldaptrustedmode" id="ldaptrustedmode">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the SSL/TLS mode to be used when connecting to an LDAP server.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedMode <var>type</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>The following modes are supported:</p>
- <ul>
- <li>NONE - no encryption</li>
- <li>SSL - ldaps:// encryption on default port 636</li>
- <li>TLS - STARTTLS encryption on default port 389</li>
- </ul>
+ <p>SSL/TLS for the native Solaris LDAP libraries is not yet
+ supported. If required, install and use the OpenLDAP libraries
+ instead.</p>
- <p>Not all LDAP toolkits support all the above modes. An error message
- will be logged at runtime if a mode is not supported, and the
- connection to the LDAP server will fail.
- </p>
+
- <p>If an ldaps:// URL is specified, the mode becomes SSL and the setting
- of LDAPTrustedMode is ignored.</p>
+ <h3><a name="settingcerts-microsoft" id="settingcerts-microsoft">Microsoft SDK</a></h3>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPVerifyServerCert" id="LDAPVerifyServerCert">LDAPVerifyServerCert</a> <a name="ldapverifyservercert" id="ldapverifyservercert">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Force server certificate verification</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPVerifyServerCert <var>On|Off</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPVerifyServerCert On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies whether to force the verification of a
- server certificate when establishing an SSL connection to the
- LDAP server.</p>
+ <p>SSL/TLS certificate configuration for the native Microsoft
+ LDAP libraries is done inside the system registry, and no
+ configuration directives are required.</p>
+
+ <p>Both SSL and TLS are supported by using the ldaps:// URL
+ format, or by using the LDAPTrustedMode directive accordingly.</p>
+
+ <p>Note: The status of support for client certificates is not yet known
+ for this toolkit.</p>
+
+
</div>
</div>
<li><img alt="" src="../images/down.gif" /> <a href="#settingcerts">Certificats SSL/TLS</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exampleconfig" id="exampleconfig">Exemple de configuration</a></h2>
- <p>Ce qui suit est un exemple de configuration qui utilise
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> pour améliorer les performances de
- l'authentification HTTP de base fournie par
- <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>.</p>
-
- <pre class="prettyprint lang-config"># Active la conservation des connexions LDAP et le cache partagé en
-# mémoire. Active le gestionnaire de statut du cache LDAP.
-# Nécessite le chargement de mod_ldap et de mod_authnz_ldap.
-# Remplacez "votre-domaine.example.com" par le nom de votre
-# domaine.
+<div class="directive-section"><h2><a name="ldapcacheentries" id="ldapcacheentries">Directive</a> <a name="LDAPCacheEntries" id="LDAPCacheEntries">LDAPCacheEntries</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximum d'entrées dans le cache LDAP
+primaire</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPCacheEntries <var>nombre</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPCacheEntries 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier la taille maximale du cache
+ LDAP primaire. Ce cache contient les résultats de
+ recherche/identification positifs. Définissez-la à 0 pour désactiver
+ la mise en cache des résultats de recherche/identification positifs.
+ La taille par défaut est de 1024 recherches en cache.</p>
-LDAPSharedCacheSize 500000
-LDAPCacheEntries 1024
-LDAPCacheTTL 600
-LDAPOpCacheEntries 1024
-LDAPOpCacheTTL 600
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapcachettl" id="ldapcachettl">Directive</a> <a name="LDAPCacheTTL" id="LDAPCacheTTL">LDAPCacheTTL</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée pendant laquelle les entrées du cache restent
+valides.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPCacheTTL <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPCacheTTL 600</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier la durée (en secondes)
+ pendant laquelle une entrée du cache de recherche/identification
+ reste valide. La valeur par défaut est de 600 secondes (10
+ minutes).</p>
-<Location /ldap-status>
- SetHandler ldap-status
-
- Require host yourdomain.example.com
-
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one
- Require valid-user
-</Location></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapconnectionpoolttl" id="ldapconnectionpoolttl">Directive</a> <a name="LDAPConnectionPoolTTL" id="LDAPConnectionPoolTTL">LDAPConnectionPoolTTL</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Désactive les connexions d'arrière-plan qui sont restées
+inactives trop longtemps au sein du jeu de connexions.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPConnectionPoolTTL <var>n</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPConnectionPoolTTL -1</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.12 du serveur HTTP
+Apache</td></tr>
+</table>
+ <p>Cette directive permet de spécifier la durée maximale, en
+ secondes, pendant laquelle une connexion LDAP du jeu de connexions
+ peut demeurer inactive, mais rester quand-même disponible pour une
+ utilisation éventuelle. Le jeu de connexions est nettoyé au fur et à
+ mesure des besoins, de manière non asynchrone.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pool" id="pool">Conservation des connexions LDAP</a></h2>
+ <p>Si cette directive est définie à 0, les connexions ne sont jamais
+ sauvegardées dans le jeu de connexions d'arrière-plan. Avec la
+ valeur par défaut -1, ou toute autre valeur négative, les connexions
+ peuvent être réutilisées sans limite de durée.</p>
- <p>Les connexions LDAP sont conservées de requête en requête. Ceci
- permet de rester connecté et identifié au serveur LDAP, ce dernier
- étant ainsi prêt pour la prochaine requête, sans avoir à se
- déconnecter, reconnecter et réidentifier. Le gain en performances
- est similaire à celui des connexions persistantes (keepalives)
- HTTP.</p>
+ <p>Dans le but d'améliorer les performances, le temps de référence
+ qu'utilise cette directive correspond au moment où la connexion LDAP
+ est enregistrée ou remise dans le jeu de connexions, et non au
+ moment du dernier échange réussi avec le serveur LDAP.</p>
- <p>Sur un serveur très sollicité, il est possible que de nombreuses
- requêtes tentent d'accéder simultanément à la même connexion au
- serveur LDAP. Lorsqu'une connexion LDAP est utilisée, Apache en crée
- une deuxième en parallèle à la première, ce qui permet d'éviter que
- le système de conservation des connexions ne devienne un goulot
- d'étranglement.</p>
+ <p>La version 2.4.10 a introduit de nouvelles mesures permettant
+ d'éviter une augmentation excessive du temps de référence due à des
+ correspondances positives dans le cache ou des requêtes lentes. A
+ cet effet, le temps de référence n'est pas réactualisé si aucune
+ connexion LDAP d'arrière-plan n'est requise ; d'autre part, le temps
+ de référence se base sur le moment où la requête HTTP est reçue, et
+ non sur le moment où la requête a été traitée.</p>
- <p>Il n'est pas nécessaire d'activer explicitement la conservation
- des connexions dans la configuration d'Apache. Tout module utilisant
- le module ldap pour accéder aux services LDAP partagera le jeu de
- connexions.</p>
+ <div class="note"><p>Cette durée de vie s'exprime par défaut en secondes, mais
+ il est possible d'utiliser d'autres unités en ajoutant un suffixe :
+ millisecondes (ms), minutes (min), ou heures (h).
+ </p></div>
- <p>Les connexions LDAP peuvent garder la trace des données
- d'identification du client ldap utilisées pour l'identification
- auprès du serveur LDAP. Ces données peuvent être fournies aux
- serveurs LDAP qui ne permettent pas les connexions anonymes au cours
- lors des tentatives de sauts vers des serveurs alternatifs. Pour
- contrôler cette fonctionnalité, voir les directives <code class="directive"><a href="#ldapreferrals">LDAPReferrals</a></code> et <code class="directive"><a href="#ldapreferralhoplimit">LDAPReferralHopLimit</a></code>. Cette
- fonctionnalité est activée par défaut.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cache" id="cache">Cache LDAP</a></h2>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapconnectiontimeout" id="ldapconnectiontimeout">Directive</a> <a name="LDAPConnectionTimeout" id="LDAPConnectionTimeout">LDAPConnectionTimeout</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le délai d'attente en secondes de la socket de
+connexion</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPConnectionTimeout <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive configure l'option LDAP_OPT_NETWORK_TIMEOUT (ou
+ LDAP_OPT_CONNECT_TIMEOUT) dans la bibliothèque client LDAP
+ sous-jacente, si elle est disponible. Cette valeur représente la
+ durée pendant laquelle la bibliothèque client LDAP va attendre que
+ le processus de connexion TCP au serveur LDAP soit achevé.</p>
- <p>Pour améliorer les performances, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> met en
- oeuvre une stratégie de mise en cache agressive visant à minimiser
- le nombre de fois que le serveur LDAP doit être contacté. La mise en
- cache peut facilement doubler et même tripler le débit d'Apache
- lorsqu'il sert des pages protégées par mod_authnz_ldap. De plus, le
- serveur LDAP verra lui-même sa charge sensiblement diminuée.</p>
+ <p>Si la connexion n'a pas réussi avant ce délai, une erreur sera
+ renvoyée, ou la bibliothèque client LDAP tentera de se connecter à
+ un second serveur LDAP, s'il en a été défini un (via une liste de
+ noms d'hôtes séparés par des espaces dans la directive <code class="directive"><a href="../mod/mod_authnz_ldap.html#authldapurl">AuthLDAPURL</a></code>).</p>
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> supporte deux types de mise en cache
- LDAP : un <em>cache recherche/identification</em> durant la phase
- de recherche/identification et deux <em>caches d'opérations</em>
- durant la phase de comparaison. Chaque URL LDAP utilisée par le
- serveur a son propre jeu d'instances dans ces trois caches.</p>
+ <p>La valeur par défaut est 10 secondes, si la bibliothèque client
+ LDAP liée avec le serveur supporte l'option
+ LDAP_OPT_NETWORK_TIMEOUT.</p>
- <h3><a name="search-bind" id="search-bind">Le cache
- recherche/identification</a></h3>
- <p>Les processus de recherche et d'identification sont les
- opérations LDAP les plus consommatrices en temps, en particulier
- si l'annuaire est de grande taille. Le cache de
- recherche/identification met en cache toutes les recherches qui
- ont abouti à une identification positive. Les résultats négatifs
- (c'est à dire les recherches sans succès, ou les recherches qui
- n'ont pas abouti à une identification positive) ne sont pas mis en
- cache. La raison de cette décision réside dans le fait que les
- connexions avec des données d'identification invalides ne
- représentent qu'un faible pourcentage du nombre total de
- connexions, et ainsi, le fait de ne pas mettre en cache les
- données d'identification invalides réduira d'autant la taille du
- cache.</p>
+ <div class="note">LDAPConnectionTimeout n'est disponible que si la bibliothèque client
+ LDAP liée avec le serveur supporte l'option
+ LDAP_OPT_NETWORK_TIMEOUT (ou LDAP_OPT_CONNECT_TIMEOUT), et le
+ comportement final est entièrement dicté par la bibliothèque client
+ LDAP.
+ </div>
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> met en cache le nom d'utilisateur, le
- DN extrait, le mot de passe utilisé pour l'identification, ainsi
- que l'heure de l'identification. Chaque fois qu'une nouvelle
- connexion est initialisée avec le même nom d'utilisateur,
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> compare le mot de passe de la nouvelle
- connexion avec le mot de passe enregistré dans le cache. Si les
- mots de passe correspondent, et si l'entrée du cache n'est pas
- trop ancienne, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> court-circuite la phase
- de recherche/identification.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldaplibrarydebug" id="ldaplibrarydebug">Directive</a> <a name="LDAPLibraryDebug" id="LDAPLibraryDebug">LDAPLibraryDebug</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active le débogage dans le SDK LDAP</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPLibraryDebug <var>7</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>disabled</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Active les options de débogage LDAP spécifiques au SDK, qui
+ entraînent en général une journalisation d'informations verbeuses du
+ SDK LDAP dans le journal principal des erreurs d'Apache. Les
+ messages de traces en provenance du SDK LDAP fournissent des
+ informations très détaillées qui peuvent s'avérer utiles lors du
+ débogage des problèmes de connexion avec des serveurs LDAP
+ d'arrière-plan.</p>
- <p>Le cache de recherche/identification est contrôlé par les
- directives <code class="directive"><a href="#ldapcacheentries">LDAPCacheEntries</a></code> et <code class="directive"><a href="#ldapcachettl">LDAPCacheTTL</a></code>.</p>
-
+ <p>Cette option n'est configurable que lorsque le serveur HTTP
+ Apache est lié avec un SDK LDAP qui implémente
+ <code>LDAP_OPT_DEBUG</code> ou <code>LDAP_OPT_DEBUG_LEVEL</code>,
+ comme OpenLDAP (une valeur de 7 est verbeuse) ou Tivoli Directory
+ Server (une valeur de 65535 est verbeuse).</p>
- <h3><a name="opcaches" id="opcaches">Les caches d'opérations</a></h3>
- <p>Au cours des opérations de comparaison d'attributs et de noms
- distinctifs (DN), <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> utilise deux caches
- d'opérations pour mettre en cache les opérations de comparaison.
- Le premier cache de comparaison sert à mettre en cache les
- résultats de comparaisons effectuées pour vérifier l'appartenance
- à un groupe LDAP. Le second cache de comparaison sert à mettre en
- cache les résultats de comparaisons entre DNs.</p>
+ <div class="warning">
+ <p>Les informations journalisées peuvent contenir des données
+ d'authentification en clair utilisées ou validées lors de
+ l'authentification LDAP ; vous devez donc prendre soin de protéger
+ et de purger le journal des erreurs lorsque cette directive est
+ utilisée.</p>
+ </div>
- <p>Notez que, lorsque l'appartenance à un groupe est vérifiée,
- toute comparaison de sous-groupes est mise en cache afin
- d'accélérer les comparaisons de sous-groupes ultérieures.</p>
- <p>Le comportement de ces deux caches est contrôlé par les
- directives <code class="directive"><a href="#ldapopcacheentries">LDAPOpCacheEntries</a></code> et <code class="directive"><a href="#ldapopcachettl">LDAPOpCacheTTL</a></code>.</p>
-
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapopcacheentries" id="ldapopcacheentries">Directive</a> <a name="LDAPOpCacheEntries" id="LDAPOpCacheEntries">LDAPOpCacheEntries</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre d'entrées utilisées pour mettre en cache les
+opérations de comparaison LDAP</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPOpCacheEntries <var>nombre</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPOpCacheEntries 1024</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le nombre d'entrées que
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> va utiliser pour mettre en cache les
+ opérations de comparaison LDAP. La valeur par défaut est de 1024
+ entrées. Si elle est définie à 0, la mise en cache des opérations de
+ comparaison LDAP est désactivée.</p>
- <h3><a name="monitoring" id="monitoring">Superviser le cache</a></h3>
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> possède un gestionnaire de contenu
- qui permet aux administrateurs de superviser les performances du
- cache. Le nom du gestionnaire de contenu est
- <code>ldap-status</code>, et on peut utiliser les directives
- suivantes pour accéder aux informations du cache de
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> :</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapopcachettl" id="ldapopcachettl">Directive</a> <a name="LDAPOpCacheTTL" id="LDAPOpCacheTTL">LDAPOpCacheTTL</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée pendant laquelle les entrées du cache d'opérations
+restent valides</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPOpCacheTTL <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPOpCacheTTL 600</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier la durée (en secondes)
+ pendant laquelle les entrées du cache d'opérations restent valides.
+ La valeur par défaut est de 600 secondes.</p>
- <pre class="prettyprint lang-config"><Location /server/cache-info>
- SetHandler ldap-status
-</Location></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapreferralhoplimit" id="ldapreferralhoplimit">Directive</a> <a name="LDAPReferralHopLimit" id="LDAPReferralHopLimit">LDAPReferralHopLimit</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nombre maximum de redirections vers des serveurs
+alternatifs (referrals) avant l'abandon de la requête
+LDAP.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPReferralHopLimit <var>nombre</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Dépend du SDK, en général entre 5 et 10</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Si elle est activée par la directive <code class="directive">LDAPReferrals</code>,
+ cette directive permet de définir le nombre maximum de sauts vers
+ des serveurs alternatifs (referrals) avant l'abandon de la requête
+ LDAP.</p>
+<div class="warning">
+<p>L'ajustement de ce paramètre n'est pas commun à tous les SDKs LDAP.</p>
+</div>
- <p>En se connectant à l'URL
- <code>http://nom-serveur/infos-cache</code>, l'administrateur peut
- obtenir un rapport sur le statut de chaque cache qu'utilise
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>. Notez que si Apache ne supporte pas la
- mémoire partagée, chaque instance de <code class="program"><a href="../programs/httpd.html">httpd</a></code>
- possèdera son propre cache, et chaque fois que l'URL sera
- rechargée, un résultat différent pourra être affiché, en fonction
- de l'instance de <code class="program"><a href="../programs/httpd.html">httpd</a></code> qui traitera la
- requête.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingssltls" id="usingssltls">Utiliser SSL/TLS</a></h2>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapreferrals" id="ldapreferrals">Directive</a> <a name="LDAPReferrals" id="LDAPReferrals">LDAPReferrals</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active la redirection vers des serveurs alternatifs au
+cours des requêtes vers le serveur LDAP.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPReferrals <var>On|Off|default</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPReferrals On</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le paramètre <var>default</var> est disponible depuis la
+version 2.4.7 du serveur HTTP Apache.</td></tr>
+</table>
+ <p>Certains serveurs LDAP partagent leur annuaire en plusieurs
+ domaines et utilisent le système des redirections (referrals) pour
+ aiguiller un client lorsque les limites d'un domaine doivent être
+ franchies. Ce processus est similaire à une redirection HTTP. Les
+ bibliothèques client LDAP ne respectent pas forcément ces
+ redirections par défaut. Cette directive permet de configurer
+ explicitement les redirections LDAP dans le SDK sous-jacent.</p>
- <p>La possibilité de créer des connexions SSL et TLS avec un serveur
- LDAP est définie par les directives <code class="directive"><a href="#ldaptrustedglobalcert">
- LDAPTrustedGlobalCert</a></code>, <code class="directive"><a href="#ldaptrustedclientcert">
- LDAPTrustedClientCert</a></code> et <code class="directive"><a href="#ldaptrustedmode">
- LDAPTrustedMode</a></code>. Ces directives permettent de spécifier
- l'autorité de certification (CA), les certificats clients éventuels,
- ainsi que le type de chiffrement à utiliser pour la connexion (none,
- SSL ou TLS/STARTTLS).</p>
+ <p>La directive <code class="directive">LDAPReferrals</code> accepte les
+ valeurs suivantes :</p>
- <pre class="prettyprint lang-config"># Etablissement d'une connexion SSL LDAP sur le port 636.
-# Nécessite le chargement de mod_ldap et mod_authnz_ldap.
-# Remplacez "votre-domaine.example.com" par le nom de votre
-# domaine.
+ <dl>
+ <dt>"on"</dt>
+ <dd> <p>Avec la valeur "on", la prise en compte des redirections
+ LDAP par le SDK sous-jacent est activée, la directive
+ <code class="directive">LDAPReferralHopLimit</code> permet de surcharger la
+ "hop limit" du SDK, et un "LDAP rebind callback" est enregistré.</p></dd>
+ <dt>"off"</dt>
+ <dd> <p>Avec la valeur "off", la prise en compte des redirections
+ LDAP par le SDK sous-jacent est complètement désactivée.</p></dd>
+ <dt>"default"</dt>
+ <dd> <p>Avec la valeur "default", la prise en compte des redirections
+ LDAP par le SDK sous-jacent n'est pas modifiée, la directive
+ <code class="directive">LDAPReferralHopLimit</code> ne permet pas de surcharger la
+ "hop limit" du SDK, et aucun "LDAP rebind callback" n'est enregistré.</p></dd>
+ </dl>
+
+ <p>La directive <code class="directive">LDAPReferralHopLimit</code> travaille en
+ conjonction avec cette directive pour limiter le nombre de
+ redirections à suivre pour achever le traitement de la requête LDAP.
+ Lorsque le processus de redirection est activé par la valeur "On",
+ les données d'authentification du client sont transmises via un
+ "rebind callback" à tout serveur LDAP qui en fait la demande.</p>
-LDAPTrustedGlobalCert CA_DER /certs/certfile.der
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapretries" id="ldapretries">Directive</a> <a name="LDAPRetries" id="LDAPRetries">LDAPRetries</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nombre maximum de tentatives de connexions au
+serveur LDAP.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPRetries <var>nombre d'essais</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPRetries 3</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Suite à des échecs de connexion au serveur LDAP, le serveur
+ tentera de se connecter autant de fois qu'indiqué par la directive
+ <code class="directive">LDAPRetries</code>. Si cette directive est définie à
+ 0, le serveur ne tentera pas d'autre connexion après un échec.</p>
+ <p>Il est possible d'effectuer une autre tentative de connexion en
+ cas d'erreurs LDAP du type délai dépassé ou connexion refusée. </p>
-<Location /ldap-status>
- SetHandler ldap-status
-
- Require host yourdomain.example.com
-
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
- Require valid-user
-</Location></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapretrydelay" id="ldapretrydelay">Directive</a> <a name="LDAPRetryDelay" id="LDAPRetryDelay">LDAPRetryDelay</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le temps d'attente avant un autre essai de connexion au
+serveur LDAP.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPRetryDelay <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPRetryDelay 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Si la directive <code class="directive">LDAPRetryDelay</code> est définie
+ à une valeur différente de 0, le serveur attendra pendant la durée
+ spécifiée pour envoyer à nouveau sa requête LDAP. Une valeur de 0
+ implique une absence de délai pour les essais successifs.</p>
+ <p>Il est possible d'effectuer une autre tentative de connexion en
+ cas d'erreurs LDAP du type délai dépassé ou connexion refusée. </p>
- <pre class="prettyprint lang-config"># Etablissement d'une connexion TLS LDAP sur le port 389.
-# Nécessite le chargement de mod_ldap et mod_authnz_ldap.
-# Remplacez "votre-domaine.example.com" par le nom de votre
-# domaine.
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapsharedcachefile" id="ldapsharedcachefile">Directive</a> <a name="LDAPSharedCacheFile" id="LDAPSharedCacheFile">LDAPSharedCacheFile</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le fichier du cache en mémoire
+partagée</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPSharedCacheFile <var>chemin-fichier</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le chemin du
+ fichier du cache en mémoire partagée. Si elle n'est pas définie, la
+ mémoire partagée anonyme sera utilisée si la plate-forme la
+ supporte.</p>
-LDAPTrustedGlobalCert CA_DER /certs/certfile.der
+ <p>Si <var>chemin-fichier</var> n'est pas un chemin absolu, il sera
+ relatif au répertoire défini via la directive <code class="directive"><a href="../mod/core.html#defaultruntimedir">DefaultRuntimeDir</a></code>.</p>
-<Location /ldap-status>
- SetHandler ldap-status
-
- Require host yourdomain.example.com
-
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS
- Require valid-user
-</Location></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapsharedcachesize" id="ldapsharedcachesize">Directive</a> <a name="LDAPSharedCacheSize" id="LDAPSharedCacheSize">LDAPSharedCacheSize</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille en octets du cache en mémoire partagée</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPSharedCacheSize <var>octets</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPSharedCacheSize 500000</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le nombre d'octets à allouer
+ pour le cache en mémoire partagée. La valeur par
+ défaut est 500kb.
+ Si elle est définie à 0, le cache en mémoire partagée ne sera pas
+ utilisé et chaque processus HTTPD va créer son propre cache.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldaptimeout" id="ldaptimeout">Directive</a> <a name="LDAPTimeout" id="LDAPTimeout">LDAPTimeout</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le délai d'attente pour les opérations de
+recherche et d'identification LDAP en secondes</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTimeout <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPTimeout 60</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.5 du serveur HTTP
+Apache</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le délai d'attente pour les
+ opérations de recherche et d'identification, ainsi que l'option
+ LDAP_OPT_TIMEOUT dans la bibliothèque LDAP client sous-jacente,
+ lorsqu'elle est disponible.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="settingcerts" id="settingcerts">Certificats SSL/TLS</a></h2>
+ <p>Lorsque le délai est atteint, httpd va refaire un essai dans le
+ cas où une connexion existante a été silencieusement fermée par un
+ pare-feu. Les performances seront cependant bien meilleures si le
+ pare-feu est configuré pour envoyer des paquets TCP RST au lieu de
+ rejeter silencieusement les paquets.</p>
- <p>Les différents SDKs LDAP disposent de nombreuses méthodes pour
- définir et gérer les certificats des clients et des autorités de
- certification (CA).</p>
+ <div class="note">
+ <p>Les délais pour les opérations de comparaison LDAP nécessitent un
+ SDK avec LDAP_OPT_TIMEOUT, comme OpenLDAP >= 2.4.4.</p>
+ </div>
- <p>Si vous avez l'intention d'utiliser SSL ou TLS, lisez cette
- section ATTENTIVEMENT de façon à bien comprendre les différences de
- configurations entre les différents SDKs LDAP supportés.</p>
- <h3><a name="settingcerts-netscape" id="settingcerts-netscape">SDK Netscape/Mozilla/iPlanet</a></h3>
- <p>Les certificat de CA sont enregistrés dans un fichier nommé
- cert7.db. Le SDK ne dialoguera avec aucun serveur LDAP dont le
- certificat n'a pas été signé par une CA spécifiée dans ce
- fichier. Si des certificats clients sont requis, un fichier
- key3.db ainsi qu'un mot de passe optionnels peuvent être
- spécifiés. On peut aussi spécifier le fichier secmod si
- nécessaire. Ces fichiers sont du même format que celui utilisé
- par les navigateurs web Netscape Communicator ou Mozilla. Le
- moyen le plus simple pour obtenir ces fichiers consiste à les
- extraire de l'installation de votre navigateur.</p>
-
- <p>Les certificats clients sont spécifiés pour chaque connexion
- en utilisant la directive LDAPTrustedClientCert et en se
- référant au certificat "nickname". On peut éventuellement
- spécifier un mot de passe pour déverrouiller la clé privée du
- certificat.</p>
-
- <p>Le SDK supporte seulement SSL. Toute tentative d'utilisation
- de STARTTLS engendrera une erreur lors des tentatives de
- contacter le serveur LDAP pendant l'exécution.</p>
-
- <pre class="prettyprint lang-config"># Spécifie un fichier de certificats de CA Netscape
-LDAPTrustedGlobalCert CA_CERT7_DB /certs/cert7.db
-# Spécifie un fichier key3db optionnel pour le support des
-# certificats clients
-LDAPTrustedGlobalCert CERT_KEY3_DB /certs/key3.db
-# Spécifie le fichier secmod si nécessaire
-LDAPTrustedGlobalCert CA_SECMOD /certs/secmod
-<Location /ldap-status>
- SetHandler ldap-status
-
- Require host yourdomain.example.com
-
- Satisfy any
- AuthType Basic
- AuthName "LDAP Protected"
- AuthBasicProvider ldap
- LDAPTrustedClientCert CERT_NICKNAME <nickname> [password]
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
- Require valid-user
-</Location></pre>
-
-
-
-
- <h3><a name="settingcerts-novell" id="settingcerts-novell">SDK Novell</a></h3>
-
- <p>Un ou plusieurs certificats de CA doivent être spécifiés pour
- que le SDK Novell fonctionne correctement. Ces certificats
- peuvent être spécifiés sous forme de fichiers au format binaire
- DER ou codés en Base64 (PEM).</p>
-
- <p>Note: Les certificats clients sont spécifiés globalement
- plutôt qu'à chaque connexion, et doivent être spécifiés à l'aide
- de la directive LDAPTrustedGlobalCert comme ci-dessous. Définir
- des certificats clients via la directive LDAPTrustedClientCert
- engendrera une erreur qui sera journalisée, au moment de la
- tentative de connexion avec le serveur LDAP.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldaptrustedclientcert" id="ldaptrustedclientcert">Directive</a> <a name="LDAPTrustedClientCert" id="LDAPTrustedClientCert">LDAPTrustedClientCert</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom de fichier contenant un certificat client ou
+un alias renvoyant vers un certificat client spécifique à une connexion.
+Tous les SDK LDAP ne supportent pas les certificats clients par
+connexion.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTrustedClientCert <var>type</var>
+<var>chemin/nom-fichier/alias</var> <var>[mot de passe]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le chemin et le nom de
+ fichier ou l'alias d'un certificat client par connexion utilisé lors
+ de l'établissement d'une connexion SSL ou TLS avec un serveur LDAP.
+ Les sections directory ou location peuvent posséder leurs propres
+ configurations de certificats clients. Certains SDK LDAP (en
+ particulier Novell) ne supportent pas les certificats clients par
+ connexion, et renvoient une erreur lors de la connexion au serveur
+ LDAP si vous tenter d'utiliser cette directive (Utilisez à la place
+ la directive LDAPTrustedGlobalCert pour les certificats clients sous
+ Novell - Voir plus haut le guide des certificats SSL/TLS pour plus
+ de détails). Le paramètre type spécifie le type du certificat en
+ cours de définition, en fonction du SDK LDAP utilisé. Les types
+ supportés sont :</p>
+ <ul>
+ <li>CA_DER - certificat de CA codé en binaire DER</li>
+ <li>CA_BASE64 - certificat de CA codé en PEM</li>
+ <li>CERT_DER - certificat client codé en binaire DER</li>
+ <li>CERT_BASE64 - certificat client codé en PEM</li>
+ <li>CERT_NICKNAME - certificat client "nickname" (SDK Netscape)</li>
+ <li>KEY_DER - clé privée codée en binaire DER</li>
+ <li>KEY_BASE64 - clé privée codée en PEM</li>
+ </ul>
- <p>Le SDK supporte SSL et STARTTLS, le choix étant défini par le
- paramètre de la directive LDAPTrustedMode. Si une URL de type
- ldaps:// est spécifiée, le mode SSL est forcé, et l'emporte sur
- cette directive.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldaptrustedglobalcert" id="ldaptrustedglobalcert">Directive</a> <a name="LDAPTrustedGlobalCert" id="LDAPTrustedGlobalCert">LDAPTrustedGlobalCert</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom de fichier ou la base de données contenant
+les Autorités de Certification de confiance globales ou les certificats
+clients globaux</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTrustedGlobalCert <var>type</var>
+<var>chemin/nom-fichier</var> <var>[mot de passe]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le chemin et le nom du
+ fichier contenant les certificats des CA de confiance et/ou les
+ certificats clients du système global que <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>
+ utilisera pour établir une connexion SSL ou TLS avec un serveur
+ LDAP. Notez que toute information relative aux certificats spécifiée
+ en utilisant cette directive s'applique globalement à l'ensemble de
+ l'installation du serveur. Certains SDK LDAP (en particulier Novell)
+ nécessitent la définition globale de tous les certificats clients en
+ utilisant cette directive. La plupart des autres SDK nécessitent la
+ définition des certificats clients dans une section Directory ou
+ Location en utilisant la directive LDAPTrustedClientCert. Si vous ne
+ définissez pas ces directives correctement, une erreur sera générée
+ lors des tentatives de contact avec un serveur LDAP, ou la connexion
+ échouera silencieusement (Voir plus haut le guide des certificats
+ SSL/TLS pour plus de détails). Le paramètre type spécifie le type de
+ certificat en cours de définition, en fonction du SDK LDAP utilisé.
+ Les types supportés sont :</p>
+ <ul>
+ <li>CA_DER - certificat de CA codé en binaire DER</li>
+ <li>CA_BASE64 - certificat de CA codé en PEM</li>
+ <li>CA_CERT7_DB - fichier de base de données des certificats de CA
+ de Netscape cert7.db</li>
+ <li>CA_SECMOD - fichier de base de données secmod de Netscape</li>
+ <li>CERT_DER - certificat client codé en binaire DER</li>
+ <li>CERT_BASE64 - certificat client codé en PEM</li>
+ <li>CERT_KEY3_DB - fichier de base de données des certificats
+ clients de Netscape key3.db</li>
+ <li>CERT_NICKNAME - certificat client "nickname" (SDK Netscape)</li>
+ <li>CERT_PFX - certificat client codé en PKCS#12 (SDK Novell)</li>
+ <li>KEY_DER - clé privée codée en binaire DER</li>
+ <li>KEY_BASE64 - clé privée codée en PEM</li>
+ <li>KEY_PFX - clé privée codée en PKCS#12 (SDK Novell)</li>
+ </ul>
- <pre class="prettyprint lang-config"># Spécifie deux fichiers contenant des certificats de CA
-LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
-LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
-# Spécifie un fichier contenant des certificats clients
-# ainsi qu'une clé
-LDAPTrustedGlobalCert CERT_BASE64 /certs/cert1.pem
-LDAPTrustedGlobalCert KEY_BASE64 /certs/key1.pem [password]
-# N'utilisez pas cette directive, sous peine de provoquer
-# une erreur
-#LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem</pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldaptrustedmode" id="ldaptrustedmode">Directive</a> <a name="LDAPTrustedMode" id="LDAPTrustedMode">LDAPTrustedMode</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le mode (SSL ou TLS) à utiliser lors de la
+connexion à un serveur LDAP.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTrustedMode <var>type</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Les modes suivants sont supportés :</p>
+ <ul>
+ <li>NONE - aucun chiffrement</li>
+ <li>SSL - chiffrement ldaps:// sur le port par défaut 636</li>
+ <li>TLS - chiffrement STARTTLS sur le port par défaut 389</li>
+ </ul>
+ <p>Les modes ci-dessus ne sont pas supportés par tous les SDK LDAP.
+ Un message d'erreur sera généré à l'exécution si un mode n'est pas
+ supporté, et la connexion au serveur LDAP échouera.
+ </p>
-
+ <p>Si une URL de type ldaps:// est spécifiée, le mode est forcé à
+ SSL et la définition de LDAPTrustedMode est ignorée.</p>
- <h3><a name="settingcerts-openldap" id="settingcerts-openldap">SDK OpenLDAP</a></h3>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ldapverifyservercert" id="ldapverifyservercert">Directive</a> <a name="LDAPVerifyServerCert" id="LDAPVerifyServerCert">LDAPVerifyServerCert</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Force la vérification du certificat du
+serveur</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPVerifyServerCert <var>On|Off</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPVerifyServerCert On</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+</table>
+ <p>Cette directive permet de spécifier s'il faut forcer la
+ vérification d'un certificat de serveur lors de l'établissement
+ d'une connexion SSL avec un serveur LDAP.</p>
- <p>Un ou plusieurs certificats de CA doivent être spécifiés pour
- que le SDK OpenLDAP fonctionne correctement. Ces certificats
- peuvent être spécifiés sous forme de fichiers au format binaire
- DER ou codés en Base64 (PEM).</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="exampleconfig" id="exampleconfig">Exemple de configuration</a></h2>
+ <p>Ce qui suit est un exemple de configuration qui utilise
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> pour améliorer les performances de
+ l'authentification HTTP de base fournie par
+ <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code>.</p>
- <p>Les certificats clients sont spécifiés pour chaque connexion
- à l'aide de la directive LDAPTrustedClientCert.</p>
+ <pre class="prettyprint lang-config"># Active la conservation des connexions LDAP et le cache partagé en
+# mémoire. Active le gestionnaire de statut du cache LDAP.
+# Nécessite le chargement de mod_ldap et de mod_authnz_ldap.
+# Remplacez "votre-domaine.example.com" par le nom de votre
+# domaine.
- <p>La documentation du SDK prétend que SSL et STARTTLS sont
- supportés ; cependant, STARTTLS semble ne pas fonctionner avec
- toutes les versions du SDK. Le mode SSL/TLS peut être défini en
- utilisant le paramètre de la directive LDAPTrustedMode. Si une
- URL de type
- ldaps:// est spécifiée, le mode SSL est forcé. La documentation
- OpenLDAP indique que le support SSL (ldaps://) tend à être
- remplacé par TLS, bien que le mode SSL fonctionne toujours.</p>
+LDAPSharedCacheSize 500000
+LDAPCacheEntries 1024
+LDAPCacheTTL 600
+LDAPOpCacheEntries 1024
+LDAPOpCacheTTL 600
- <pre class="prettyprint lang-config"># Spécifie deux fichiers contenant des certificats de CA
-LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
-LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
<Location /ldap-status>
SetHandler ldap-status
Require host yourdomain.example.com
- LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem
- LDAPTrustedClientCert KEY_BASE64 /certs/key1.pem
- # CA certs respecified due to per-directory client certs
- LDAPTrustedClientCert CA_DER /certs/cacert1.der
- LDAPTrustedClientCert CA_BASE64 /certs/cacert2.pem
Satisfy any
AuthType Basic
AuthName "LDAP Protected"
AuthBasicProvider ldap
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one
Require valid-user
</Location></pre>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="pool" id="pool">Conservation des connexions LDAP</a></h2>
-
+ <p>Les connexions LDAP sont conservées de requête en requête. Ceci
+ permet de rester connecté et identifié au serveur LDAP, ce dernier
+ étant ainsi prêt pour la prochaine requête, sans avoir à se
+ déconnecter, reconnecter et réidentifier. Le gain en performances
+ est similaire à celui des connexions persistantes (keepalives)
+ HTTP.</p>
- <h3><a name="settingcerts-solaris" id="settingcerts-solaris">SDK Solaris</a></h3>
+ <p>Sur un serveur très sollicité, il est possible que de nombreuses
+ requêtes tentent d'accéder simultanément à la même connexion au
+ serveur LDAP. Lorsqu'une connexion LDAP est utilisée, Apache en crée
+ une deuxième en parallèle à la première, ce qui permet d'éviter que
+ le système de conservation des connexions ne devienne un goulot
+ d'étranglement.</p>
- <p>SSL/TLS pour les bibliothèques LDAP propres à Solaris n'est
- pas encore supporté. Si nécessaire, installez et utilisez plutôt
- les bibliothèques OpenLDAP.</p>
+ <p>Il n'est pas nécessaire d'activer explicitement la conservation
+ des connexions dans la configuration d'Apache. Tout module utilisant
+ le module ldap pour accéder aux services LDAP partagera le jeu de
+ connexions.</p>
-
+ <p>Les connexions LDAP peuvent garder la trace des données
+ d'identification du client ldap utilisées pour l'identification
+ auprès du serveur LDAP. Ces données peuvent être fournies aux
+ serveurs LDAP qui ne permettent pas les connexions anonymes au cours
+ lors des tentatives de sauts vers des serveurs alternatifs. Pour
+ contrôler cette fonctionnalité, voir les directives <code class="directive"><a href="#ldapreferrals">LDAPReferrals</a></code> et <code class="directive"><a href="#ldapreferralhoplimit">LDAPReferralHopLimit</a></code>. Cette
+ fonctionnalité est activée par défaut.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="cache" id="cache">Cache LDAP</a></h2>
- <h3><a name="settingcerts-microsoft" id="settingcerts-microsoft">SDK Microsoft</a></h3>
+ <p>Pour améliorer les performances, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> met en
+ oeuvre une stratégie de mise en cache agressive visant à minimiser
+ le nombre de fois que le serveur LDAP doit être contacté. La mise en
+ cache peut facilement doubler et même tripler le débit d'Apache
+ lorsqu'il sert des pages protégées par mod_authnz_ldap. De plus, le
+ serveur LDAP verra lui-même sa charge sensiblement diminuée.</p>
- <p>La configuration des certificats SSL/TLS pour les
- bibliothèques LDAP propres à Microsoft s'effectue à l'intérieur
- du registre système, et aucune directive de configuration n'est
- requise.</p>
+ <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> supporte deux types de mise en cache
+ LDAP : un <em>cache recherche/identification</em> durant la phase
+ de recherche/identification et deux <em>caches d'opérations</em>
+ durant la phase de comparaison. Chaque URL LDAP utilisée par le
+ serveur a son propre jeu d'instances dans ces trois caches.</p>
- <p>SSL et TLS sont tous deux supportés en utilisant des URLs de
- type ldaps://, ou en définissant la directive LDAPTrustedMode à
- cet effet.</p>
+ <h3><a name="search-bind" id="search-bind">Le cache
+ recherche/identification</a></h3>
+ <p>Les processus de recherche et d'identification sont les
+ opérations LDAP les plus consommatrices en temps, en particulier
+ si l'annuaire est de grande taille. Le cache de
+ recherche/identification met en cache toutes les recherches qui
+ ont abouti à une identification positive. Les résultats négatifs
+ (c'est à dire les recherches sans succès, ou les recherches qui
+ n'ont pas abouti à une identification positive) ne sont pas mis en
+ cache. La raison de cette décision réside dans le fait que les
+ connexions avec des données d'identification invalides ne
+ représentent qu'un faible pourcentage du nombre total de
+ connexions, et ainsi, le fait de ne pas mettre en cache les
+ données d'identification invalides réduira d'autant la taille du
+ cache.</p>
- <p>Note: L'état du support des certificats clients n'est pas
- encore connu pour ce SDK.</p>
+ <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> met en cache le nom d'utilisateur, le
+ DN extrait, le mot de passe utilisé pour l'identification, ainsi
+ que l'heure de l'identification. Chaque fois qu'une nouvelle
+ connexion est initialisée avec le même nom d'utilisateur,
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> compare le mot de passe de la nouvelle
+ connexion avec le mot de passe enregistré dans le cache. Si les
+ mots de passe correspondent, et si l'entrée du cache n'est pas
+ trop ancienne, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> court-circuite la phase
+ de recherche/identification.</p>
+ <p>Le cache de recherche/identification est contrôlé par les
+ directives <code class="directive"><a href="#ldapcacheentries">LDAPCacheEntries</a></code> et <code class="directive"><a href="#ldapcachettl">LDAPCacheTTL</a></code>.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapcacheentries" id="ldapcacheentries">Directive</a> <a name="LDAPCacheEntries" id="LDAPCacheEntries">LDAPCacheEntries</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximum d'entrées dans le cache LDAP
-primaire</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPCacheEntries <var>nombre</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPCacheEntries 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier la taille maximale du cache
- LDAP primaire. Ce cache contient les résultats de
- recherche/identification positifs. Définissez-la à 0 pour désactiver
- la mise en cache des résultats de recherche/identification positifs.
- La taille par défaut est de 1024 recherches en cache.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapcachettl" id="ldapcachettl">Directive</a> <a name="LDAPCacheTTL" id="LDAPCacheTTL">LDAPCacheTTL</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée pendant laquelle les entrées du cache restent
-valides.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPCacheTTL <var>secondes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPCacheTTL 600</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier la durée (en secondes)
- pendant laquelle une entrée du cache de recherche/identification
- reste valide. La valeur par défaut est de 600 secondes (10
- minutes).</p>
+ <h3><a name="opcaches" id="opcaches">Les caches d'opérations</a></h3>
+ <p>Au cours des opérations de comparaison d'attributs et de noms
+ distinctifs (DN), <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> utilise deux caches
+ d'opérations pour mettre en cache les opérations de comparaison.
+ Le premier cache de comparaison sert à mettre en cache les
+ résultats de comparaisons effectuées pour vérifier l'appartenance
+ à un groupe LDAP. Le second cache de comparaison sert à mettre en
+ cache les résultats de comparaisons entre DNs.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapconnectionpoolttl" id="ldapconnectionpoolttl">Directive</a> <a name="LDAPConnectionPoolTTL" id="LDAPConnectionPoolTTL">LDAPConnectionPoolTTL</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Désactive les connexions d'arrière-plan qui sont restées
-inactives trop longtemps au sein du jeu de connexions.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPConnectionPoolTTL <var>n</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPConnectionPoolTTL -1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.12 du serveur HTTP
-Apache</td></tr>
-</table>
- <p>Cette directive permet de spécifier la durée maximale, en
- secondes, pendant laquelle une connexion LDAP du jeu de connexions
- peut demeurer inactive, mais rester quand-même disponible pour une
- utilisation éventuelle. Le jeu de connexions est nettoyé au fur et à
- mesure des besoins, de manière non asynchrone.</p>
+ <p>Notez que, lorsque l'appartenance à un groupe est vérifiée,
+ toute comparaison de sous-groupes est mise en cache afin
+ d'accélérer les comparaisons de sous-groupes ultérieures.</p>
- <p>Si cette directive est définie à 0, les connexions ne sont jamais
- sauvegardées dans le jeu de connexions d'arrière-plan. Avec la
- valeur par défaut -1, ou toute autre valeur négative, les connexions
- peuvent être réutilisées sans limite de durée.</p>
+ <p>Le comportement de ces deux caches est contrôlé par les
+ directives <code class="directive"><a href="#ldapopcacheentries">LDAPOpCacheEntries</a></code> et <code class="directive"><a href="#ldapopcachettl">LDAPOpCacheTTL</a></code>.</p>
+
- <p>Dans le but d'améliorer les performances, le temps de référence
- qu'utilise cette directive correspond au moment où la connexion LDAP
- est enregistrée ou remise dans le jeu de connexions, et non au
- moment du dernier échange réussi avec le serveur LDAP.</p>
+ <h3><a name="monitoring" id="monitoring">Superviser le cache</a></h3>
+ <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> possède un gestionnaire de contenu
+ qui permet aux administrateurs de superviser les performances du
+ cache. Le nom du gestionnaire de contenu est
+ <code>ldap-status</code>, et on peut utiliser les directives
+ suivantes pour accéder aux informations du cache de
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> :</p>
- <p>La version 2.4.10 a introduit de nouvelles mesures permettant
- d'éviter une augmentation excessive du temps de référence due à des
- correspondances positives dans le cache ou des requêtes lentes. A
- cet effet, le temps de référence n'est pas réactualisé si aucune
- connexion LDAP d'arrière-plan n'est requise ; d'autre part, le temps
- de référence se base sur le moment où la requête HTTP est reçue, et
- non sur le moment où la requête a été traitée.</p>
+ <pre class="prettyprint lang-config"><Location /server/cache-info>
+ SetHandler ldap-status
+</Location></pre>
- <div class="note"><p>Cette durée de vie s'exprime par défaut en secondes, mais
- il est possible d'utiliser d'autres unités en ajoutant un suffixe :
- millisecondes (ms), minutes (min), ou heures (h).
- </p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapconnectiontimeout" id="ldapconnectiontimeout">Directive</a> <a name="LDAPConnectionTimeout" id="LDAPConnectionTimeout">LDAPConnectionTimeout</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le délai d'attente en secondes de la socket de
-connexion</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPConnectionTimeout <var>secondes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive configure l'option LDAP_OPT_NETWORK_TIMEOUT (ou
- LDAP_OPT_CONNECT_TIMEOUT) dans la bibliothèque client LDAP
- sous-jacente, si elle est disponible. Cette valeur représente la
- durée pendant laquelle la bibliothèque client LDAP va attendre que
- le processus de connexion TCP au serveur LDAP soit achevé.</p>
+ <p>En se connectant à l'URL
+ <code>http://nom-serveur/infos-cache</code>, l'administrateur peut
+ obtenir un rapport sur le statut de chaque cache qu'utilise
+ <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>. Notez que si Apache ne supporte pas la
+ mémoire partagée, chaque instance de <code class="program"><a href="../programs/httpd.html">httpd</a></code>
+ possèdera son propre cache, et chaque fois que l'URL sera
+ rechargée, un résultat différent pourra être affiché, en fonction
+ de l'instance de <code class="program"><a href="../programs/httpd.html">httpd</a></code> qui traitera la
+ requête.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="usingssltls" id="usingssltls">Utiliser SSL/TLS</a></h2>
- <p>Si la connexion n'a pas réussi avant ce délai, une erreur sera
- renvoyée, ou la bibliothèque client LDAP tentera de se connecter à
- un second serveur LDAP, s'il en a été défini un (via une liste de
- noms d'hôtes séparés par des espaces dans la directive <code class="directive"><a href="../mod/mod_authnz_ldap.html#authldapurl">AuthLDAPURL</a></code>).</p>
+ <p>La possibilité de créer des connexions SSL et TLS avec un serveur
+ LDAP est définie par les directives <code class="directive"><a href="#ldaptrustedglobalcert">
+ LDAPTrustedGlobalCert</a></code>, <code class="directive"><a href="#ldaptrustedclientcert">
+ LDAPTrustedClientCert</a></code> et <code class="directive"><a href="#ldaptrustedmode">
+ LDAPTrustedMode</a></code>. Ces directives permettent de spécifier
+ l'autorité de certification (CA), les certificats clients éventuels,
+ ainsi que le type de chiffrement à utiliser pour la connexion (none,
+ SSL ou TLS/STARTTLS).</p>
- <p>La valeur par défaut est 10 secondes, si la bibliothèque client
- LDAP liée avec le serveur supporte l'option
- LDAP_OPT_NETWORK_TIMEOUT.</p>
+ <pre class="prettyprint lang-config"># Etablissement d'une connexion SSL LDAP sur le port 636.
+# Nécessite le chargement de mod_ldap et mod_authnz_ldap.
+# Remplacez "votre-domaine.example.com" par le nom de votre
+# domaine.
- <div class="note">LDAPConnectionTimeout n'est disponible que si la bibliothèque client
- LDAP liée avec le serveur supporte l'option
- LDAP_OPT_NETWORK_TIMEOUT (ou LDAP_OPT_CONNECT_TIMEOUT), et le
- comportement final est entièrement dicté par la bibliothèque client
- LDAP.
- </div>
+LDAPTrustedGlobalCert CA_DER /certs/certfile.der
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldaplibrarydebug" id="ldaplibrarydebug">Directive</a> <a name="LDAPLibraryDebug" id="LDAPLibraryDebug">LDAPLibraryDebug</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active le débogage dans le SDK LDAP</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPLibraryDebug <var>7</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>disabled</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Active les options de débogage LDAP spécifiques au SDK, qui
- entraînent en général une journalisation d'informations verbeuses du
- SDK LDAP dans le journal principal des erreurs d'Apache. Les
- messages de traces en provenance du SDK LDAP fournissent des
- informations très détaillées qui peuvent s'avérer utiles lors du
- débogage des problèmes de connexion avec des serveurs LDAP
- d'arrière-plan.</p>
+<Location /ldap-status>
+ SetHandler ldap-status
+
+ Require host yourdomain.example.com
+
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ Require valid-user
+</Location></pre>
- <p>Cette option n'est configurable que lorsque le serveur HTTP
- Apache est lié avec un SDK LDAP qui implémente
- <code>LDAP_OPT_DEBUG</code> ou <code>LDAP_OPT_DEBUG_LEVEL</code>,
- comme OpenLDAP (une valeur de 7 est verbeuse) ou Tivoli Directory
- Server (une valeur de 65535 est verbeuse).</p>
- <div class="warning">
- <p>Les informations journalisées peuvent contenir des données
- d'authentification en clair utilisées ou validées lors de
- l'authentification LDAP ; vous devez donc prendre soin de protéger
- et de purger le journal des erreurs lorsque cette directive est
- utilisée.</p>
- </div>
+ <pre class="prettyprint lang-config"># Etablissement d'une connexion TLS LDAP sur le port 389.
+# Nécessite le chargement de mod_ldap et mod_authnz_ldap.
+# Remplacez "votre-domaine.example.com" par le nom de votre
+# domaine.
+LDAPTrustedGlobalCert CA_DER /certs/certfile.der
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapopcacheentries" id="ldapopcacheentries">Directive</a> <a name="LDAPOpCacheEntries" id="LDAPOpCacheEntries">LDAPOpCacheEntries</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre d'entrées utilisées pour mettre en cache les
-opérations de comparaison LDAP</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPOpCacheEntries <var>nombre</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPOpCacheEntries 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier le nombre d'entrées que
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> va utiliser pour mettre en cache les
- opérations de comparaison LDAP. La valeur par défaut est de 1024
- entrées. Si elle est définie à 0, la mise en cache des opérations de
- comparaison LDAP est désactivée.</p>
+<Location /ldap-status>
+ SetHandler ldap-status
+
+ Require host yourdomain.example.com
+
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS
+ Require valid-user
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapopcachettl" id="ldapopcachettl">Directive</a> <a name="LDAPOpCacheTTL" id="LDAPOpCacheTTL">LDAPOpCacheTTL</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée pendant laquelle les entrées du cache d'opérations
-restent valides</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPOpCacheTTL <var>secondes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPOpCacheTTL 600</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier la durée (en secondes)
- pendant laquelle les entrées du cache d'opérations restent valides.
- La valeur par défaut est de 600 secondes.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapreferralhoplimit" id="ldapreferralhoplimit">Directive</a> <a name="LDAPReferralHopLimit" id="LDAPReferralHopLimit">LDAPReferralHopLimit</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nombre maximum de redirections vers des serveurs
-alternatifs (referrals) avant l'abandon de la requête
-LDAP.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPReferralHopLimit <var>nombre</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Dépend du SDK, en général entre 5 et 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Si elle est activée par la directive <code class="directive">LDAPReferrals</code>,
- cette directive permet de définir le nombre maximum de sauts vers
- des serveurs alternatifs (referrals) avant l'abandon de la requête
- LDAP.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="settingcerts" id="settingcerts">Certificats SSL/TLS</a></h2>
-<div class="warning">
-<p>L'ajustement de ce paramètre n'est pas commun à tous les SDKs LDAP.</p>
-</div>
+ <p>Les différents SDKs LDAP disposent de nombreuses méthodes pour
+ définir et gérer les certificats des clients et des autorités de
+ certification (CA).</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapreferrals" id="ldapreferrals">Directive</a> <a name="LDAPReferrals" id="LDAPReferrals">LDAPReferrals</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active la redirection vers des serveurs alternatifs au
-cours des requêtes vers le serveur LDAP.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPReferrals <var>On|Off|default</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPReferrals On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le paramètre <var>default</var> est disponible depuis la
-version 2.4.7 du serveur HTTP Apache.</td></tr>
-</table>
- <p>Certains serveurs LDAP partagent leur annuaire en plusieurs
- domaines et utilisent le système des redirections (referrals) pour
- aiguiller un client lorsque les limites d'un domaine doivent être
- franchies. Ce processus est similaire à une redirection HTTP. Les
- bibliothèques client LDAP ne respectent pas forcément ces
- redirections par défaut. Cette directive permet de configurer
- explicitement les redirections LDAP dans le SDK sous-jacent.</p>
+ <p>Si vous avez l'intention d'utiliser SSL ou TLS, lisez cette
+ section ATTENTIVEMENT de façon à bien comprendre les différences de
+ configurations entre les différents SDKs LDAP supportés.</p>
+
+ <h3><a name="settingcerts-netscape" id="settingcerts-netscape">SDK Netscape/Mozilla/iPlanet</a></h3>
+ <p>Les certificat de CA sont enregistrés dans un fichier nommé
+ cert7.db. Le SDK ne dialoguera avec aucun serveur LDAP dont le
+ certificat n'a pas été signé par une CA spécifiée dans ce
+ fichier. Si des certificats clients sont requis, un fichier
+ key3.db ainsi qu'un mot de passe optionnels peuvent être
+ spécifiés. On peut aussi spécifier le fichier secmod si
+ nécessaire. Ces fichiers sont du même format que celui utilisé
+ par les navigateurs web Netscape Communicator ou Mozilla. Le
+ moyen le plus simple pour obtenir ces fichiers consiste à les
+ extraire de l'installation de votre navigateur.</p>
+
+ <p>Les certificats clients sont spécifiés pour chaque connexion
+ en utilisant la directive LDAPTrustedClientCert et en se
+ référant au certificat "nickname". On peut éventuellement
+ spécifier un mot de passe pour déverrouiller la clé privée du
+ certificat.</p>
+
+ <p>Le SDK supporte seulement SSL. Toute tentative d'utilisation
+ de STARTTLS engendrera une erreur lors des tentatives de
+ contacter le serveur LDAP pendant l'exécution.</p>
+
+ <pre class="prettyprint lang-config"># Spécifie un fichier de certificats de CA Netscape
+LDAPTrustedGlobalCert CA_CERT7_DB /certs/cert7.db
+# Spécifie un fichier key3db optionnel pour le support des
+# certificats clients
+LDAPTrustedGlobalCert CERT_KEY3_DB /certs/key3.db
+# Spécifie le fichier secmod si nécessaire
+LDAPTrustedGlobalCert CA_SECMOD /certs/secmod
+<Location /ldap-status>
+ SetHandler ldap-status
+
+ Require host yourdomain.example.com
+
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ LDAPTrustedClientCert CERT_NICKNAME <nickname> [password]
+ AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ Require valid-user
+</Location></pre>
- <p>La directive <code class="directive">LDAPReferrals</code> accepte les
- valeurs suivantes :</p>
- <dl>
- <dt>"on"</dt>
- <dd> <p>Avec la valeur "on", la prise en compte des redirections
- LDAP par le SDK sous-jacent est activée, la directive
- <code class="directive">LDAPReferralHopLimit</code> permet de surcharger la
- "hop limit" du SDK, et un "LDAP rebind callback" est enregistré.</p></dd>
- <dt>"off"</dt>
- <dd> <p>Avec la valeur "off", la prise en compte des redirections
- LDAP par le SDK sous-jacent est complètement désactivée.</p></dd>
- <dt>"default"</dt>
- <dd> <p>Avec la valeur "default", la prise en compte des redirections
- LDAP par le SDK sous-jacent n'est pas modifiée, la directive
- <code class="directive">LDAPReferralHopLimit</code> ne permet pas de surcharger la
- "hop limit" du SDK, et aucun "LDAP rebind callback" n'est enregistré.</p></dd>
- </dl>
- <p>La directive <code class="directive">LDAPReferralHopLimit</code> travaille en
- conjonction avec cette directive pour limiter le nombre de
- redirections à suivre pour achever le traitement de la requête LDAP.
- Lorsque le processus de redirection est activé par la valeur "On",
- les données d'authentification du client sont transmises via un
- "rebind callback" à tout serveur LDAP qui en fait la demande.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapretries" id="ldapretries">Directive</a> <a name="LDAPRetries" id="LDAPRetries">LDAPRetries</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nombre maximum de tentatives de connexions au
-serveur LDAP.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPRetries <var>nombre d'essais</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPRetries 3</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Suite à des échecs de connexion au serveur LDAP, le serveur
- tentera de se connecter autant de fois qu'indiqué par la directive
- <code class="directive">LDAPRetries</code>. Si cette directive est définie à
- 0, le serveur ne tentera pas d'autre connexion après un échec.</p>
- <p>Il est possible d'effectuer une autre tentative de connexion en
- cas d'erreurs LDAP du type délai dépassé ou connexion refusée. </p>
+ <h3><a name="settingcerts-novell" id="settingcerts-novell">SDK Novell</a></h3>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapretrydelay" id="ldapretrydelay">Directive</a> <a name="LDAPRetryDelay" id="LDAPRetryDelay">LDAPRetryDelay</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le temps d'attente avant un autre essai de connexion au
-serveur LDAP.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPRetryDelay <var>secondes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPRetryDelay 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Si la directive <code class="directive">LDAPRetryDelay</code> est définie
- à une valeur différente de 0, le serveur attendra pendant la durée
- spécifiée pour envoyer à nouveau sa requête LDAP. Une valeur de 0
- implique une absence de délai pour les essais successifs.</p>
+ <p>Un ou plusieurs certificats de CA doivent être spécifiés pour
+ que le SDK Novell fonctionne correctement. Ces certificats
+ peuvent être spécifiés sous forme de fichiers au format binaire
+ DER ou codés en Base64 (PEM).</p>
- <p>Il est possible d'effectuer une autre tentative de connexion en
- cas d'erreurs LDAP du type délai dépassé ou connexion refusée. </p>
+ <p>Note: Les certificats clients sont spécifiés globalement
+ plutôt qu'à chaque connexion, et doivent être spécifiés à l'aide
+ de la directive LDAPTrustedGlobalCert comme ci-dessous. Définir
+ des certificats clients via la directive LDAPTrustedClientCert
+ engendrera une erreur qui sera journalisée, au moment de la
+ tentative de connexion avec le serveur LDAP.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapsharedcachefile" id="ldapsharedcachefile">Directive</a> <a name="LDAPSharedCacheFile" id="LDAPSharedCacheFile">LDAPSharedCacheFile</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le fichier du cache en mémoire
-partagée</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPSharedCacheFile <var>chemin-fichier</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier le chemin du
- fichier du cache en mémoire partagée. Si elle n'est pas définie, la
- mémoire partagée anonyme sera utilisée si la plate-forme la
- supporte.</p>
+ <p>Le SDK supporte SSL et STARTTLS, le choix étant défini par le
+ paramètre de la directive LDAPTrustedMode. Si une URL de type
+ ldaps:// est spécifiée, le mode SSL est forcé, et l'emporte sur
+ cette directive.</p>
- <p>Si <var>chemin-fichier</var> n'est pas un chemin absolu, il sera
- relatif au répertoire défini via la directive <code class="directive"><a href="../mod/core.html#defaultruntimedir">DefaultRuntimeDir</a></code>.</p>
+ <pre class="prettyprint lang-config"># Spécifie deux fichiers contenant des certificats de CA
+LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
+LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
+# Spécifie un fichier contenant des certificats clients
+# ainsi qu'une clé
+LDAPTrustedGlobalCert CERT_BASE64 /certs/cert1.pem
+LDAPTrustedGlobalCert KEY_BASE64 /certs/key1.pem [password]
+# N'utilisez pas cette directive, sous peine de provoquer
+# une erreur
+#LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapsharedcachesize" id="ldapsharedcachesize">Directive</a> <a name="LDAPSharedCacheSize" id="LDAPSharedCacheSize">LDAPSharedCacheSize</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille en octets du cache en mémoire partagée</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPSharedCacheSize <var>octets</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPSharedCacheSize 500000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier le nombre d'octets à allouer
- pour le cache en mémoire partagée. La valeur par
- défaut est 500kb.
- Si elle est définie à 0, le cache en mémoire partagée ne sera pas
- utilisé et chaque processus HTTPD va créer son propre cache.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldaptimeout" id="ldaptimeout">Directive</a> <a name="LDAPTimeout" id="LDAPTimeout">LDAPTimeout</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le délai d'attente pour les opérations de
-recherche et d'identification LDAP en secondes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTimeout <var>secondes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPTimeout 60</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.3.5 du serveur HTTP
-Apache</td></tr>
-</table>
- <p>Cette directive permet de spécifier le délai d'attente pour les
- opérations de recherche et d'identification, ainsi que l'option
- LDAP_OPT_TIMEOUT dans la bibliothèque LDAP client sous-jacente,
- lorsqu'elle est disponible.</p>
+
- <p>Lorsque le délai est atteint, httpd va refaire un essai dans le
- cas où une connexion existante a été silencieusement fermée par un
- pare-feu. Les performances seront cependant bien meilleures si le
- pare-feu est configuré pour envoyer des paquets TCP RST au lieu de
- rejeter silencieusement les paquets.</p>
+ <h3><a name="settingcerts-openldap" id="settingcerts-openldap">SDK OpenLDAP</a></h3>
- <div class="note">
- <p>Les délais pour les opérations de comparaison LDAP nécessitent un
- SDK avec LDAP_OPT_TIMEOUT, comme OpenLDAP >= 2.4.4.</p>
- </div>
+ <p>Un ou plusieurs certificats de CA doivent être spécifiés pour
+ que le SDK OpenLDAP fonctionne correctement. Ces certificats
+ peuvent être spécifiés sous forme de fichiers au format binaire
+ DER ou codés en Base64 (PEM).</p>
+ <p>Les certificats clients sont spécifiés pour chaque connexion
+ à l'aide de la directive LDAPTrustedClientCert.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldaptrustedclientcert" id="ldaptrustedclientcert">Directive</a> <a name="LDAPTrustedClientCert" id="LDAPTrustedClientCert">LDAPTrustedClientCert</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom de fichier contenant un certificat client ou
-un alias renvoyant vers un certificat client spécifique à une connexion.
-Tous les SDK LDAP ne supportent pas les certificats clients par
-connexion.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTrustedClientCert <var>type</var>
-<var>chemin/nom-fichier/alias</var> <var>[mot de passe]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier le chemin et le nom de
- fichier ou l'alias d'un certificat client par connexion utilisé lors
- de l'établissement d'une connexion SSL ou TLS avec un serveur LDAP.
- Les sections directory ou location peuvent posséder leurs propres
- configurations de certificats clients. Certains SDK LDAP (en
- particulier Novell) ne supportent pas les certificats clients par
- connexion, et renvoient une erreur lors de la connexion au serveur
- LDAP si vous tenter d'utiliser cette directive (Utilisez à la place
- la directive LDAPTrustedGlobalCert pour les certificats clients sous
- Novell - Voir plus haut le guide des certificats SSL/TLS pour plus
- de détails). Le paramètre type spécifie le type du certificat en
- cours de définition, en fonction du SDK LDAP utilisé. Les types
- supportés sont :</p>
- <ul>
- <li>CA_DER - certificat de CA codé en binaire DER</li>
- <li>CA_BASE64 - certificat de CA codé en PEM</li>
- <li>CERT_DER - certificat client codé en binaire DER</li>
- <li>CERT_BASE64 - certificat client codé en PEM</li>
- <li>CERT_NICKNAME - certificat client "nickname" (SDK Netscape)</li>
- <li>KEY_DER - clé privée codée en binaire DER</li>
- <li>KEY_BASE64 - clé privée codée en PEM</li>
- </ul>
+ <p>La documentation du SDK prétend que SSL et STARTTLS sont
+ supportés ; cependant, STARTTLS semble ne pas fonctionner avec
+ toutes les versions du SDK. Le mode SSL/TLS peut être défini en
+ utilisant le paramètre de la directive LDAPTrustedMode. Si une
+ URL de type
+ ldaps:// est spécifiée, le mode SSL est forcé. La documentation
+ OpenLDAP indique que le support SSL (ldaps://) tend à être
+ remplacé par TLS, bien que le mode SSL fonctionne toujours.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldaptrustedglobalcert" id="ldaptrustedglobalcert">Directive</a> <a name="LDAPTrustedGlobalCert" id="LDAPTrustedGlobalCert">LDAPTrustedGlobalCert</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom de fichier ou la base de données contenant
-les Autorités de Certification de confiance globales ou les certificats
-clients globaux</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTrustedGlobalCert <var>type</var>
-<var>chemin/nom-fichier</var> <var>[mot de passe]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier le chemin et le nom du
- fichier contenant les certificats des CA de confiance et/ou les
- certificats clients du système global que <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>
- utilisera pour établir une connexion SSL ou TLS avec un serveur
- LDAP. Notez que toute information relative aux certificats spécifiée
- en utilisant cette directive s'applique globalement à l'ensemble de
- l'installation du serveur. Certains SDK LDAP (en particulier Novell)
- nécessitent la définition globale de tous les certificats clients en
- utilisant cette directive. La plupart des autres SDK nécessitent la
- définition des certificats clients dans une section Directory ou
- Location en utilisant la directive LDAPTrustedClientCert. Si vous ne
- définissez pas ces directives correctement, une erreur sera générée
- lors des tentatives de contact avec un serveur LDAP, ou la connexion
- échouera silencieusement (Voir plus haut le guide des certificats
- SSL/TLS pour plus de détails). Le paramètre type spécifie le type de
- certificat en cours de définition, en fonction du SDK LDAP utilisé.
- Les types supportés sont :</p>
- <ul>
- <li>CA_DER - certificat de CA codé en binaire DER</li>
- <li>CA_BASE64 - certificat de CA codé en PEM</li>
- <li>CA_CERT7_DB - fichier de base de données des certificats de CA
- de Netscape cert7.db</li>
- <li>CA_SECMOD - fichier de base de données secmod de Netscape</li>
- <li>CERT_DER - certificat client codé en binaire DER</li>
- <li>CERT_BASE64 - certificat client codé en PEM</li>
- <li>CERT_KEY3_DB - fichier de base de données des certificats
- clients de Netscape key3.db</li>
- <li>CERT_NICKNAME - certificat client "nickname" (SDK Netscape)</li>
- <li>CERT_PFX - certificat client codé en PKCS#12 (SDK Novell)</li>
- <li>KEY_DER - clé privée codée en binaire DER</li>
- <li>KEY_BASE64 - clé privée codée en PEM</li>
- <li>KEY_PFX - clé privée codée en PKCS#12 (SDK Novell)</li>
- </ul>
+ <pre class="prettyprint lang-config"># Spécifie deux fichiers contenant des certificats de CA
+LDAPTrustedGlobalCert CA_DER /certs/cacert1.der
+LDAPTrustedGlobalCert CA_BASE64 /certs/cacert2.pem
+<Location /ldap-status>
+ SetHandler ldap-status
+
+ Require host yourdomain.example.com
+
+ LDAPTrustedClientCert CERT_BASE64 /certs/cert1.pem
+ LDAPTrustedClientCert KEY_BASE64 /certs/key1.pem
+ # CA certs respecified due to per-directory client certs
+ LDAPTrustedClientCert CA_DER /certs/cacert1.der
+ LDAPTrustedClientCert CA_BASE64 /certs/cacert2.pem
+ Satisfy any
+ AuthType Basic
+ AuthName "LDAP Protected"
+ AuthBasicProvider ldap
+ AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
+ Require valid-user
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldaptrustedmode" id="ldaptrustedmode">Directive</a> <a name="LDAPTrustedMode" id="LDAPTrustedMode">LDAPTrustedMode</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le mode (SSL ou TLS) à utiliser lors de la
-connexion à un serveur LDAP.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPTrustedMode <var>type</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Les modes suivants sont supportés :</p>
- <ul>
- <li>NONE - aucun chiffrement</li>
- <li>SSL - chiffrement ldaps:// sur le port par défaut 636</li>
- <li>TLS - chiffrement STARTTLS sur le port par défaut 389</li>
- </ul>
- <p>Les modes ci-dessus ne sont pas supportés par tous les SDK LDAP.
- Un message d'erreur sera généré à l'exécution si un mode n'est pas
- supporté, et la connexion au serveur LDAP échouera.
- </p>
+
- <p>Si une URL de type ldaps:// est spécifiée, le mode est forcé à
- SSL et la définition de LDAPTrustedMode est ignorée.</p>
+ <h3><a name="settingcerts-solaris" id="settingcerts-solaris">SDK Solaris</a></h3>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ldapverifyservercert" id="ldapverifyservercert">Directive</a> <a name="LDAPVerifyServerCert" id="LDAPVerifyServerCert">LDAPVerifyServerCert</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Force la vérification du certificat du
-serveur</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LDAPVerifyServerCert <var>On|Off</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LDAPVerifyServerCert On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Cette directive permet de spécifier s'il faut forcer la
- vérification d'un certificat de serveur lors de l'établissement
- d'une connexion SSL avec un serveur LDAP.</p>
+ <p>SSL/TLS pour les bibliothèques LDAP propres à Solaris n'est
+ pas encore supporté. Si nécessaire, installez et utilisez plutôt
+ les bibliothèques OpenLDAP.</p>
+
+
+
+ <h3><a name="settingcerts-microsoft" id="settingcerts-microsoft">SDK Microsoft</a></h3>
+
+ <p>La configuration des certificats SSL/TLS pour les
+ bibliothèques LDAP propres à Microsoft s'effectue à l'intérieur
+ du registre système, et aucune directive de configuration n'est
+ requise.</p>
+
+ <p>SSL et TLS sont tous deux supportés en utilisant des URLs de
+ type ldaps://, ou en définissant la directive LDAPTrustedMode à
+ cet effet.</p>
+
+ <p>Note: L'état du support des certificats clients n'est pas
+ encore connu pour ce SDK.</p>
+
+
</div>
</div>
<li><a href="../logs.html">Apache Log Files</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Buffer log entries in memory before writing to disk</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BufferedLogs On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BufferedLogs Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>The <code class="directive">BufferedLogs</code> directive causes
+ <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> to store several log entries in
+ memory and write them together to disk, rather than writing them
+ after each request. On some systems, this may result in more
+ efficient disk access and hence higher performance. It may be
+ set only once for the entire server; it cannot be configured
+ per virtual-host.</p>
+
+ <div class="note">This directive should be used with caution as a crash might
+ cause loss of logging data.</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets filename and format of log file</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
+<var>format</var>|<var>nickname</var>
+[env=[!]<var>environment-variable</var>|
+expr=<var>expression</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>The <code class="directive">CustomLog</code> directive is used to
+ log requests to the server. A log format is specified, and the
+ logging can optionally be made conditional on request
+ characteristics using environment variables.</p>
+
+ <p>The first argument, which specifies the location to which
+ the logs will be written, can take one of the following two
+ types of values:</p>
+
+ <dl>
+ <dt><var>file</var></dt>
+ <dd>A filename, relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</dd>
+
+ <dt><var>pipe</var></dt>
+ <dd>The pipe character "<code>|</code>", followed by the path
+ to a program to receive the log information on its standard
+ input. See the notes on <a href="../logs.html#piped">piped logs</a>
+ for more information.
+
+ <div class="warning"><h3>Security:</h3>
+ <p>If a program is used, then it will be run as the user who
+ started <code class="program"><a href="../programs/httpd.html">httpd</a></code>. This will be root if the server was
+ started by root; be sure that the program is secure.</p>
+ </div>
+ <div class="warning"><h3>Note</h3>
+ <p>When entering a file path on non-Unix platforms, care should be taken
+ to make sure that only forward slashed are used even though the platform
+ may allow the use of back slashes. In general it is a good idea to always
+ use forward slashes throughout the configuration files.</p>
+ </div></dd>
+ </dl>
+
+ <p>The second argument specifies what will be written to the
+ log file. It can specify either a <var>nickname</var> defined by
+ a previous <code class="directive"><a href="#logformat">LogFormat</a></code>
+ directive, or it can be an explicit <var>format</var> string as
+ described in the <a href="#formats">log formats</a> section.</p>
+
+ <p>For example, the following two sets of directives have
+ exactly the same effect:</p>
+
+ <pre class="prettyprint lang-config"># CustomLog with format nickname
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+CustomLog logs/access_log common
+
+# CustomLog with explicit format string
+CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"</pre>
+
+
+ <p>The third argument is optional and controls whether or
+ not to log a particular request. The condition can be the
+ presence or absence (in the case of a '<code>env=!<var>name</var></code>'
+ clause) of a particular variable in the server
+ <a href="../env.html">environment</a>. Alternatively, the condition
+ can be expressed as arbitrary boolean <a href="../expr.html">expression</a>. If the condition is not satisfied, the request
+ will not be logged. References to HTTP headers in the expression
+ will not cause the header names to be added to the Vary header.</p>
+
+ <p>Environment variables can be set on a per-request
+ basis using the <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>
+ and/or <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> modules. For
+ example, if you want to record requests for all GIF
+ images on your server in a separate logfile but not in your main
+ log, you can use:</p>
+
+ <pre class="prettyprint lang-config">SetEnvIf Request_URI \.gif$ gif-image
+CustomLog gif-requests.log common env=gif-image
+CustomLog nongif-requests.log common env=!gif-image</pre>
+
+
+ <p>Or, to reproduce the behavior of the old RefererIgnore
+ directive, you might use the following:</p>
+
+ <pre class="prettyprint lang-config">SetEnvIf Referer example\.com localreferer
+CustomLog referer.log referer env=!localreferer</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Describes a format for use in a log file</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
+[<var>nickname</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>This directive specifies the format of the access log
+ file.</p>
+
+ <p>The <code class="directive">LogFormat</code> directive can take one of two
+ forms. In the first form, where only one argument is specified,
+ this directive sets the log format which will be used by logs
+ specified in subsequent <code class="directive">TransferLog</code>
+ directives. The single argument can specify an explicit
+ <var>format</var> as discussed in the <a href="#formats">custom log
+ formats</a> section above. Alternatively, it can use a
+ <var>nickname</var> to refer to a log format defined in a
+ previous <code class="directive">LogFormat</code> directive as described
+ below.</p>
+
+ <p>The second form of the <code class="directive">LogFormat</code>
+ directive associates an explicit <var>format</var> with a
+ <var>nickname</var>. This <var>nickname</var> can then be used in
+ subsequent <code class="directive">LogFormat</code> or
+ <code class="directive"><a href="#customlog">CustomLog</a></code> directives
+ rather than repeating the entire format string. A
+ <code class="directive">LogFormat</code> directive that defines a nickname
+ <strong>does nothing else</strong> -- that is, it <em>only</em>
+ defines the nickname, it doesn't actually apply the format and make
+ it the default. Therefore, it will not affect subsequent
+ <code class="directive"><a href="#transferlog">TransferLog</a></code> directives.
+ In addition, <code class="directive">LogFormat</code> cannot use one nickname
+ to define another nickname. Note that the nickname should not contain
+ percent signs (<code>%</code>).</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common</pre>
+</div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify location of a log file</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>This directive has exactly the same arguments and effect as
+ the <code class="directive"><a href="#customlog">CustomLog</a></code>
+ directive, with the exception that it does not allow the log format
+ to be specified explicitly or for conditional logging of requests.
+ Instead, the log format is determined by the most recently specified
+ <code class="directive"><a href="#logformat">LogFormat</a></code> directive
+ which does not define a nickname. Common Log Format is used if no
+ other format has been specified.</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
+TransferLog logs/access_log</pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">Custom Log Formats</a></h2>
document for details on why your security could be compromised
if the directory where logfiles are stored is writable by
anyone other than the user that starts the server.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Buffer log entries in memory before writing to disk</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BufferedLogs On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BufferedLogs Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>The <code class="directive">BufferedLogs</code> directive causes
- <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> to store several log entries in
- memory and write them together to disk, rather than writing them
- after each request. On some systems, this may result in more
- efficient disk access and hence higher performance. It may be
- set only once for the entire server; it cannot be configured
- per virtual-host.</p>
-
- <div class="note">This directive should be used with caution as a crash might
- cause loss of logging data.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets filename and format of log file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>|
-expr=<var>expression</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>The <code class="directive">CustomLog</code> directive is used to
- log requests to the server. A log format is specified, and the
- logging can optionally be made conditional on request
- characteristics using environment variables.</p>
-
- <p>The first argument, which specifies the location to which
- the logs will be written, can take one of the following two
- types of values:</p>
-
- <dl>
- <dt><var>file</var></dt>
- <dd>A filename, relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</dd>
-
- <dt><var>pipe</var></dt>
- <dd>The pipe character "<code>|</code>", followed by the path
- to a program to receive the log information on its standard
- input. See the notes on <a href="../logs.html#piped">piped logs</a>
- for more information.
-
- <div class="warning"><h3>Security:</h3>
- <p>If a program is used, then it will be run as the user who
- started <code class="program"><a href="../programs/httpd.html">httpd</a></code>. This will be root if the server was
- started by root; be sure that the program is secure.</p>
- </div>
- <div class="warning"><h3>Note</h3>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashed are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </div></dd>
- </dl>
-
- <p>The second argument specifies what will be written to the
- log file. It can specify either a <var>nickname</var> defined by
- a previous <code class="directive"><a href="#logformat">LogFormat</a></code>
- directive, or it can be an explicit <var>format</var> string as
- described in the <a href="#formats">log formats</a> section.</p>
-
- <p>For example, the following two sets of directives have
- exactly the same effect:</p>
-
- <pre class="prettyprint lang-config"># CustomLog with format nickname
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-CustomLog logs/access_log common
-
-# CustomLog with explicit format string
-CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"</pre>
-
-
- <p>The third argument is optional and controls whether or
- not to log a particular request. The condition can be the
- presence or absence (in the case of a '<code>env=!<var>name</var></code>'
- clause) of a particular variable in the server
- <a href="../env.html">environment</a>. Alternatively, the condition
- can be expressed as arbitrary boolean <a href="../expr.html">expression</a>. If the condition is not satisfied, the request
- will not be logged. References to HTTP headers in the expression
- will not cause the header names to be added to the Vary header.</p>
-
- <p>Environment variables can be set on a per-request
- basis using the <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>
- and/or <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> modules. For
- example, if you want to record requests for all GIF
- images on your server in a separate logfile but not in your main
- log, you can use:</p>
-
- <pre class="prettyprint lang-config">SetEnvIf Request_URI \.gif$ gif-image
-CustomLog gif-requests.log common env=gif-image
-CustomLog nongif-requests.log common env=!gif-image</pre>
-
-
- <p>Or, to reproduce the behavior of the old RefererIgnore
- directive, you might use the following:</p>
-
- <pre class="prettyprint lang-config">SetEnvIf Referer example\.com localreferer
-CustomLog referer.log referer env=!localreferer</pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Describes a format for use in a log file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>This directive specifies the format of the access log
- file.</p>
-
- <p>The <code class="directive">LogFormat</code> directive can take one of two
- forms. In the first form, where only one argument is specified,
- this directive sets the log format which will be used by logs
- specified in subsequent <code class="directive">TransferLog</code>
- directives. The single argument can specify an explicit
- <var>format</var> as discussed in the <a href="#formats">custom log
- formats</a> section above. Alternatively, it can use a
- <var>nickname</var> to refer to a log format defined in a
- previous <code class="directive">LogFormat</code> directive as described
- below.</p>
-
- <p>The second form of the <code class="directive">LogFormat</code>
- directive associates an explicit <var>format</var> with a
- <var>nickname</var>. This <var>nickname</var> can then be used in
- subsequent <code class="directive">LogFormat</code> or
- <code class="directive"><a href="#customlog">CustomLog</a></code> directives
- rather than repeating the entire format string. A
- <code class="directive">LogFormat</code> directive that defines a nickname
- <strong>does nothing else</strong> -- that is, it <em>only</em>
- defines the nickname, it doesn't actually apply the format and make
- it the default. Therefore, it will not affect subsequent
- <code class="directive"><a href="#transferlog">TransferLog</a></code> directives.
- In addition, <code class="directive">LogFormat</code> cannot use one nickname
- to define another nickname. Note that the nickname should not contain
- percent signs (<code>%</code>).</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common</pre>
-</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify location of a log file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>This directive has exactly the same arguments and effect as
- the <code class="directive"><a href="#customlog">CustomLog</a></code>
- directive, with the exception that it does not allow the log format
- to be specified explicitly or for conditional logging of requests.
- Instead, the log format is determined by the most recently specified
- <code class="directive"><a href="#logformat">LogFormat</a></code> directive
- which does not define a nickname. Common Log Format is used if no
- other format has been specified.</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
-TransferLog logs/access_log</pre>
-</div>
-
</div>
</div>
<div class="bottomlang">
<li><a href="../logs.html">Apache ログファイル</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ディスクに書き出す前にメモリにログエントリをバッファする</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>BufferedLogs On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>BufferedLogs Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.41 以降</td></tr>
+</table>
+ <p><code class="directive">BufferedLogs</code> ディレクティブを使うと
+ <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> の挙動が変化して、
+ 複数のログを書き出す際に、それぞれのリクエスト処理後毎に
+ 書き出すのではなく、いったんメモリに蓄えてから、
+ まとめてディスクに書き出すようになります。
+ この結果ディスクアクセスがより効率的になり、
+ 高いパフォーマンスの得られるシステムもあるでしょう。
+ このディレクティブはサーバ全体で一度だけ設定できます;
+ バーチャルホストごとに設定することはできません。</p>
+
+ <div class="note">このディレクティブは実験的なものですので、
+ 使用する際は注意してください。</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ログファイルの名前と書式を設定する</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
+<var>format</var>|<var>nickname</var>
+[env=[!]<var>environment-variable</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p><code class="directive">CustomLog</code> ディレクティブはサーバへのリクエストを
+ ログ収集するために使われます。ログの書式が指定され、
+ 環境変数を使ってロギングが条件に応じて行なわれるようにすることもできます。</p>
+
+ <p>ログが書かれる場所を指定する最初の引数は以下の二つの形式の値を
+ とることができます:</p>
+
+ <dl>
+ <dt><var>file</var></dt>
+ <dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
+ からの相対パスで表されるファイル名。</dd>
+
+ <dt><var>pipe</var></dt>
+ <dd>パイプ文字 "<code>|</code>" と、その後に標準入力からログの
+ 情報を受けとるプログラムへのパスが続いたもの。
+
+ <div class="warning"><h3>セキュリティ</h3>
+ <p>もしプログラムが使用された場合、
+ <code class="program"><a href="../programs/httpd.html">httpd</a></code> が起動されたユーザとして実行されます。これはサーバが
+ root によって起動された場合は root になります。プログラムが
+ 安全であるように留意してください。</p>
+ </div>
+ <div class="warning"><h3>注</h3>
+ <p>Unix でないプラットフォームでファイルのパスを入力しているときは、
+ 使用しているプラットフォームがバックスラッシュの使用を許可していた
+ として、通常のスラッシュだけを使うように気をつけてください。
+ 一般的に、設定ファイル中では常に普通のスラッシュのみを使うようにする
+ 方が良いです。</p>
+ </div></dd>
+ </dl>
+
+ <p>二つめの引数はログファイルに何が書かれるかを指定します。
+ 前にある <code class="directive"><a href="#logformat">LogFormat</a></code> ディレクティブにより
+ 定義された <var>nickname</var> か、<a href="#formats">ログの書式</a>
+ のところで説明されている、明示的な <var>format</var> 文字列の
+ どちらかを指定することができます。</p>
+
+ <p>例えば、以下の二つのディレクティブ群は全く同じ効果をもたらします:</p>
+
+ <div class="example"><p><code>
+ # CustomLog with format nickname<br />
+ LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
+ CustomLog logs/access_log common<br />
+ <br />
+ # CustomLog with explicit format string<br />
+ CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
+ </code></p></div>
+
+ <p>三つ目の引数は省略可能で、サーバの環境にある変数があるかないかに
+ 応じてリクエストをログ収集するかどうかを制御するために使うことができます。
+ 指定された<a href="../env.html">環境変数</a>がリクエストに対して
+ 設定されていた場合 ('<code>env=!<var>name</var></code>' 文が使われたときは
+ 設定されていない場合)、リクエストがログ収集されます。</p>
+
+ <p>環境変数は <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> モジュールと
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> モジュールの両方もしくは
+ 片方を用いてリクエストごとに設定することができます。
+ 例えば、サーバにあるすべての GIF 画像へのリクエストを別のログファイル
+ には記録したいけれど、メインログには記録したくない、というときは
+ 以下のものを使うことができます:</p>
+
+ <div class="example"><p><code>
+ SetEnvIf Request_URI \.gif$ gif-image<br />
+ CustomLog gif-requests.log common env=gif-image<br />
+ CustomLog nongif-requests.log common env=!gif-image
+ </code></p></div>
+
+ <p>古い RefererIgnore ディレクティブと同じ挙動をさせたい場合は、
+ 次のようにします:</p>
+
+ <div class="example"><p><code>
+ SetEnvIf Referer example\.com localreferer<br />
+ CustomLog referer.log referer env=!localreferer
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ログファイルで使用する書式を設定する</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
+[<var>nickname</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>このディレクティブはアクセスログファイルの書式を指定します。</p>
+
+ <p><code class="directive">LogFormat</code> ディレクティブは二つの形式のどちらかを
+ とることができます。最初の形式では一つの引数のみが指定され、
+ 続く <code class="directive">TransferLog</code>
+ で指定されたログで使われるログの書式を設定します。この単独の引数では
+ 上の<a href="#formats">カスタムログ書式</a>で説明されているように
+ <var>format</var> を明示的に指定することができます。
+ もしくは、下で説明されているように前に <code class="directive">LogFormat</code>
+ ディレクティブで定義されたログの書式を <var>nickname</var>を使って
+ 参照することもできます。</p>
+
+ <p><code class="directive">LogFormat</code> ディレクティブの二つめの形式は
+ <var>format</var> に <var>nickname</var> を与えます。
+ フォーマット文字列全体を再び書くかわりに、
+ この <var>nickname</var> を続きの <code class="directive">LogFormat</code> ディレクティブや
+ <code class="directive">CustomLog</code> ディレクティブで使うことができます。
+ Nickname を定義する <code class="directive">LogFormat</code> ディレクティブは
+ <strong>他には何もしません</strong> -- すなわち、ニックネームを定義
+ する<em>だけ</em>で、実際に書式を適用してデフォルトにするということは行ないません。
+ ですから、これは続く <code class="directive"><a href="#transferlog">TransferLog</a></code>
+ ディレクティブには影響を与えません。
+ さらに、<code class="directive">LogFormat</code> ディレクティブは既存の nickname を
+ 使って別の nickname を定義することはできません。Nickname には
+ パーセント記号 (<code>%</code>) が含まれていてはいけないことにも注意
+ してください。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ログファイルの位置を指定</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>このディレクティブは、ログ書式を直接指定できないことと、
+ 条件付きロギングが無いことを除くと、<code class="directive"><a href="#customlog">CustomLog</a></code> と全く同じ引数と効果があります。
+ 直接ログ書式を指定する代わりに、ログの書式はそこまでで一番最後に指定された
+ ニックネームを定義しない
+ <code class="directive"><a href="#logformat">LogFormat</a></code> ディレクティブ
+ で定義されたものを使います。
+ もし他の書式が全く指定されていないときは Common Log Format
+ が使われます。</p>
+
+ <div class="example"><h3>例</h3><p><code>
+ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
+ TransferLog logs/access_log
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">カスタムログ書式</a></h2>
書き込み可能なときにセキュリティの問題が発生する理由の詳細は<a href="../misc/security_tips.html#serverroot">セキュリティのこつ</a>
を参照してください。</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ディスクに書き出す前にメモリにログエントリをバッファする</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>BufferedLogs On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>BufferedLogs Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.41 以降</td></tr>
-</table>
- <p><code class="directive">BufferedLogs</code> ディレクティブを使うと
- <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> の挙動が変化して、
- 複数のログを書き出す際に、それぞれのリクエスト処理後毎に
- 書き出すのではなく、いったんメモリに蓄えてから、
- まとめてディスクに書き出すようになります。
- この結果ディスクアクセスがより効率的になり、
- 高いパフォーマンスの得られるシステムもあるでしょう。
- このディレクティブはサーバ全体で一度だけ設定できます;
- バーチャルホストごとに設定することはできません。</p>
-
- <div class="note">このディレクティブは実験的なものですので、
- 使用する際は注意してください。</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ログファイルの名前と書式を設定する</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
-</table>
- <p><code class="directive">CustomLog</code> ディレクティブはサーバへのリクエストを
- ログ収集するために使われます。ログの書式が指定され、
- 環境変数を使ってロギングが条件に応じて行なわれるようにすることもできます。</p>
-
- <p>ログが書かれる場所を指定する最初の引数は以下の二つの形式の値を
- とることができます:</p>
-
- <dl>
- <dt><var>file</var></dt>
- <dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- からの相対パスで表されるファイル名。</dd>
-
- <dt><var>pipe</var></dt>
- <dd>パイプ文字 "<code>|</code>" と、その後に標準入力からログの
- 情報を受けとるプログラムへのパスが続いたもの。
-
- <div class="warning"><h3>セキュリティ</h3>
- <p>もしプログラムが使用された場合、
- <code class="program"><a href="../programs/httpd.html">httpd</a></code> が起動されたユーザとして実行されます。これはサーバが
- root によって起動された場合は root になります。プログラムが
- 安全であるように留意してください。</p>
- </div>
- <div class="warning"><h3>注</h3>
- <p>Unix でないプラットフォームでファイルのパスを入力しているときは、
- 使用しているプラットフォームがバックスラッシュの使用を許可していた
- として、通常のスラッシュだけを使うように気をつけてください。
- 一般的に、設定ファイル中では常に普通のスラッシュのみを使うようにする
- 方が良いです。</p>
- </div></dd>
- </dl>
-
- <p>二つめの引数はログファイルに何が書かれるかを指定します。
- 前にある <code class="directive"><a href="#logformat">LogFormat</a></code> ディレクティブにより
- 定義された <var>nickname</var> か、<a href="#formats">ログの書式</a>
- のところで説明されている、明示的な <var>format</var> 文字列の
- どちらかを指定することができます。</p>
-
- <p>例えば、以下の二つのディレクティブ群は全く同じ効果をもたらします:</p>
-
- <div class="example"><p><code>
- # CustomLog with format nickname<br />
- LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
- CustomLog logs/access_log common<br />
- <br />
- # CustomLog with explicit format string<br />
- CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
- </code></p></div>
-
- <p>三つ目の引数は省略可能で、サーバの環境にある変数があるかないかに
- 応じてリクエストをログ収集するかどうかを制御するために使うことができます。
- 指定された<a href="../env.html">環境変数</a>がリクエストに対して
- 設定されていた場合 ('<code>env=!<var>name</var></code>' 文が使われたときは
- 設定されていない場合)、リクエストがログ収集されます。</p>
-
- <p>環境変数は <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> モジュールと
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> モジュールの両方もしくは
- 片方を用いてリクエストごとに設定することができます。
- 例えば、サーバにあるすべての GIF 画像へのリクエストを別のログファイル
- には記録したいけれど、メインログには記録したくない、というときは
- 以下のものを使うことができます:</p>
-
- <div class="example"><p><code>
- SetEnvIf Request_URI \.gif$ gif-image<br />
- CustomLog gif-requests.log common env=gif-image<br />
- CustomLog nongif-requests.log common env=!gif-image
- </code></p></div>
-
- <p>古い RefererIgnore ディレクティブと同じ挙動をさせたい場合は、
- 次のようにします:</p>
-
- <div class="example"><p><code>
- SetEnvIf Referer example\.com localreferer<br />
- CustomLog referer.log referer env=!localreferer
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ログファイルで使用する書式を設定する</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>このディレクティブはアクセスログファイルの書式を指定します。</p>
-
- <p><code class="directive">LogFormat</code> ディレクティブは二つの形式のどちらかを
- とることができます。最初の形式では一つの引数のみが指定され、
- 続く <code class="directive">TransferLog</code>
- で指定されたログで使われるログの書式を設定します。この単独の引数では
- 上の<a href="#formats">カスタムログ書式</a>で説明されているように
- <var>format</var> を明示的に指定することができます。
- もしくは、下で説明されているように前に <code class="directive">LogFormat</code>
- ディレクティブで定義されたログの書式を <var>nickname</var>を使って
- 参照することもできます。</p>
-
- <p><code class="directive">LogFormat</code> ディレクティブの二つめの形式は
- <var>format</var> に <var>nickname</var> を与えます。
- フォーマット文字列全体を再び書くかわりに、
- この <var>nickname</var> を続きの <code class="directive">LogFormat</code> ディレクティブや
- <code class="directive">CustomLog</code> ディレクティブで使うことができます。
- Nickname を定義する <code class="directive">LogFormat</code> ディレクティブは
- <strong>他には何もしません</strong> -- すなわち、ニックネームを定義
- する<em>だけ</em>で、実際に書式を適用してデフォルトにするということは行ないません。
- ですから、これは続く <code class="directive"><a href="#transferlog">TransferLog</a></code>
- ディレクティブには影響を与えません。
- さらに、<code class="directive">LogFormat</code> ディレクティブは既存の nickname を
- 使って別の nickname を定義することはできません。Nickname には
- パーセント記号 (<code>%</code>) が含まれていてはいけないことにも注意
- してください。</p>
-
- <div class="example"><h3>例</h3><p><code>
- LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ログファイルの位置を指定</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>このディレクティブは、ログ書式を直接指定できないことと、
- 条件付きロギングが無いことを除くと、<code class="directive"><a href="#customlog">CustomLog</a></code> と全く同じ引数と効果があります。
- 直接ログ書式を指定する代わりに、ログの書式はそこまでで一番最後に指定された
- ニックネームを定義しない
- <code class="directive"><a href="#logformat">LogFormat</a></code> ディレクティブ
- で定義されたものを使います。
- もし他の書式が全く指定されていないときは Common Log Format
- が使われます。</p>
-
- <div class="example"><h3>例</h3><p><code>
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
- TransferLog logs/access_log
- </code></p></div>
-
-</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_log_config.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../logs.html">¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Buffer log entries in memory before writing to disk</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code /></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
+</table><p>Documentation not yet translated. Please see English version of document.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>·Î±×ÆÄÀÏ À̸§°ú Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
+<var>format</var>|<var>nickname</var>
+[env=[!]<var>environment-variable</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>¼¹ö°¡ ¿äûÀ» ·Î±×¿¡ ³²±æ¶§ <code class="directive">CustomLog</code>
+ Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. ·Î±× Çü½ÄÀ» ÁöÁ¤ÇÏ°í, ȯ°æº¯¼ö¸¦ »ç¿ëÇÏ¿©
+ ¿äûÀÇ Æ¯Â¡¿¡ µû¶ó ¼±ÅÃÀûÀ¸·Î ·Î±×¸¦ ³²±æ ¼öµµ ÀÖ´Ù.</p>
+
+ <p>·Î±×¸¦ ±â·ÏÇÒ Àå¼Ò¸¦ ÁöÁ¤Çϴ ù¹ø° ¾Æ±Ô¸ÕÆ®¿¡´Â ´ÙÀ½
+ µÑÁß Çϳª¸¦ »ç¿ëÇÑ´Ù.</p>
+
+ <dl>
+ <dt><var>file</var></dt>
+ <dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡
+ »ó´ëÀûÀÎ ÆÄÀϸí.</dd>
+
+ <dt><var>pipe</var></dt>
+ <dd>ÆÄÀÌÇÁ¹®ÀÚ "<code>|</code>"µÚ¿¡ ·Î±× Á¤º¸¸¦ Ç¥ÁØÀÔ·ÂÀ¸·Î
+ ¹ÞÀ» ÇÁ·Î±×·¥ °æ·Î¸¦ Àû´Â´Ù.
+
+ <div class="warning"><h3>º¸¾È:</h3>
+ <p>ÇÁ·Î±×·¥À» »ç¿ëÇÑ´Ù¸é ÇÁ·Î±×·¥Àº À¥¼¹ö¸¦ ½ÃÀÛÇÑ »ç¿ëÀÚ
+ ±ÇÇÑÀ¸·Î ½ÇÇàµÈ´Ù. ¼¹ö¸¦ root·Î ½ÃÀÛÇÑ´Ù¸é ÇÁ·Î±×·¥µµ
+ root·Î ½ÇÇàÇϹǷΠÇÁ·Î±×·¥ÀÌ ¾ÈÀüÇÑÁö È®ÀÎÇ϶ó.</p>
+ </div>
+ <div class="warning"><h3>ÁÖÀÇ</h3>
+ <p>À¯´Ð½º°¡ ¾Æ´Ñ Ç÷¡Æû¿¡¼ ÆÄÀÏ°æ·Î¸¦ ÀÔ·ÂÇÒ¶§ Ç÷¡ÆûÀÌ
+ ¹é½½·¡½¬¸¦ »ç¿ëÇÏ´õ¶óµµ ¹Ýµå½Ã ½½·¡½¬¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
+ ÀϹÝÀûÀ¸·Î ¼³Á¤ÆÄÀÏ¿¡¼´Â Ç×»ó ½½·¡½¬¸¦ »ç¿ëÇÏ´Â °ÍÀÌ
+ ÁÁ´Ù.</p>
+ </div></dd>
+ </dl>
+
+ <p>µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÒ ³»¿ëÀ» ÁöÁ¤ÇÑ´Ù.
+ Àü¿¡ <code class="directive"><a href="#logformat">LogFormat</a></code>À¸·Î
+ Á¤ÀÇÇÑ <var>nickname</var>À» »ç¿ëÇϰųª Á÷Á¢ <a href="#formats">·Î±× Çü½Ä</a> Àý¿¡¼ ¼³¸íÇÑ <var>format</var>
+ ¹®ÀÚ¿À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
+
+ <p>¿¹¸¦ µé¾î, ´ÙÀ½ µÎ Áö½Ã¾î´Â ¶È°°Àº ÀÏÀ» ÇÑ´Ù.</p>
+
+ <div class="example"><p><code>
+ # Çü½Ä º°ÄªÀ» »ç¿ëÇÑ CustomLog<br />
+ LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
+ CustomLog logs/access_log common<br />
+ <br />
+ # Á÷Á¢ Çü½Ä ¹®ÀÚ¿À» »ç¿ëÇÑ CustomLog<br />
+ CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
+ </code></p></div>
+
+ <p>¼¼¹ø° ¾Æ±Ô¸ÕÆ®´Â ¾ø¾îµµ µÇ¸ç, ƯÁ¤ ¼¹ö ȯ°æº¯¼ö À¯¹«¿¡
+ µû¶ó ¿äûÀ» ·Î±×¿¡ ±â·ÏÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù. ¿äû¿¡ ÁöÁ¤ÇÑ
+ <a href="../env.html">ȯ°æº¯¼ö</a>°¡ Á¤ÀǵÇÀÖ´Ù¸é (ȤÀº
+ '<code>env=!<var>name</var></code>'¸¦ »ç¿ëÇÑ °æ¿ì ¾ø´Ù¸é)
+ ¿äûÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù.</p>
+
+ <p><code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>³ª <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
+ ¸ðµâÀ» »ç¿ëÇÏ¿© ¿äûº°·Î ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦
+ µé¾î, ¼¹ö°¡ GIF ±×¸²¿¡ ´ëÇÑ ¸ðµç ¿äûÀ» ÁÖ¼¹ö ·Î±×°¡ ¾Æ´Ñ
+ ´Ù¸¥ ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÏ·Á¸é,</p>
+
+ <div class="example"><p><code>
+ SetEnvIf Request_URI \.gif$ gif-image<br />
+ CustomLog gif-requests.log common env=gif-image<br />
+ CustomLog nongif-requests.log common env=!gif-image
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>·Î±×ÆÄÀÏ¿¡ »ç¿ëÇÒ Çü½ÄÀ» ±â¼úÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
+[<var>nickname</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>ÀÌ Áö½Ã¾î´Â Á¢±Ù ·Î±×ÆÄÀÏÀÇ Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù.</p>
+
+ <p><code class="directive">LogFormat</code> Áö½Ã¾î´Â µÎ°¡Áö Çü½ÄÀ¸·Î
+ »ç¿ëÇÑ´Ù. ù¹ø° Çü½ÄÀº ¾Æ±Ô¸ÕÆ®¸¦ ÇÑ°³¸¸ »ç¿ëÇÏ¿© ´ÙÀ½
+ <code class="directive">TransferLog</code> Áö½Ã¾îµéÀÌ »ç¿ëÇÒ ·Î±×
+ Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ ¾Æ±Ô¸ÕÆ®¿¡ À§ÀÇ <a href="#formats">·Î±×
+ Çü½Ä ÁöÁ¤Çϱâ</a> Àý¿¡¼ ¼³¸íÇÑ <var>format</var>À» Á÷Á¢
+ »ç¿ëÇϰųª, ´ÙÀ½¿¡ ¼³¸íÇÒ <code class="directive">LogFormat</code>
+ Áö½Ã¾î·Î ¹Ì¸® Á¤ÀÇÇÑ (·Î±× Çü½ÄÀ» ÁöĪÇÏ´Â) <var>nickname</var>À»
+ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
+
+ <p><code class="directive">LogFormat</code> Áö½Ã¾îÀÇ µÎ¹ø° Çü½ÄÀº
+ <var>format</var>°ú <var>nickname</var>À» ¿¬°áÇÑ´Ù. ±×·¯¸é
+ µÚ¿¡¼ »ç¿ëÇÏ´Â <code class="directive">LogFormat</code>À̳ª <code class="directive"><a href="#customlog">CustomLog</a></code> Áö½Ã¾î¿¡ ¹Ýº¹Çؼ
+ Çü½Ä ¹®ÀÚ¿À» ¸ðµÎ ÀÔ·ÂÇÏ´Â ´ë½Å <var>nickname</var>À» »ç¿ëÇÒ
+ ¼ö ÀÖ´Ù. º°ÄªÀ» Á¤ÀÇÇÏ´Â <code class="directive">LogFormat</code>
+ Áö½Ã¾î´Â <strong>ÀÌ ¿Ü¿¡´Â ¾Æ¹« ±â´ÉÀ» ÇÏÁö ¾Ê´Â´Ù</strong>.
+ Áï, º°Äª<em>¸¸</em>À» Á¤ÀÇÇϸç, ½ÇÁ¦·Î Çü½ÄÀ» Àû¿ëÇϰųª
+ Çü½ÄÀ» ±âº»°ªÀ¸·Î ¸¸µéÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ´ÙÀ½¿¡ ³ª¿À´Â
+ <code class="directive"><a href="#transferlog">TransferLog</a></code>
+ Áö½Ã¾î¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ¶Ç,
+ <code class="directive">LogFormat</code>Àº º°ÄªÀ¸·Î ´Ù¸¥ º°ÄªÀ»
+ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. º°Äª À̸§¿¡´Â ÆÛ¼¾Æ® ±âÈ£(<code>%</code>)¸¦
+ »ç¿ëÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó.</p>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>·Î±×ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>ÀÌ Áö½Ã¾î´Â <code class="directive"><a href="#customlog">CustomLog</a></code> Áö½Ã¾î¿Í ¾Æ±Ô¸ÕÆ®¿Í
+ ±â´ÉÀÌ ºñ½ÁÇÏÁö¸¸, ·Î±× Çü½ÄÀ» Á÷Á¢ ÁöÁ¤Çϰųª ¿äûÀ» Á¶°Ç¿¡
+ µû¶ó ·Î±×¿¡ ³²±æ ¼ö ¾ø´Ù. ´ë½Å °¡Àå ÃÖ±Ù »ç¿ëÇÑ (º°ÄªÀ»
+ Á¤ÀÇÇÏÁö ¾ÊÀº) <code class="directive"><a href="#logformat">LogFormat</a></code> Áö½Ã¾î°¡ ÁöÁ¤ÇÑ
+ ·Î±× Çü½ÄÀ» »ç¿ëÇÑ´Ù. ¹Ì¸® Çü½ÄÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù¸é Common
+ Log FormatÀ» »ç¿ëÇÑ´Ù.</p>
+
+ <div class="example"><h3>¿¹Á¦</h3><p><code>
+ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
+ TransferLog logs/access_log
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">·Î±× Çü½Ä ÁöÁ¤Çϱâ</a></h2>
<a href="../misc/security_tips.html#serverroot">º¸¾È ÆÁ</a>
¹®¼¸¦ Âü°íÇ϶ó.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Buffer log entries in memory before writing to disk</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code /></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
-</table><p>Documentation not yet translated. Please see English version of document.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>·Î±×ÆÄÀÏ À̸§°ú Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>¼¹ö°¡ ¿äûÀ» ·Î±×¿¡ ³²±æ¶§ <code class="directive">CustomLog</code>
- Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. ·Î±× Çü½ÄÀ» ÁöÁ¤ÇÏ°í, ȯ°æº¯¼ö¸¦ »ç¿ëÇÏ¿©
- ¿äûÀÇ Æ¯Â¡¿¡ µû¶ó ¼±ÅÃÀûÀ¸·Î ·Î±×¸¦ ³²±æ ¼öµµ ÀÖ´Ù.</p>
-
- <p>·Î±×¸¦ ±â·ÏÇÒ Àå¼Ò¸¦ ÁöÁ¤Çϴ ù¹ø° ¾Æ±Ô¸ÕÆ®¿¡´Â ´ÙÀ½
- µÑÁß Çϳª¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <dl>
- <dt><var>file</var></dt>
- <dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡
- »ó´ëÀûÀÎ ÆÄÀϸí.</dd>
-
- <dt><var>pipe</var></dt>
- <dd>ÆÄÀÌÇÁ¹®ÀÚ "<code>|</code>"µÚ¿¡ ·Î±× Á¤º¸¸¦ Ç¥ÁØÀÔ·ÂÀ¸·Î
- ¹ÞÀ» ÇÁ·Î±×·¥ °æ·Î¸¦ Àû´Â´Ù.
-
- <div class="warning"><h3>º¸¾È:</h3>
- <p>ÇÁ·Î±×·¥À» »ç¿ëÇÑ´Ù¸é ÇÁ·Î±×·¥Àº À¥¼¹ö¸¦ ½ÃÀÛÇÑ »ç¿ëÀÚ
- ±ÇÇÑÀ¸·Î ½ÇÇàµÈ´Ù. ¼¹ö¸¦ root·Î ½ÃÀÛÇÑ´Ù¸é ÇÁ·Î±×·¥µµ
- root·Î ½ÇÇàÇϹǷΠÇÁ·Î±×·¥ÀÌ ¾ÈÀüÇÑÁö È®ÀÎÇ϶ó.</p>
- </div>
- <div class="warning"><h3>ÁÖÀÇ</h3>
- <p>À¯´Ð½º°¡ ¾Æ´Ñ Ç÷¡Æû¿¡¼ ÆÄÀÏ°æ·Î¸¦ ÀÔ·ÂÇÒ¶§ Ç÷¡ÆûÀÌ
- ¹é½½·¡½¬¸¦ »ç¿ëÇÏ´õ¶óµµ ¹Ýµå½Ã ½½·¡½¬¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
- ÀϹÝÀûÀ¸·Î ¼³Á¤ÆÄÀÏ¿¡¼´Â Ç×»ó ½½·¡½¬¸¦ »ç¿ëÇÏ´Â °ÍÀÌ
- ÁÁ´Ù.</p>
- </div></dd>
- </dl>
-
- <p>µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÒ ³»¿ëÀ» ÁöÁ¤ÇÑ´Ù.
- Àü¿¡ <code class="directive"><a href="#logformat">LogFormat</a></code>À¸·Î
- Á¤ÀÇÇÑ <var>nickname</var>À» »ç¿ëÇϰųª Á÷Á¢ <a href="#formats">·Î±× Çü½Ä</a> Àý¿¡¼ ¼³¸íÇÑ <var>format</var>
- ¹®ÀÚ¿À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ´ÙÀ½ µÎ Áö½Ã¾î´Â ¶È°°Àº ÀÏÀ» ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- # Çü½Ä º°ÄªÀ» »ç¿ëÇÑ CustomLog<br />
- LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
- CustomLog logs/access_log common<br />
- <br />
- # Á÷Á¢ Çü½Ä ¹®ÀÚ¿À» »ç¿ëÇÑ CustomLog<br />
- CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
- </code></p></div>
-
- <p>¼¼¹ø° ¾Æ±Ô¸ÕÆ®´Â ¾ø¾îµµ µÇ¸ç, ƯÁ¤ ¼¹ö ȯ°æº¯¼ö À¯¹«¿¡
- µû¶ó ¿äûÀ» ·Î±×¿¡ ±â·ÏÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù. ¿äû¿¡ ÁöÁ¤ÇÑ
- <a href="../env.html">ȯ°æº¯¼ö</a>°¡ Á¤ÀǵÇÀÖ´Ù¸é (ȤÀº
- '<code>env=!<var>name</var></code>'¸¦ »ç¿ëÇÑ °æ¿ì ¾ø´Ù¸é)
- ¿äûÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù.</p>
-
- <p><code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>³ª <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- ¸ðµâÀ» »ç¿ëÇÏ¿© ¿äûº°·Î ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦
- µé¾î, ¼¹ö°¡ GIF ±×¸²¿¡ ´ëÇÑ ¸ðµç ¿äûÀ» ÁÖ¼¹ö ·Î±×°¡ ¾Æ´Ñ
- ´Ù¸¥ ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÏ·Á¸é,</p>
-
- <div class="example"><p><code>
- SetEnvIf Request_URI \.gif$ gif-image<br />
- CustomLog gif-requests.log common env=gif-image<br />
- CustomLog nongif-requests.log common env=!gif-image
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>·Î±×ÆÄÀÏ¿¡ »ç¿ëÇÒ Çü½ÄÀ» ±â¼úÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â Á¢±Ù ·Î±×ÆÄÀÏÀÇ Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
- <p><code class="directive">LogFormat</code> Áö½Ã¾î´Â µÎ°¡Áö Çü½ÄÀ¸·Î
- »ç¿ëÇÑ´Ù. ù¹ø° Çü½ÄÀº ¾Æ±Ô¸ÕÆ®¸¦ ÇÑ°³¸¸ »ç¿ëÇÏ¿© ´ÙÀ½
- <code class="directive">TransferLog</code> Áö½Ã¾îµéÀÌ »ç¿ëÇÒ ·Î±×
- Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ ¾Æ±Ô¸ÕÆ®¿¡ À§ÀÇ <a href="#formats">·Î±×
- Çü½Ä ÁöÁ¤Çϱâ</a> Àý¿¡¼ ¼³¸íÇÑ <var>format</var>À» Á÷Á¢
- »ç¿ëÇϰųª, ´ÙÀ½¿¡ ¼³¸íÇÒ <code class="directive">LogFormat</code>
- Áö½Ã¾î·Î ¹Ì¸® Á¤ÀÇÇÑ (·Î±× Çü½ÄÀ» ÁöĪÇÏ´Â) <var>nickname</var>À»
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code class="directive">LogFormat</code> Áö½Ã¾îÀÇ µÎ¹ø° Çü½ÄÀº
- <var>format</var>°ú <var>nickname</var>À» ¿¬°áÇÑ´Ù. ±×·¯¸é
- µÚ¿¡¼ »ç¿ëÇÏ´Â <code class="directive">LogFormat</code>À̳ª <code class="directive"><a href="#customlog">CustomLog</a></code> Áö½Ã¾î¿¡ ¹Ýº¹Çؼ
- Çü½Ä ¹®ÀÚ¿À» ¸ðµÎ ÀÔ·ÂÇÏ´Â ´ë½Å <var>nickname</var>À» »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. º°ÄªÀ» Á¤ÀÇÇÏ´Â <code class="directive">LogFormat</code>
- Áö½Ã¾î´Â <strong>ÀÌ ¿Ü¿¡´Â ¾Æ¹« ±â´ÉÀ» ÇÏÁö ¾Ê´Â´Ù</strong>.
- Áï, º°Äª<em>¸¸</em>À» Á¤ÀÇÇϸç, ½ÇÁ¦·Î Çü½ÄÀ» Àû¿ëÇϰųª
- Çü½ÄÀ» ±âº»°ªÀ¸·Î ¸¸µéÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ´ÙÀ½¿¡ ³ª¿À´Â
- <code class="directive"><a href="#transferlog">TransferLog</a></code>
- Áö½Ã¾î¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ¶Ç,
- <code class="directive">LogFormat</code>Àº º°ÄªÀ¸·Î ´Ù¸¥ º°ÄªÀ»
- Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. º°Äª À̸§¿¡´Â ÆÛ¼¾Æ® ±âÈ£(<code>%</code>)¸¦
- »ç¿ëÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>·Î±×ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code class="directive"><a href="#customlog">CustomLog</a></code> Áö½Ã¾î¿Í ¾Æ±Ô¸ÕÆ®¿Í
- ±â´ÉÀÌ ºñ½ÁÇÏÁö¸¸, ·Î±× Çü½ÄÀ» Á÷Á¢ ÁöÁ¤Çϰųª ¿äûÀ» Á¶°Ç¿¡
- µû¶ó ·Î±×¿¡ ³²±æ ¼ö ¾ø´Ù. ´ë½Å °¡Àå ÃÖ±Ù »ç¿ëÇÑ (º°ÄªÀ»
- Á¤ÀÇÇÏÁö ¾ÊÀº) <code class="directive"><a href="#logformat">LogFormat</a></code> Áö½Ã¾î°¡ ÁöÁ¤ÇÑ
- ·Î±× Çü½ÄÀ» »ç¿ëÇÑ´Ù. ¹Ì¸® Çü½ÄÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù¸é Common
- Log FormatÀ» »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
- TransferLog logs/access_log
- </code></p></div>
-
-</div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_log_config.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../logs.html">Apache Günlük Dosyaları</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Günlük girdilerini diske yazmadan önce bellekte tamponlar
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>BufferedLogs On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>BufferedLogs Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Uyumluluk:</a></th><td>2.0.41 ve sonrasında mevcuttur.</td></tr>
+</table>
+ <p><code class="directive">BufferedLogs</code> yönergesi,
+ <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> modülünün çeşitli günlük girdilerini her
+ isteğin hemen ardından tek tek değil, bir bütün halinde diske yazılmak
+ üzere bellekte saklanmasını sağlar. Bu, bazı sistemlerde daha verimli
+ disk erişimi, dolayısıyla daha yüksek başarım sağlayabilir. Sadece
+ sunucu geneli için belirtilebilir, sanal konaklar için ayrı ayrı
+ yapılandırılamaz.</p>
+
+ <div class="note">Bir çökme günlük verisi kaybına sebep olacağından bu yönerge
+ dikkatli kullanılmalıdır.</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Günlük dosyasın ismini ve girdi biçemini belirler.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>CustomLog <var>dosya</var>|<var>borulu-süreç</var>
+<var>biçem</var>|<var>takma-ad</var>
+[env=[!]<var>ortam-değişkeni</var>]|
+expr=<var>ifade</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p><code class="directive">CustomLog</code> yönergesi istekleri günlüğe kaydetmek
+ için kullanılır. Yönerge ile bir günlük biçemi belirtilebilir ve günlük
+ kaydı isteğin özelliklerine bağlı olarak ortam değişkenleri vasıtasıyla
+ şarta bağlı kılınabilir.</p>
+
+ <p>İlk argümanda günlüğün yazılacağı yer belirtilir. İki tür yer
+ belirtilebilir:</p>
+
+ <dl>
+ <dt><var>dosya</var></dt>
+ <dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> yönergesinin
+ değerine göreli bir dosya ismi.</dd>
+
+ <dt><var>borulu-süreç</var></dt>
+ <dd>"<code>|</code>" boru karakteri ile öncelenmiş olarak günlük
+ bilgisini standart girdisinden kabul edecek sürecin ismi (veya komut
+ satırı) Daha fazla bilgi için <a href="../logs.html#piped">borulu
+ günlükler</a>e bakınız.
+
+ <div class="warning"><h3>Güvenlik:</h3>
+ <p>Bir borulu süreç kullanılmışsa, süreç <code class="program"><a href="../programs/httpd.html">httpd</a></code>’yi
+ başlatan kullanıcı tarafından başlatılacaktır. Sunucu root tarafından
+ başlatılıyorsa bu root olacaktır; bu bakımdan günlük kaydını alacak
+ programın güvenilir olması önemlidir.</p>
+ </div>
+ <div class="warning"><h3>Bilginize</h3>
+ <p>Dosya yolunu belirtirken tersbölü çizgisi kullanılan Unix dışı
+ platformlarda bile yapılandırma dosyasında bu amaçla normal bölü
+ çizgilerini kullanmaya özen gösterilmelidir.</p>
+ </div></dd>
+ </dl>
+
+ <p>İkinci argümanda günlüğe ne yazılacağı belirtilir. Ya evvelce
+ <code class="directive"><a href="#logformat">LogFormat</a></code> yönergesi ile
+ tanımlanmış bir <var>takma-ad</var> ya da içeriği <a href="#formats">Günlük Girdilerinin Kişiselleştirilmesi</a> bölümünde
+ açıklanmış bir <var>biçem</var> dizgesi olabilir.</p>
+
+ <p>Örneğin, aşağıdaki iki yönerge kümesi aynı etkiye sahiptir:</p>
+
+ <div class="example"><p><code>
+ # Biçem dizgesi yerine takma ad içeren CustomLog<br />
+ LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
+ CustomLog logs/access_log common<br />
+ <br />
+ # Biçem dizgesinin kendisini içeren CustomLog<br />
+ CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
+ </code></p></div>
+
+ <p>Üçüncü argüman isteğe bağlı olup,belli bir isteğin günlüğe kaydedilip
+ kaydedilmeyeceğini belirler. Koşul, sunucu <a href="../env.html">ortamında</a> belli bir değişkenin varlığı veya
+ yokluğu olabilir (bir '<code>env=!<var>isim</var></code>' durumu).
+ İstenirse koşul keyfi bir mantıksal <a href="../expr.html">ifade</a>
+ olarak da belirtilebilir. Eğer koşul sağlanmazsa istek günlüğe
+ kaydedilmez.</p>
+
+ <p>Ortam değişkenleri <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>
+ ve/veya <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> modülleri kullanılarak her istek
+ için ayrı ayrı atanabilir. Örneğin, GIF biçemli resimler için yapılan
+ istekleri ana günlük dosyasına değil de başka bir dosyaya kaydetmek
+ isterseniz:</p>
+
+ <div class="example"><p><code>
+ SetEnvIf Request_URI \.gif$ gif-image<br />
+ CustomLog gif-requests.log common env=gif-image<br />
+ CustomLog nongif-requests.log common env=!gif-image
+ </code></p></div>
+
+ <p>Veya eski <code>RefererIgnore</code> yönergesinin davranışını taklit
+ etmek isterseniz:</p>
+
+ <div class="example"><p><code>
+ SetEnvIf Referer example\.com yerel-atif<br />
+ CustomLog referer.log referer env=!yerel-atif
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir günlük dosyasında kullanılmak üzere girdi biçemi tanımlar.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LogFormat <var>biçem</var>|<var>takma-ad</var>
+[<var>takma-ad</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>Bu yönerge erişim günlüğü dosyasının girdi biçemini belirler.</p>
+
+ <p><code class="directive">LogFormat</code> yönergesi iki şekilde kullanılabilir.
+ Tek argüman belirtilebilen ilkinde daha sonra
+ <code class="directive">TransferLog</code> yönergelerinde belirtilen günlüklerde
+ kullanılmak üzere günlük biçemini belirler. Bu günlük biçemi yukarıda
+ açıklanan <a href="#formats"><var>biçem</var></a> belirteçlerinden
+ oluşur. Bu tek argüman yerine aşağıda açıklandığı gibi önceki bir
+ <code class="directive">LogFormat</code> yönergesinde tanımlanmış bir günlük
+ biçemine atıf yapan bir <var>takma-ad</var> da belirtilebilir.</p>
+
+ <p><code class="directive">LogFormat</code> yönergesinin ikinci kullanım şeklinde
+ <var>biçem</var> bir <var>takma-ad</var> için tanımlanır. Bu takma ad
+ daha sonraki <code class="directive">LogFormat</code> veya <code class="directive"><a href="#customlog">CustomLog</a></code> yönergelerinde aynı biçem
+ dizgesini uzun uzadıya yazmamak için <var>takma-ad</var> olarak
+ kullanılır. Bir <code class="directive">LogFormat</code> yönergesi bir takma ad
+ tanımlamaktan <strong>başka bir şey yapmaz</strong>; yani, yaptığı iş
+ sadece bir takma ad tanımlamaktan ibarettir, biçemi uygulamaz veya
+ biçemi öntanımlı hale getirmez. Bu bakımdan sonraki <code class="directive"><a href="#transferlog">TransferLog</a></code> yönergelerini de
+ etkilemeyecektir. Ayrıca, <code class="directive">LogFormat</code> yönergesi bir
+ takma ada başka bir takma ad tanımlamakta da kullanılamaz. Bir takma
+ adın yüzde imi (<code>%</code>) içeremeyeceğine de dikkat ediniz.</p>
+
+ <div class="example"><h3>Örnek</h3><p><code>
+ LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir günlük dosyasının yerini belirtir.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>TransferLog <var>dosya</var>|<var>borulu-süreç</var>
+[<var>takma-ad</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
+</table>
+ <p>Bir günlük biçemi tanımlanmasını ve şarta bağlı günlük kaydını mümkün
+ kılmaması haricinde <code class="directive"><a href="#customlog">CustomLog</a></code> yönergesi gibidir. Günlük biçemi yerine kendinden
+ önce yer alan bir <code class="directive"><a href="#logformat">LogFormat</a></code> yönergesinde tanımlanan
+ bir takma ad kullanılır. Açıkça bir günlük biçemi takma adı
+ belirtilmedikçe Ortak Günlük Biçemi öntanımlıdır.</p>
+
+ <div class="example"><h3>Örnek</h3><p><code>
+ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
+ \"%{User-agent}i\""<br />
+ TransferLog logs/access_log
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">Günlük Girdilerinin Kişiselleştirilmesi</a></h2>
güvenliğinizden nasıl feragat etmiş olacağınız <a href="../misc/security_tips.html#serverroot">güvenlik ipuçları</a>
belgesinde açıklanmıştır.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BufferedLogs" id="BufferedLogs">BufferedLogs</a> <a name="bufferedlogs" id="bufferedlogs">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Günlük girdilerini diske yazmadan önce bellekte tamponlar
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>BufferedLogs On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>BufferedLogs Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Uyumluluk:</a></th><td>2.0.41 ve sonrasında mevcuttur.</td></tr>
-</table>
- <p><code class="directive">BufferedLogs</code> yönergesi,
- <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> modülünün çeşitli günlük girdilerini her
- isteğin hemen ardından tek tek değil, bir bütün halinde diske yazılmak
- üzere bellekte saklanmasını sağlar. Bu, bazı sistemlerde daha verimli
- disk erişimi, dolayısıyla daha yüksek başarım sağlayabilir. Sadece
- sunucu geneli için belirtilebilir, sanal konaklar için ayrı ayrı
- yapılandırılamaz.</p>
-
- <div class="note">Bir çökme günlük verisi kaybına sebep olacağından bu yönerge
- dikkatli kullanılmalıdır.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Günlük dosyasın ismini ve girdi biçemini belirler.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>CustomLog <var>dosya</var>|<var>borulu-süreç</var>
-<var>biçem</var>|<var>takma-ad</var>
-[env=[!]<var>ortam-değişkeni</var>]|
-expr=<var>ifade</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
-</table>
- <p><code class="directive">CustomLog</code> yönergesi istekleri günlüğe kaydetmek
- için kullanılır. Yönerge ile bir günlük biçemi belirtilebilir ve günlük
- kaydı isteğin özelliklerine bağlı olarak ortam değişkenleri vasıtasıyla
- şarta bağlı kılınabilir.</p>
-
- <p>İlk argümanda günlüğün yazılacağı yer belirtilir. İki tür yer
- belirtilebilir:</p>
-
- <dl>
- <dt><var>dosya</var></dt>
- <dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> yönergesinin
- değerine göreli bir dosya ismi.</dd>
-
- <dt><var>borulu-süreç</var></dt>
- <dd>"<code>|</code>" boru karakteri ile öncelenmiş olarak günlük
- bilgisini standart girdisinden kabul edecek sürecin ismi (veya komut
- satırı) Daha fazla bilgi için <a href="../logs.html#piped">borulu
- günlükler</a>e bakınız.
-
- <div class="warning"><h3>Güvenlik:</h3>
- <p>Bir borulu süreç kullanılmışsa, süreç <code class="program"><a href="../programs/httpd.html">httpd</a></code>’yi
- başlatan kullanıcı tarafından başlatılacaktır. Sunucu root tarafından
- başlatılıyorsa bu root olacaktır; bu bakımdan günlük kaydını alacak
- programın güvenilir olması önemlidir.</p>
- </div>
- <div class="warning"><h3>Bilginize</h3>
- <p>Dosya yolunu belirtirken tersbölü çizgisi kullanılan Unix dışı
- platformlarda bile yapılandırma dosyasında bu amaçla normal bölü
- çizgilerini kullanmaya özen gösterilmelidir.</p>
- </div></dd>
- </dl>
-
- <p>İkinci argümanda günlüğe ne yazılacağı belirtilir. Ya evvelce
- <code class="directive"><a href="#logformat">LogFormat</a></code> yönergesi ile
- tanımlanmış bir <var>takma-ad</var> ya da içeriği <a href="#formats">Günlük Girdilerinin Kişiselleştirilmesi</a> bölümünde
- açıklanmış bir <var>biçem</var> dizgesi olabilir.</p>
-
- <p>Örneğin, aşağıdaki iki yönerge kümesi aynı etkiye sahiptir:</p>
-
- <div class="example"><p><code>
- # Biçem dizgesi yerine takma ad içeren CustomLog<br />
- LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
- CustomLog logs/access_log common<br />
- <br />
- # Biçem dizgesinin kendisini içeren CustomLog<br />
- CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
- </code></p></div>
-
- <p>Üçüncü argüman isteğe bağlı olup,belli bir isteğin günlüğe kaydedilip
- kaydedilmeyeceğini belirler. Koşul, sunucu <a href="../env.html">ortamında</a> belli bir değişkenin varlığı veya
- yokluğu olabilir (bir '<code>env=!<var>isim</var></code>' durumu).
- İstenirse koşul keyfi bir mantıksal <a href="../expr.html">ifade</a>
- olarak da belirtilebilir. Eğer koşul sağlanmazsa istek günlüğe
- kaydedilmez.</p>
-
- <p>Ortam değişkenleri <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>
- ve/veya <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> modülleri kullanılarak her istek
- için ayrı ayrı atanabilir. Örneğin, GIF biçemli resimler için yapılan
- istekleri ana günlük dosyasına değil de başka bir dosyaya kaydetmek
- isterseniz:</p>
-
- <div class="example"><p><code>
- SetEnvIf Request_URI \.gif$ gif-image<br />
- CustomLog gif-requests.log common env=gif-image<br />
- CustomLog nongif-requests.log common env=!gif-image
- </code></p></div>
-
- <p>Veya eski <code>RefererIgnore</code> yönergesinin davranışını taklit
- etmek isterseniz:</p>
-
- <div class="example"><p><code>
- SetEnvIf Referer example\.com yerel-atif<br />
- CustomLog referer.log referer env=!yerel-atif
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir günlük dosyasında kullanılmak üzere girdi biçemi tanımlar.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LogFormat <var>biçem</var>|<var>takma-ad</var>
-[<var>takma-ad</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %>s %b"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>Bu yönerge erişim günlüğü dosyasının girdi biçemini belirler.</p>
-
- <p><code class="directive">LogFormat</code> yönergesi iki şekilde kullanılabilir.
- Tek argüman belirtilebilen ilkinde daha sonra
- <code class="directive">TransferLog</code> yönergelerinde belirtilen günlüklerde
- kullanılmak üzere günlük biçemini belirler. Bu günlük biçemi yukarıda
- açıklanan <a href="#formats"><var>biçem</var></a> belirteçlerinden
- oluşur. Bu tek argüman yerine aşağıda açıklandığı gibi önceki bir
- <code class="directive">LogFormat</code> yönergesinde tanımlanmış bir günlük
- biçemine atıf yapan bir <var>takma-ad</var> da belirtilebilir.</p>
-
- <p><code class="directive">LogFormat</code> yönergesinin ikinci kullanım şeklinde
- <var>biçem</var> bir <var>takma-ad</var> için tanımlanır. Bu takma ad
- daha sonraki <code class="directive">LogFormat</code> veya <code class="directive"><a href="#customlog">CustomLog</a></code> yönergelerinde aynı biçem
- dizgesini uzun uzadıya yazmamak için <var>takma-ad</var> olarak
- kullanılır. Bir <code class="directive">LogFormat</code> yönergesi bir takma ad
- tanımlamaktan <strong>başka bir şey yapmaz</strong>; yani, yaptığı iş
- sadece bir takma ad tanımlamaktan ibarettir, biçemi uygulamaz veya
- biçemi öntanımlı hale getirmez. Bu bakımdan sonraki <code class="directive"><a href="#transferlog">TransferLog</a></code> yönergelerini de
- etkilemeyecektir. Ayrıca, <code class="directive">LogFormat</code> yönergesi bir
- takma ada başka bir takma ad tanımlamakta da kullanılamaz. Bir takma
- adın yüzde imi (<code>%</code>) içeremeyeceğine de dikkat ediniz.</p>
-
- <div class="example"><h3>Örnek</h3><p><code>
- LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir günlük dosyasının yerini belirtir.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>TransferLog <var>dosya</var>|<var>borulu-süreç</var>
-[<var>takma-ad</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>Bir günlük biçemi tanımlanmasını ve şarta bağlı günlük kaydını mümkün
- kılmaması haricinde <code class="directive"><a href="#customlog">CustomLog</a></code> yönergesi gibidir. Günlük biçemi yerine kendinden
- önce yer alan bir <code class="directive"><a href="#logformat">LogFormat</a></code> yönergesinde tanımlanan
- bir takma ad kullanılır. Açıkça bir günlük biçemi takma adı
- belirtilmedikçe Ortak Günlük Biçemi öntanımlıdır.</p>
-
- <div class="example"><h3>Örnek</h3><p><code>
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
- \"%{User-agent}i\""<br />
- TransferLog logs/access_log
- </code></p></div>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_log_config.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
- <ol>
- <li>
- Log message after request to /foo/* is processed:
-
- <pre class="prettyprint lang-config"><Location /foo/>
- LogMessage "/foo/ has been requested"
-</Location></pre>
-
- </li>
-
- <li>
- Log message if request to /foo/* is processed in a sub-request:
- <pre class="prettyprint lang-config"><Location /foo/>
- LogMessage "subrequest to /foo/" hook=type_checker expr=%{IS_SUBREQ}
-</Location></pre>
-
-
- The default log_transaction hook is not executed for sub-requests,
- therefore we have to use a different hook.
- </li>
-
-
- <li>
- Log message if an IPv6 client causes a request timeout:
- <pre class="prettyprint lang-config">LogMessage "IPv6 timeout from %{REMOTE_ADDR}" "expr=-T %{IPV6} && %{REQUEST_STATUS} = 408"</pre>
-
- Note the placing of the double quotes for the <code>expr=</code> argument.
- </li>
-
- <li>
- Log the value of the "X-Foo" request environment variable in each
- stage of the request:
- <pre class="prettyprint lang-config"><Location />
- LogMessage "%{reqenv:X-Foo}" hook=all
-</Location></pre>
-
- Together with microsecond time stamps in the error log,
- <code>hook=all</code> also lets you determine the times spent
- in the different parts of the request processing.
- </li>
-
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="LogMessage" id="LogMessage">LogMessage</a> <a name="logmessage" id="logmessage">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Log user-defined message to error log
headers will not cause the header names to be added to the Vary header.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
+
+ <ol>
+ <li>
+ Log message after request to /foo/* is processed:
+
+ <pre class="prettyprint lang-config"><Location /foo/>
+ LogMessage "/foo/ has been requested"
+</Location></pre>
+
+ </li>
+
+ <li>
+ Log message if request to /foo/* is processed in a sub-request:
+ <pre class="prettyprint lang-config"><Location /foo/>
+ LogMessage "subrequest to /foo/" hook=type_checker expr=%{IS_SUBREQ}
+</Location></pre>
+
+
+ The default log_transaction hook is not executed for sub-requests,
+ therefore we have to use a different hook.
+ </li>
+
+
+ <li>
+ Log message if an IPv6 client causes a request timeout:
+ <pre class="prettyprint lang-config">LogMessage "IPv6 timeout from %{REMOTE_ADDR}" "expr=-T %{IPV6} && %{REQUEST_STATUS} = 408"</pre>
+
+ Note the placing of the double quotes for the <code>expr=</code> argument.
+ </li>
+
+ <li>
+ Log the value of the "X-Foo" request environment variable in each
+ stage of the request:
+ <pre class="prettyprint lang-config"><Location />
+ LogMessage "%{reqenv:X-Foo}" hook=all
+</Location></pre>
+
+ Together with microsecond time stamps in the error log,
+ <code>hook=all</code> also lets you determine the times spent
+ in the different parts of the request processing.
+ </li>
+
+ </ol>
</div>
</div>
<div class="bottomlang">
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ForensicLog" id="ForensicLog">ForensicLog</a> <a name="forensiclog" id="forensiclog">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets filename of the forensic log</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForensicLog <var>filename</var>|<var>pipe</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_forensic</td></tr>
+</table>
+ <p>The <code class="directive">ForensicLog</code> directive is used to
+ log requests to the server for forensic analysis. Each log entry
+ is assigned a unique ID which can be associated with the request
+ using the normal <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code>
+ directive. <code class="module"><a href="../mod/mod_log_forensic.html">mod_log_forensic</a></code> creates a token called
+ <code>forensic-id</code>, which can be added to the transfer log
+ using the <code>%{forensic-id}n</code> format string.</p>
+
+ <p>The argument, which specifies the location to which
+ the logs will be written, can take one of the following two
+ types of values:</p>
+
+ <dl>
+ <dt><var>filename</var></dt>
+ <dd>A filename, relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</dd>
+
+ <dt><var>pipe</var></dt>
+ <dd>The pipe character "<code>|</code>", followed by the path
+ to a program to receive the log information on its standard
+ input. The program name can be specified relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directive.
+
+ <div class="warning"><h3>Security:</h3>
+ <p>If a program is used, then it will be run as the user who
+ started <code class="program"><a href="../programs/httpd.html">httpd</a></code>. This will be root if the server was
+ started by root; be sure that the program is secure or switches to a
+ less privileged user.</p>
+ </div>
+
+ <div class="note"><h3>Note</h3>
+ <p>When entering a file path on non-Unix platforms, care should be taken
+ to make sure that only forward slashes are used even though the platform
+ may allow the use of back slashes. In general it is a good idea to always
+ use forward slashes throughout the configuration files.</p>
+ </div></dd>
+ </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">Forensic Log Format</a></h2>
<p>Each request is logged two times. The first time is <em>before</em> it's
they should not be readable by anyone except the user that starts the
server.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForensicLog" id="ForensicLog">ForensicLog</a> <a name="forensiclog" id="forensiclog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets filename of the forensic log</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForensicLog <var>filename</var>|<var>pipe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_forensic</td></tr>
-</table>
- <p>The <code class="directive">ForensicLog</code> directive is used to
- log requests to the server for forensic analysis. Each log entry
- is assigned a unique ID which can be associated with the request
- using the normal <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code>
- directive. <code class="module"><a href="../mod/mod_log_forensic.html">mod_log_forensic</a></code> creates a token called
- <code>forensic-id</code>, which can be added to the transfer log
- using the <code>%{forensic-id}n</code> format string.</p>
-
- <p>The argument, which specifies the location to which
- the logs will be written, can take one of the following two
- types of values:</p>
-
- <dl>
- <dt><var>filename</var></dt>
- <dd>A filename, relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</dd>
-
- <dt><var>pipe</var></dt>
- <dd>The pipe character "<code>|</code>", followed by the path
- to a program to receive the log information on its standard
- input. The program name can be specified relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directive.
-
- <div class="warning"><h3>Security:</h3>
- <p>If a program is used, then it will be run as the user who
- started <code class="program"><a href="../programs/httpd.html">httpd</a></code>. This will be root if the server was
- started by root; be sure that the program is secure or switches to a
- less privileged user.</p>
- </div>
-
- <div class="note"><h3>Note</h3>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashes are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </div></dd>
- </dl>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_log_forensic.html" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">Forensic ログフォーマット</a></h2>
- <p>各リクエストは2回ログ収集されます。最初はリクエストが処理される
- <em>前</em> (つまり、ヘッダを受け取った後) です。2度目のログは
- リクエストが処理された<em>後</em>、通常のログ収集と同じときに
- 行なわれます。</p>
-
- <p>各リクエストを識別するために、リクエストには
- 一意なリクエスト ID が割り当てられます。この forensic ID は
- フォーマット文字列 <code>%{forensic-id}n</code> を使うことで
- 通常の transfer ログにログ収集することもできます。
- <code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code> を使っている場合は、それが生成する
- ID が使われます。</p>
-
- <p>最初の行は forensic ID、リクエスト行と受け取ったすべてのヘッダを
- パイプ文字 (<code>|</code>) で分離してログ収集します。
- 例えば以下のようになります (実際はすべて同じ行になります):</p>
-
- <div class="example"><p><code>
- +yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
- HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11;
- U; Linux i686; en-US; rv%3a1.6) Gecko/20040216
- Firefox/0.8|Accept:image/png, <var>etc...</var>
- </code></p></div>
-
- <p>最初のプラス文字がこのログは最初のログであることを示します。
- 二番目の行はマイナス文字と ID のみです:</p>
-
- <div class="example"><p><code>
- -yQtJf8CoAB4AAFNXBIEAAAAA
- </code></p></div>
-
- <p><code>check_forensic</code> スクリプトは引数としてログファイルの名前を
- 取ります。<code>+</code>/<code>-</code> の ID の組を調べ、完了していない
- リクエストがある場合は警告を発します。</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">セキュリティの問題</a></h2>
- <p>ログファイルが保存されるディレクトリがサーバを起動したユーザ
- 以外で書き込み可能になっているときにセキュリティが破られる可能性が
- あることについての詳細は<a href="../misc/security_tips.html#serverroot">セキュリティのこつ</a>を
- 参照してください。</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ForensicLog" id="ForensicLog">ForensicLog</a> <a name="forensiclog" id="forensiclog">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Forensic ログのファイル名を設定する</td></tr>
</dl>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="formats" id="formats">Forensic ログフォーマット</a></h2>
+ <p>各リクエストは2回ログ収集されます。最初はリクエストが処理される
+ <em>前</em> (つまり、ヘッダを受け取った後) です。2度目のログは
+ リクエストが処理された<em>後</em>、通常のログ収集と同じときに
+ 行なわれます。</p>
+
+ <p>各リクエストを識別するために、リクエストには
+ 一意なリクエスト ID が割り当てられます。この forensic ID は
+ フォーマット文字列 <code>%{forensic-id}n</code> を使うことで
+ 通常の transfer ログにログ収集することもできます。
+ <code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code> を使っている場合は、それが生成する
+ ID が使われます。</p>
+
+ <p>最初の行は forensic ID、リクエスト行と受け取ったすべてのヘッダを
+ パイプ文字 (<code>|</code>) で分離してログ収集します。
+ 例えば以下のようになります (実際はすべて同じ行になります):</p>
+
+ <div class="example"><p><code>
+ +yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
+ HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11;
+ U; Linux i686; en-US; rv%3a1.6) Gecko/20040216
+ Firefox/0.8|Accept:image/png, <var>etc...</var>
+ </code></p></div>
+
+ <p>最初のプラス文字がこのログは最初のログであることを示します。
+ 二番目の行はマイナス文字と ID のみです:</p>
+
+ <div class="example"><p><code>
+ -yQtJf8CoAB4AAFNXBIEAAAAA
+ </code></p></div>
+
+ <p><code>check_forensic</code> スクリプトは引数としてログファイルの名前を
+ 取ります。<code>+</code>/<code>-</code> の ID の組を調べ、完了していない
+ リクエストがある場合は警告を発します。</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="security" id="security">セキュリティの問題</a></h2>
+ <p>ログファイルが保存されるディレクトリがサーバを起動したユーザ
+ 以外で書き込み可能になっているときにセキュリティが破られる可能性が
+ あることについての詳細は<a href="../misc/security_tips.html#serverroot">セキュリティのこつ</a>を
+ 参照してください。</p>
+</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_log_forensic.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">Adli Günlük Biçemi</a></h2>
- <p>Her istek günlüğe iki defa kaydedilir. İlki, işlemin başlangıcında
- (yani, başlıklar alındıktan hemen sonra), ikincisi ise istek işlem
- gördükten sonra normal günlüklemenin yapıldığı sırada yapılır.</p>
-
- <p>Her isteği betimlemek için eşsiz bir istek kimliği atanır. Bu adli
- kimliğin normal günlüğe de yazılması istenirse bu
- <code>%{forensic-id}n</code> biçem dizgesi ile yapılabilir.
- <code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code> kullanılıyorsa, onun ürettiği kimlik
- kullanılır.</p>
-
- <p>İlk satır günlüğe, adli kimliği, istek satırını ve alınan tüm
- başlıkları boru karakterleri (<code>|</code>) ile ayrılmış olarak
- kaydeder. Aşağıda bir örneğe yer verilmiştir (hepsi bir satırdadır):</p>
-
- <div class="example"><p><code>
- +yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
- HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11;
- U; Linux i686; en-US; rv%3a1.6) Gecko/20040216
- Firefox/0.8|Accept:image/png, <var>etc...</var>
- </code></p></div>
-
- <p>Başlangıçtaki artı imi bu günlük satırının istekle ilgili ilk günlük
- kaydı olduğunu belirtir. İkinci satırda bunun yerini bir eksi imi
- alır:</p>
-
- <div class="example"><p><code>
- -yQtJf8CoAB4AAFNXBIEAAAAA
- </code></p></div>
-
- <p><code>check_forensic</code> betiği komut satırı argümanı olarak günlük
- dosyasının ismini alır. Bu <code>+</code>/<code>-</code> kimlik
- çiftlerine bakarak tamamlanmamış istekler varsa bunlar hakkında
- uyarır.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">Güvenlik Kaygıları</a></h2>
- <p>Günlük dosyarının kaydedildiği dizine sunucuyu başlatan kullanıcı
- dışında diğer kullanıcılar tarafından yazılabiliyor olması halinde
- güvenliğinizden nasıl feragat etmiş olacağınız <a href="../misc/security_tips.html#serverroot">güvenlik ipuçları</a>
- belgesinde açıklanmıştır.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ForensicLog" id="ForensicLog">ForensicLog</a> <a name="forensiclog" id="forensiclog">Yönergesi</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Adli günlük için dosya ismini belirler.</td></tr>
</dl>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="formats" id="formats">Adli Günlük Biçemi</a></h2>
+ <p>Her istek günlüğe iki defa kaydedilir. İlki, işlemin başlangıcında
+ (yani, başlıklar alındıktan hemen sonra), ikincisi ise istek işlem
+ gördükten sonra normal günlüklemenin yapıldığı sırada yapılır.</p>
+
+ <p>Her isteği betimlemek için eşsiz bir istek kimliği atanır. Bu adli
+ kimliğin normal günlüğe de yazılması istenirse bu
+ <code>%{forensic-id}n</code> biçem dizgesi ile yapılabilir.
+ <code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code> kullanılıyorsa, onun ürettiği kimlik
+ kullanılır.</p>
+
+ <p>İlk satır günlüğe, adli kimliği, istek satırını ve alınan tüm
+ başlıkları boru karakterleri (<code>|</code>) ile ayrılmış olarak
+ kaydeder. Aşağıda bir örneğe yer verilmiştir (hepsi bir satırdadır):</p>
+
+ <div class="example"><p><code>
+ +yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
+ HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11;
+ U; Linux i686; en-US; rv%3a1.6) Gecko/20040216
+ Firefox/0.8|Accept:image/png, <var>etc...</var>
+ </code></p></div>
+
+ <p>Başlangıçtaki artı imi bu günlük satırının istekle ilgili ilk günlük
+ kaydı olduğunu belirtir. İkinci satırda bunun yerini bir eksi imi
+ alır:</p>
+
+ <div class="example"><p><code>
+ -yQtJf8CoAB4AAFNXBIEAAAAA
+ </code></p></div>
+
+ <p><code>check_forensic</code> betiği komut satırı argümanı olarak günlük
+ dosyasının ismini alır. Bu <code>+</code>/<code>-</code> kimlik
+ çiftlerine bakarak tamamlanmamış istekler varsa bunlar hakkında
+ uyarır.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="security" id="security">Güvenlik Kaygıları</a></h2>
+ <p>Günlük dosyarının kaydedildiği dizine sunucuyu başlatan kullanıcı
+ dışında diğer kullanıcılar tarafından yazılabiliyor olması halinde
+ güvenliğinizden nasıl feragat etmiş olacağınız <a href="../misc/security_tips.html#serverroot">güvenlik ipuçları</a>
+ belgesinde açıklanmıştır.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_log_forensic.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../logs.html">Apache Log Files</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>none</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_logio</td></tr>
+</table>
+ <p>This directive configures whether this module tracks the delay
+ between the request being read and the first byte of the response
+ headers being written. The resulting value may be logged with the
+ <code>%^FB</code> format.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">Custom Log Formats</a></h2>
\"%{User-agent}i\" %I %O"</code></dd>
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>none</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_logio</td></tr>
-</table>
- <p>This directive configures whether this module tracks the delay
- between the request being read and the first byte of the response
- headers being written. The resulting value may be logged with the
- <code>%^FB</code> format.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_logio.html" title="English"> en </a> |
<li><a href="../logs.html">Apache ログファイル</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>none</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_logio</td></tr>
+</table><p>このディレクティブの解説文書は
+ まだ翻訳されていません。英語版をご覧ください。
+ </p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">カスタムログ書式</a></h2>
\"%{User-agent}i\" %I %O"</code></dd>
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>none</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_logio</td></tr>
-</table><p>このディレクティブの解説文書は
- まだ翻訳されていません。英語版をご覧ください。
- </p></div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_logio.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../logs.html">¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏ</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>none</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_logio</td></tr>
+</table><p>The documentation for this directive has
+ not been translated yet. Please have a look at the English
+ version.</p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">»ç¿ëÀÚÁ¤ÀÇ ·Î±× Çü½Ä</a></h2>
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>none</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_logio</td></tr>
-</table><p>The documentation for this directive has
- not been translated yet. Please have a look at the English
- version.</p></div>
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_logio.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../logs.html">Apache Günlük Dosyaları</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak, dizin, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Geçersizleştirme:</a></th><td>none</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_logio</td></tr>
+</table><p>Bu yönergenin belgesi henüz Türkçeye çevrilmedi.
+ Lütfen İngilizce sürümüne bakınız.</p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="formats" id="formats">Özel Günlük Biçemleri</a></h2>
\"%{User-agent}i\" %I %O"</code></dd>
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogIOTrackTTFB" id="LogIOTrackTTFB">LogIOTrackTTFB</a> <a name="logiotrackttfb" id="logiotrackttfb">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Enable tracking of time to first byte (TTFB)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LogIOTrackTTFB ON|OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>LogIOTrackTTFB OFF</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak, dizin, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Geçersizleştirme:</a></th><td>none</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_logio</td></tr>
-</table><p>Bu yönergenin belgesi henüz Türkçeye çevrilmedi.
- Lütfen İngilizce sürümüne bakınız.</p></div>
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_logio.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#databases">Database connectivity</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basicconf" id="basicconf">Basic Configuration</a></h2>
-
-<p>The basic module loading directive is</p>
+<div class="directive-section"><h2><a name="LuaAuthzProvider" id="LuaAuthzProvider">LuaAuthzProvider</a> <a name="luaauthzprovider" id="luaauthzprovider">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Plug an authorization provider function into <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaAuthzProvider provider_name /path/to/lua/script.lua function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.3 and later</td></tr>
+</table>
+<p>After a lua function has been registered as authorization provider, it can be used
+with the <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive:</p>
-<pre class="prettyprint lang-config">LoadModule lua_module modules/mod_lua.so</pre>
+<pre class="prettyprint lang-config">LuaRoot /usr/local/apache2/lua
+LuaAuthzProvider foo authz.lua authz_check_foo
+<Location />
+ Require foo johndoe
+</Location></pre>
+<pre class="prettyprint lang-lua">require "apache2"
+function authz_check_foo(r, who)
+ if r.user ~= who then return apache2.AUTHZ_DENIED
+ return apache2.AUTHZ_GRANTED
+end</pre>
-<p>
-<code>mod_lua</code> provides a handler named <code>lua-script</code>,
-which can be used with a <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> or
-<code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> directive:</p>
-<pre class="prettyprint lang-config"><Files *.lua>
- SetHandler lua-script
-</Files></pre>
-<p>
-This will cause <code>mod_lua</code> to handle requests for files
-ending in <code>.lua</code> by invoking that file's
-<code>handle</code> function.
-</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaCodeCache" id="LuaCodeCache">LuaCodeCache</a> <a name="luacodecache" id="luacodecache">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure the compiled code cache.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaCodeCache stat|forever|never</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LuaCodeCache stat</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>
+ Specify the behavior of the in-memory code cache. The default
+ is stat, which stats the top level script (not any included
+ ones) each time that file is needed, and reloads it if the
+ modified time indicates it is newer than the one it has
+ already loaded. The other values cause it to keep the file
+ cached forever (don't stat and replace) or to never cache the
+ file.</p>
-<p>For more flexibility, see <code class="directive">LuaMapHandler</code>.
-</p>
+ <p>In general stat or forever is good for production, and stat or never
+ for development.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writinghandlers" id="writinghandlers">Writing Handlers</a></h2>
-<p> In the Apache HTTP Server API, the handler is a specific kind of hook
-responsible for generating the response. Examples of modules that include a
-handler are <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>,
-and <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p>
+ <div class="example"><h3>Examples:</h3><pre class="prettyprint lang-config">LuaCodeCache stat
+LuaCodeCache forever
+LuaCodeCache never</pre>
+</div>
-<p><code>mod_lua</code> always looks to invoke a Lua function for the handler, rather than
-just evaluating a script body CGI style. A handler function looks
-something like this:</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookAccessChecker" id="LuaHookAccessChecker">LuaHookAccessChecker</a> <a name="luahookaccesschecker" id="luahookaccesschecker">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the access_checker phase of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookAccessChecker /path/to/lua/script.lua hook_function_name [early|late]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The optional third argument is supported in 2.3.15 and later</td></tr>
+</table>
+<p>Add your hook to the access_checker phase. An access checker
+hook function usually returns OK, DECLINED, or HTTP_FORBIDDEN.</p>
+ <div class="note"><h3>Ordering</h3><p>The optional arguments "early" or "late"
+ control when this script runs relative to other modules.</p></div>
-<pre class="prettyprint lang-lua">
-<strong>example.lua</strong><br />
--- example handler
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookAuthChecker" id="LuaHookAuthChecker">LuaHookAuthChecker</a> <a name="luahookauthchecker" id="luahookauthchecker">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the auth_checker phase of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookAuthChecker /path/to/lua/script.lua hook_function_name [early|late]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The optional third argument is supported in 2.3.15 and later</td></tr>
+</table>
+<p>Invoke a lua function in the auth_checker phase of processing
+a request. This can be used to implement arbitrary authentication
+and authorization checking. A very simple example:
+</p>
+<pre class="prettyprint lang-lua">require 'apache2'
-require "string"
+-- fake authcheck hook
+-- If request has no auth info, set the response header and
+-- return a 401 to ask the browser for basic auth info.
+-- If request has auth info, don't actually look at it, just
+-- pretend we got userid 'foo' and validated it.
+-- Then check if the userid is 'foo' and accept the request.
+function authcheck_hook(r)
---[[
- This is the default method name for Lua handlers, see the optional
- function-name in the LuaMapHandler directive to choose a different
- entry point.
---]]
-function handle(r)
- r.content_type = "text/plain"
+ -- look for auth info
+ auth = r.headers_in['Authorization']
+ if auth ~= nil then
+ -- fake the user
+ r.user = 'foo'
+ end
- if r.method == 'GET' then
- r:puts("Hello Lua World!\n")
- for k, v in pairs( r:parseargs() ) do
- r:puts( string.format("%s: %s\n", k, v) )
- end
- elseif r.method == 'POST' then
- r:puts("Hello Lua World!\n")
- for k, v in pairs( r:parsebody() ) do
- r:puts( string.format("%s: %s\n", k, v) )
- end
- elseif r.method == 'PUT' then
--- use our own Error contents
- r:puts("Unsupported HTTP method " .. r.method)
- r.status = 405
- return apache2.ok
- else
--- use the ErrorDocument
- return 501
- end
- return apache2.OK
+ if r.user == nil then
+ r:debug("authcheck: user is nil, returning 401")
+ r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
+ return 401
+ elseif r.user == "foo" then
+ r:debug('user foo: OK')
+ else
+ r:debug("authcheck: user='" .. r.user .. "'")
+ r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
+ return 401
+ end
+ return apache2.OK
end</pre>
+ <div class="note"><h3>Ordering</h3><p>The optional arguments "early" or "late"
+ control when this script runs relative to other modules.</p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookCheckUserID" id="LuaHookCheckUserID">LuaHookCheckUserID</a> <a name="luahookcheckuserid" id="luahookcheckuserid">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the check_user_id phase of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookCheckUserID /path/to/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookFixups" id="LuaHookFixups">LuaHookFixups</a> <a name="luahookfixups" id="luahookfixups">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the fixups phase of a request
+processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookFixups /path/to/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
<p>
-This handler function just prints out the uri or form encoded
-arguments to a plaintext page.
+ Just like LuaHookTranslateName, but executed at the fixups phase
</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookInsertFilter" id="LuaHookInsertFilter">LuaHookInsertFilter</a> <a name="luahookinsertfilter" id="luahookinsertfilter">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the insert_filter phase of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookInsertFilter /path/to/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>Not Yet Implemented</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookLog" id="LuaHookLog">LuaHookLog</a> <a name="luahooklog" id="luahooklog">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the access log phase of a request
+processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookLog /path/to/lua/script.lua log_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
<p>
-This means (and in fact encourages) that you can have multiple
-handlers (or hooks, or filters) in the same script.
+ This simple logging hook allows you to run a function when httpd enters the
+ logging phase of a request. With it, you can append data to your own logs,
+ manipulate data before the regular log is written, or prevent a log entry
+ from being created. To prevent the usual logging from happening, simply return
+ <code>apache2.DONE</code> in your logging handler, otherwise return
+ <code>apache2.OK</code> to tell httpd to log as normal.
</p>
+<p>Example:</p>
+<pre class="prettyprint lang-config">LuaHookLog /path/to/script.lua logger</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writingauthzproviders" id="writingauthzproviders">Writing Authorization Providers</a></h2>
+<pre class="prettyprint lang-lua">-- /path/to/script.lua --
+function logger(r)
+ -- flip a coin:
+ -- If 1, then we write to our own Lua log and tell httpd not to log
+ -- in the main log.
+ -- If 2, then we just sanitize the output a bit and tell httpd to
+ -- log the sanitized bits.
+ if math.random(1,2) == 1 then
+ -- Log stuff ourselves and don't log in the regular log
+ local f = io.open("/foo/secret.log", "a")
+ if f then
+ f:write("Something secret happened at " .. r.uri .. "\n")
+ f:close()
+ end
+ return apache2.DONE -- Tell httpd not to use the regular logging functions
+ else
+ r.uri = r.uri:gsub("somesecretstuff", "") -- sanitize the URI
+ return apache2.OK -- tell httpd to log it.
+ end
+end</pre>
-<p><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> provides a high-level interface to
-authorization that is much easier to use than using into the relevant
-hooks directly. The first argument to the
-<code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive gives
-the name of the responsible authorization provider. For any
-<code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> line,
-<code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> will call the authorization provider
-of the given name, passing the rest of the line as parameters. The
-provider will then check authorization and pass the result as return
-value.</p>
-
-<p>The authz provider is normally called before authentication. If it needs to
-know the authenticated user name (or if the user will be authenticated at
-all), the provider must return <code>apache2.AUTHZ_DENIED_NO_USER</code>.
-This will cause authentication to proceed and the authz provider to be
-called a second time.</p>
-<p>The following authz provider function takes two arguments, one ip
-address and one user name. It will allow access from the given ip address
-without authentication, or if the authenticated user matches the second
-argument:</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookMapToStorage" id="LuaHookMapToStorage">LuaHookMapToStorage</a> <a name="luahookmaptostorage" id="luahookmaptostorage">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the map_to_storage phase of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookMapToStorage /path/to/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Like <code class="directive">LuaHookTranslateName</code> but executed at the
+ map-to-storage phase of a request. Modules like mod_cache run at this phase,
+ which makes for an interesting example on what to do here:</p>
+ <pre class="prettyprint lang-config">LuaHookMapToStorage /path/to/lua/script.lua check_cache</pre>
-<pre class="prettyprint lang-lua">
-<strong>authz_provider.lua</strong><br />
+ <pre class="prettyprint lang-lua">require"apache2"
+cached_files = {}
-require 'apache2'
+function read_file(filename)
+ local input = io.open(filename, "r")
+ if input then
+ local data = input:read("*a")
+ cached_files[filename] = data
+ file = cached_files[filename]
+ input:close()
+ end
+ return cached_files[filename]
+end
-function authz_check_foo(r, ip, user)
- if r.useragent_ip == ip then
- return apache2.AUTHZ_GRANTED
- elseif r.user == nil then
- return apache2.AUTHZ_DENIED_NO_USER
- elseif r.user == user then
- return apache2.AUTHZ_GRANTED
- else
- return apache2.AUTHZ_DENIED
+function check_cache(r)
+ if r.filename:match("%.png$") then -- Only match PNG files
+ local file = cached_files[r.filename] -- Check cache entries
+ if not file then
+ file = read_file(r.filename) -- Read file into cache
+ end
+ if file then -- If file exists, write it out
+ r.status = 200
+ r:write(file)
+ r:info(("Sent %s to client from cache"):format(r.filename))
+ return apache2.DONE -- skip default handler for PNG files
+ end
end
+ return apache2.DECLINED -- If we had nothing to do, let others serve this.
end</pre>
-<p>The following configuration registers this function as provider
-<code>foo</code> and configures it for URL <code>/</code>:</p>
-<pre class="prettyprint lang-config">LuaAuthzProvider foo authz_provider.lua authz_check_foo
-<Location />
- Require foo 10.1.2.3 john_doe
-</Location></pre>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writinghooks" id="writinghooks">Writing Hooks</a></h2>
-
-<p>Hook functions are how modules (and Lua scripts) participate in the
-processing of requests. Each type of hook exposed by the server exists for
-a specific purpose, such as mapping requests to the file system,
-performing access control, or setting mime types:</p>
-
-<table class="bordered"><tr class="header">
- <th>Hook phase</th>
- <th>mod_lua directive</th>
- <th>Description</th>
- </tr>
-<tr>
- <td>Quick handler</td>
- <td><code class="directive"><a href="#luaquickhandler">LuaQuickHandler</a></code></td>
- <td>This is the first hook that will be called after a request has
- been mapped to a host or virtual host</td>
- </tr>
-<tr class="odd">
- <td>Translate name</td>
- <td><code class="directive"><a href="#luahooktranslatename">LuaHookTranslateName</a></code></td>
- <td>This phase translates the requested URI into a filename on the
- system. Modules such as <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> and
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> operate in this phase.</td>
- </tr>
-<tr>
- <td>Map to storage</td>
- <td><code class="directive"><a href="#luahookmaptostorage">LuaHookMapToStorage</a></code></td>
- <td>This phase maps files to their physical, cached or external/proxied storage.
- It can be used by proxy or caching modules</td>
- </tr>
-<tr class="odd">
- <td>Check Access</td>
- <td><code class="directive"><a href="#luahookaccesschecker">LuaHookAccessChecker</a></code></td>
- <td>This phase checks whether a client has access to a resource. This
- phase is run before the user is authenticated, so beware.
- </td>
- </tr>
-<tr>
- <td>Check User ID</td>
- <td><code class="directive"><a href="#luahookcheckuserid">LuaHookCheckUserID</a></code></td>
- <td>This phase it used to check the negotiated user ID</td>
- </tr>
-<tr class="odd">
- <td>Check Authorization</td>
- <td><code class="directive"><a href="#luahookauthchecker">LuaHookAuthChecker</a></code> or
- <code class="directive"><a href="#luaauthzprovider">LuaAuthzProvider</a></code></td>
- <td>This phase authorizes a user based on the negotiated credentials, such as
- user ID, client certificate etc.
- </td>
- </tr>
-<tr>
- <td>Check Type</td>
- <td><code class="directive"><a href="#luahooktypechecker">LuaHookTypeChecker</a></code></td>
- <td>This phase checks the requested file and assigns a content type and
- a handler to it</td>
- </tr>
-<tr class="odd">
- <td>Fixups</td>
- <td><code class="directive"><a href="#luahookfixups">LuaHookFixups</a></code></td>
- <td>This is the final "fix anything" phase before the content handlers
- are run. Any last-minute changes to the request should be made here.</td>
- </tr>
-<tr>
- <td>Content handler</td>
- <td>fx. <code>.lua</code> files or through <code class="directive"><a href="#luamaphandler">LuaMapHandler</a></code></td>
- <td>This is where the content is handled. Files are read, parsed, some are run,
- and the result is sent to the client</td>
- </tr>
-<tr class="odd">
- <td>Logging</td>
- <td><code class="directive"><a href="#luahooklog">LuaHookLog</a></code></td>
- <td>Once a request has been handled, it enters several logging phases,
- which logs the request in either the error or access log. Mod_lua
- is able to hook into the start of this and control logging output.</td>
- </tr>
-</table>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookTranslateName" id="LuaHookTranslateName">LuaHookTranslateName</a> <a name="luahooktranslatename" id="luahooktranslatename">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the translate name phase of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookTranslateName /path/to/lua/script.lua hook_function_name [early|late]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The optional third argument is supported in 2.3.15 and later</td></tr>
+</table><p>
+ Add a hook (at APR_HOOK_MIDDLE) to the translate name phase of
+ request processing. The hook function receives a single
+ argument, the request_rec, and should return a status code,
+ which is either an HTTP error code, or the constants defined
+ in the apache2 module: apache2.OK, apache2.DECLINED, or
+ apache2.DONE. </p>
-<p>Hook functions are passed the request object as their only argument
-(except for LuaAuthzProvider, which also gets passed the arguments from
-the Require directive).
-They can return any value, depending on the hook, but most commonly
-they'll return OK, DONE, or DECLINED, which you can write in Lua as
-<code>apache2.OK</code>, <code>apache2.DONE</code>, or
-<code>apache2.DECLINED</code>, or else an HTTP status code.</p>
+ <p>For those new to hooks, basically each hook will be invoked
+ until one of them returns apache2.OK. If your hook doesn't
+ want to do the translation it should just return
+ apache2.DECLINED. If the request should stop processing, then
+ return apache2.DONE.</p>
+ <p>Example:</p>
-<pre class="prettyprint lang-lua">
-<strong>translate_name.lua</strong><br />
--- example hook that rewrites the URI to a filesystem path.
+<pre class="prettyprint lang-config"># httpd.conf
+LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</pre>
-require 'apache2'
-function translate_name(r)
- if r.uri == "/translate-name" then
- r.filename = r.document_root .. "/find_me.txt"
+<pre class="prettyprint lang-lua">-- /scripts/conf/hooks.lua --
+require "apache2"
+function silly_mapper(r)
+ if r.uri == "/" then
+ r.filename = "/var/www/home.lua"
return apache2.OK
+ else
+ return apache2.DECLINED
end
- -- we don't care about this URL, give another module a chance
- return apache2.DECLINED
end</pre>
+ <div class="note"><h3>Context</h3><p>This directive is not valid in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, or htaccess
+ context.</p></div>
-<pre class="prettyprint lang-lua">
-<strong>translate_name2.lua</strong><br />
---[[ example hook that rewrites one URI to another URI. It returns a
- apache2.DECLINED to give other URL mappers a chance to work on the
- substitution, including the core translate_name hook which maps based
- on the DocumentRoot.
+ <div class="note"><h3>Ordering</h3><p>The optional arguments "early" or "late"
+ control when this script runs relative to other modules.</p></div>
- Note: Use the early/late flags in the directive to make it run before
- or after mod_alias.
---]]
-require 'apache2'
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaHookTypeChecker" id="LuaHookTypeChecker">LuaHookTypeChecker</a> <a name="luahooktypechecker" id="luahooktypechecker">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the type_checker phase of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookTypeChecker /path/to/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>
+ This directive provides a hook for the type_checker phase of the request processing.
+ This phase is where requests are assigned a content type and a handler, and thus can
+ be used to modify the type and handler based on input:
+ </p>
+ <pre class="prettyprint lang-config">LuaHookTypeChecker /path/to/lua/script.lua type_checker</pre>
+
+ <pre class="prettyprint lang-lua"> function type_checker(r)
+ if r.uri:match("%.to_gif$") then -- match foo.png.to_gif
+ r.content_type = "image/gif" -- assign it the image/gif type
+ r.handler = "gifWizard" -- tell the gifWizard module to handle this
+ r.filename = r.uri:gsub("%.to_gif$", "") -- fix the filename requested
+ return apache2.OK
+ end
-function translate_name(r)
- if r.uri == "/translate-name" then
- r.uri = "/find_me.txt"
return apache2.DECLINED
- end
- return apache2.DECLINED
-end</pre>
+ end</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="datastructures" id="datastructures">Data Structures</a></h2>
-<dl>
-<dt>request_rec</dt>
- <dd>
- <p>The request_rec is mapped in as a userdata. It has a metatable
- which lets you do useful things with it. For the most part it
- has the same fields as the request_rec struct, many of which are writable as
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaInherit" id="LuaInherit">LuaInherit</a> <a name="luainherit" id="luainherit">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls how parent configuration sections are merged into children</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaInherit none|parent-first|parent-last</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LuaInherit parent-first</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.0 and later</td></tr>
+</table><p>By default, if LuaHook* directives are used in overlapping
+ Directory or Location configuration sections, the scripts defined in the
+ more specific section are run <em>after</em> those defined in the more
+ generic section (LuaInherit parent-first). You can reverse this order, or
+ make the parent context not apply at all.</p>
+
+ <p> In previous 2.3.x releases, the default was effectively to ignore LuaHook*
+ directives from parent configuration sections.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaInputFilter" id="LuaInputFilter">LuaInputFilter</a> <a name="luainputfilter" id="luainputfilter">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a Lua function for content input filtering</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaInputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.5 and later</td></tr>
+</table>
+<p>Provides a means of adding a Lua function as an input filter.
+As with output filters, input filters work as coroutines,
+first yielding before buffers are sent, then yielding whenever
+a bucket needs to be passed down the chain, and finally (optionally)
+yielding anything that needs to be appended to the input data. The
+global variable <code>bucket</code> holds the buckets as they are passed
+onto the Lua script:
+</p>
+
+<pre class="prettyprint lang-config">LuaInputFilter myInputFilter /www/filter.lua input_filter
+<Files *.lua>
+ SetInputFilter myInputFilter
+</Files></pre>
+
+<pre class="prettyprint lang-lua">--[[
+ Example input filter that converts all POST data to uppercase.
+]]--
+function input_filter(r)
+ print("luaInputFilter called") -- debug print
+ coroutine.yield() -- Yield and wait for buckets
+ while bucket do -- For each bucket, do...
+ local output = string.upper(bucket) -- Convert all POST data to uppercase
+ coroutine.yield(output) -- Send converted data down the chain
+ end
+ -- No more buckets available.
+ coroutine.yield("&filterSignature=1234") -- Append signature at the end
+end</pre>
+
+<p>
+The input filter supports denying/skipping a filter if it is deemed unwanted:
+</p>
+<pre class="prettyprint lang-lua">function input_filter(r)
+ if not good then
+ return -- Simply deny filtering, passing on the original content instead
+ end
+ coroutine.yield() -- wait for buckets
+ ... -- insert filter stuff here
+end</pre>
+
+<p>
+See "<a href="#modifying_buckets">Modifying contents with Lua
+filters</a>" for more information.
+</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaMapHandler" id="LuaMapHandler">LuaMapHandler</a> <a name="luamaphandler" id="luamaphandler">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Map a path to a lua handler</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaMapHandler uri-pattern /path/to/lua/script.lua [function-name]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>This directive matches a uri pattern to invoke a specific
+ handler function in a specific file. It uses PCRE regular
+ expressions to match the uri, and supports interpolating
+ match groups into both the file path and the function name.
+ Be careful writing your regular expressions to avoid security
+ issues.</p>
+ <div class="example"><h3>Examples:</h3><pre class="prettyprint lang-config">LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2</pre>
+</div>
+ <p>This would match uri's such as /photos/show?id=9
+ to the file /scripts/photos.lua and invoke the
+ handler function handle_show on the lua vm after
+ loading that file.</p>
+
+<pre class="prettyprint lang-config">LuaMapHandler /bingo /scripts/wombat.lua</pre>
+
+ <p>This would invoke the "handle" function, which
+ is the default if no specific function name is
+ provided.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaOutputFilter" id="LuaOutputFilter">LuaOutputFilter</a> <a name="luaoutputfilter" id="luaoutputfilter">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a Lua function for content output filtering</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaOutputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.5 and later</td></tr>
+</table>
+<p>Provides a means of adding a Lua function as an output filter.
+As with input filters, output filters work as coroutines,
+first yielding before buffers are sent, then yielding whenever
+a bucket needs to be passed down the chain, and finally (optionally)
+yielding anything that needs to be appended to the input data. The
+global variable <code>bucket</code> holds the buckets as they are passed
+onto the Lua script:
+</p>
+
+<pre class="prettyprint lang-config">LuaOutputFilter myOutputFilter /www/filter.lua output_filter
+<Files *.lua>
+ SetOutputFilter myOutputFilter
+</Files></pre>
+
+<pre class="prettyprint lang-lua">--[[
+ Example output filter that escapes all HTML entities in the output
+]]--
+function output_filter(r)
+ coroutine.yield("(Handled by myOutputFilter)<br/>\n") -- Prepend some data to the output,
+ -- yield and wait for buckets.
+ while bucket do -- For each bucket, do...
+ local output = r:escape_html(bucket) -- Escape all output
+ coroutine.yield(output) -- Send converted data down the chain
+ end
+ -- No more buckets available.
+end</pre>
+
+<p>
+As with the input filter, the output filter supports denying/skipping a filter
+if it is deemed unwanted:
+</p>
+<pre class="prettyprint lang-lua">function output_filter(r)
+ if not r.content_type:match("text/html") then
+ return -- Simply deny filtering, passing on the original content instead
+ end
+ coroutine.yield() -- wait for buckets
+ ... -- insert filter stuff here
+end</pre>
+
+<div class="note"><h3>Lua filters with <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></h3>
+<p> When a Lua filter is used as the underlying provider via the
+<code class="directive"><a href="../mod/mod_filter.html#filterprovider">FilterProvider</a></code> directive, filtering
+will only work when the <var>filter-name</var> is identical to the <var>provider-name</var>.
+</p> </div>
+
+<p>
+See "<a href="#modifying_buckets">Modifying contents with Lua filters</a>" for more
+information.
+</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaPackageCPath" id="LuaPackageCPath">LuaPackageCPath</a> <a name="luapackagecpath" id="luapackagecpath">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a directory to lua's package.cpath</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaPackageCPath /path/to/include/?.soa</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Add a path to lua's shared library search path. Follows the same
+ conventions as lua. This just munges the package.cpath in the
+ lua vms.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaPackagePath" id="LuaPackagePath">LuaPackagePath</a> <a name="luapackagepath" id="luapackagepath">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a directory to lua's package.path</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaPackagePath /path/to/include/?.lua</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>Add a path to lua's module search path. Follows the same
+ conventions as lua. This just munges the package.path in the
+ lua vms.</p>
+
+ <div class="example"><h3>Examples:</h3><pre class="prettyprint lang-config">LuaPackagePath /scripts/lib/?.lua
+LuaPackagePath /scripts/lib/?/init.lua</pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaQuickHandler" id="LuaQuickHandler">LuaQuickHandler</a> <a name="luaquickhandler" id="luaquickhandler">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the quick handler of request processing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaQuickHandler /path/to/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>
+ This phase is run immediately after the request has been mapped to a virtal host,
+ and can be used to either do some request processing before the other phases kick
+ in, or to serve a request without the need to translate, map to storage et cetera.
+ As this phase is run before anything else, directives such as <code class="directive"><a href="../mod/core.html#location"><Location></a></code> or <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> are void in this phase, just as
+ URIs have not been properly parsed yet.
+ </p>
+ <div class="note"><h3>Context</h3><p>This directive is not valid in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, or htaccess
+ context.</p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaRoot" id="LuaRoot">LuaRoot</a> <a name="luaroot" id="luaroot">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify the base path for resolving relative paths for mod_lua directives</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaRoot /path/to/a/directory</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Specify the base path which will be used to evaluate all
+ relative paths within mod_lua. If not specified they
+ will be resolved relative to the current working directory,
+ which may not always work well for a server.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LuaScope" id="LuaScope">LuaScope</a> <a name="luascope" id="luascope">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>One of once, request, conn, thread -- default is once</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaScope once|request|conn|thread|server [min] [max]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LuaScope once</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Specify the life cycle scope of the Lua interpreter which will
+ be used by handlers in this "Directory." The default is "once"</p>
+
+ <dl>
+ <dt>once:</dt> <dd>use the interpreter once and throw it away.</dd>
+
+ <dt>request:</dt> <dd>use the interpreter to handle anything based on
+ the same file within this request, which is also
+ request scoped.</dd>
+
+ <dt>conn:</dt> <dd>Same as request but attached to the connection_rec</dd>
+
+ <dt>thread:</dt> <dd>Use the interpreter for the lifetime of the thread
+ handling the request (only available with threaded MPMs).</dd>
+
+ <dt>server:</dt> <dd>This one is different than others because the
+ server scope is quite long lived, and multiple threads
+ will have the same server_rec. To accommodate this,
+ server scoped Lua states are stored in an apr
+ resource list. The <code>min</code> and <code>max</code> arguments
+ specify the minimum and maximum number of Lua states to keep in the
+ pool.</dd>
+ </dl>
+ <p>
+ Generally speaking, the <code>thread</code> and <code>server</code> scopes
+ execute roughly 2-3 times faster than the rest, because they don't have to
+ spawn new Lua states on every request (especially with the event MPM, as
+ even keepalive requests will use a new thread for each request). If you are
+ satisfied that your scripts will not have problems reusing a state, then
+ the <code>thread</code> or <code>server</code> scopes should be used for
+ maximum performance. While the <code>thread</code> scope will provide the
+ fastest responses, the <code>server</code> scope will use less memory, as
+ states are pooled, allowing f.x. 1000 threads to share only 100 Lua states,
+ thus using only 10% of the memory required by the <code>thread</code> scope.
+ </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basicconf" id="basicconf">Basic Configuration</a></h2>
+
+<p>The basic module loading directive is</p>
+
+<pre class="prettyprint lang-config">LoadModule lua_module modules/mod_lua.so</pre>
+
+
+<p>
+<code>mod_lua</code> provides a handler named <code>lua-script</code>,
+which can be used with a <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> or
+<code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> directive:</p>
+
+<pre class="prettyprint lang-config"><Files *.lua>
+ SetHandler lua-script
+</Files></pre>
+
+
+<p>
+This will cause <code>mod_lua</code> to handle requests for files
+ending in <code>.lua</code> by invoking that file's
+<code>handle</code> function.
+</p>
+
+<p>For more flexibility, see <code class="directive">LuaMapHandler</code>.
+</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writinghandlers" id="writinghandlers">Writing Handlers</a></h2>
+<p> In the Apache HTTP Server API, the handler is a specific kind of hook
+responsible for generating the response. Examples of modules that include a
+handler are <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>,
+and <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p>
+
+<p><code>mod_lua</code> always looks to invoke a Lua function for the handler, rather than
+just evaluating a script body CGI style. A handler function looks
+something like this:</p>
+
+
+<pre class="prettyprint lang-lua">
+<strong>example.lua</strong><br />
+-- example handler
+
+require "string"
+
+--[[
+ This is the default method name for Lua handlers, see the optional
+ function-name in the LuaMapHandler directive to choose a different
+ entry point.
+--]]
+function handle(r)
+ r.content_type = "text/plain"
+
+ if r.method == 'GET' then
+ r:puts("Hello Lua World!\n")
+ for k, v in pairs( r:parseargs() ) do
+ r:puts( string.format("%s: %s\n", k, v) )
+ end
+ elseif r.method == 'POST' then
+ r:puts("Hello Lua World!\n")
+ for k, v in pairs( r:parsebody() ) do
+ r:puts( string.format("%s: %s\n", k, v) )
+ end
+ elseif r.method == 'PUT' then
+-- use our own Error contents
+ r:puts("Unsupported HTTP method " .. r.method)
+ r.status = 405
+ return apache2.ok
+ else
+-- use the ErrorDocument
+ return 501
+ end
+ return apache2.OK
+end</pre>
+
+
+<p>
+This handler function just prints out the uri or form encoded
+arguments to a plaintext page.
+</p>
+
+<p>
+This means (and in fact encourages) that you can have multiple
+handlers (or hooks, or filters) in the same script.
+</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writingauthzproviders" id="writingauthzproviders">Writing Authorization Providers</a></h2>
+
+
+<p><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> provides a high-level interface to
+authorization that is much easier to use than using into the relevant
+hooks directly. The first argument to the
+<code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive gives
+the name of the responsible authorization provider. For any
+<code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> line,
+<code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> will call the authorization provider
+of the given name, passing the rest of the line as parameters. The
+provider will then check authorization and pass the result as return
+value.</p>
+
+<p>The authz provider is normally called before authentication. If it needs to
+know the authenticated user name (or if the user will be authenticated at
+all), the provider must return <code>apache2.AUTHZ_DENIED_NO_USER</code>.
+This will cause authentication to proceed and the authz provider to be
+called a second time.</p>
+
+<p>The following authz provider function takes two arguments, one ip
+address and one user name. It will allow access from the given ip address
+without authentication, or if the authenticated user matches the second
+argument:</p>
+
+<pre class="prettyprint lang-lua">
+<strong>authz_provider.lua</strong><br />
+
+require 'apache2'
+
+function authz_check_foo(r, ip, user)
+ if r.useragent_ip == ip then
+ return apache2.AUTHZ_GRANTED
+ elseif r.user == nil then
+ return apache2.AUTHZ_DENIED_NO_USER
+ elseif r.user == user then
+ return apache2.AUTHZ_GRANTED
+ else
+ return apache2.AUTHZ_DENIED
+ end
+end</pre>
+
+
+<p>The following configuration registers this function as provider
+<code>foo</code> and configures it for URL <code>/</code>:</p>
+<pre class="prettyprint lang-config">LuaAuthzProvider foo authz_provider.lua authz_check_foo
+<Location />
+ Require foo 10.1.2.3 john_doe
+</Location></pre>
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writinghooks" id="writinghooks">Writing Hooks</a></h2>
+
+<p>Hook functions are how modules (and Lua scripts) participate in the
+processing of requests. Each type of hook exposed by the server exists for
+a specific purpose, such as mapping requests to the file system,
+performing access control, or setting mime types:</p>
+
+<table class="bordered"><tr class="header">
+ <th>Hook phase</th>
+ <th>mod_lua directive</th>
+ <th>Description</th>
+ </tr>
+<tr>
+ <td>Quick handler</td>
+ <td><code class="directive"><a href="#luaquickhandler">LuaQuickHandler</a></code></td>
+ <td>This is the first hook that will be called after a request has
+ been mapped to a host or virtual host</td>
+ </tr>
+<tr class="odd">
+ <td>Translate name</td>
+ <td><code class="directive"><a href="#luahooktranslatename">LuaHookTranslateName</a></code></td>
+ <td>This phase translates the requested URI into a filename on the
+ system. Modules such as <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> and
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> operate in this phase.</td>
+ </tr>
+<tr>
+ <td>Map to storage</td>
+ <td><code class="directive"><a href="#luahookmaptostorage">LuaHookMapToStorage</a></code></td>
+ <td>This phase maps files to their physical, cached or external/proxied storage.
+ It can be used by proxy or caching modules</td>
+ </tr>
+<tr class="odd">
+ <td>Check Access</td>
+ <td><code class="directive"><a href="#luahookaccesschecker">LuaHookAccessChecker</a></code></td>
+ <td>This phase checks whether a client has access to a resource. This
+ phase is run before the user is authenticated, so beware.
+ </td>
+ </tr>
+<tr>
+ <td>Check User ID</td>
+ <td><code class="directive"><a href="#luahookcheckuserid">LuaHookCheckUserID</a></code></td>
+ <td>This phase it used to check the negotiated user ID</td>
+ </tr>
+<tr class="odd">
+ <td>Check Authorization</td>
+ <td><code class="directive"><a href="#luahookauthchecker">LuaHookAuthChecker</a></code> or
+ <code class="directive"><a href="#luaauthzprovider">LuaAuthzProvider</a></code></td>
+ <td>This phase authorizes a user based on the negotiated credentials, such as
+ user ID, client certificate etc.
+ </td>
+ </tr>
+<tr>
+ <td>Check Type</td>
+ <td><code class="directive"><a href="#luahooktypechecker">LuaHookTypeChecker</a></code></td>
+ <td>This phase checks the requested file and assigns a content type and
+ a handler to it</td>
+ </tr>
+<tr class="odd">
+ <td>Fixups</td>
+ <td><code class="directive"><a href="#luahookfixups">LuaHookFixups</a></code></td>
+ <td>This is the final "fix anything" phase before the content handlers
+ are run. Any last-minute changes to the request should be made here.</td>
+ </tr>
+<tr>
+ <td>Content handler</td>
+ <td>fx. <code>.lua</code> files or through <code class="directive"><a href="#luamaphandler">LuaMapHandler</a></code></td>
+ <td>This is where the content is handled. Files are read, parsed, some are run,
+ and the result is sent to the client</td>
+ </tr>
+<tr class="odd">
+ <td>Logging</td>
+ <td><code class="directive"><a href="#luahooklog">LuaHookLog</a></code></td>
+ <td>Once a request has been handled, it enters several logging phases,
+ which logs the request in either the error or access log. Mod_lua
+ is able to hook into the start of this and control logging output.</td>
+ </tr>
+</table>
+
+<p>Hook functions are passed the request object as their only argument
+(except for LuaAuthzProvider, which also gets passed the arguments from
+the Require directive).
+They can return any value, depending on the hook, but most commonly
+they'll return OK, DONE, or DECLINED, which you can write in Lua as
+<code>apache2.OK</code>, <code>apache2.DONE</code>, or
+<code>apache2.DECLINED</code>, or else an HTTP status code.</p>
+
+
+<pre class="prettyprint lang-lua">
+<strong>translate_name.lua</strong><br />
+-- example hook that rewrites the URI to a filesystem path.
+
+require 'apache2'
+
+function translate_name(r)
+ if r.uri == "/translate-name" then
+ r.filename = r.document_root .. "/find_me.txt"
+ return apache2.OK
+ end
+ -- we don't care about this URL, give another module a chance
+ return apache2.DECLINED
+end</pre>
+
+
+
+<pre class="prettyprint lang-lua">
+<strong>translate_name2.lua</strong><br />
+--[[ example hook that rewrites one URI to another URI. It returns a
+ apache2.DECLINED to give other URL mappers a chance to work on the
+ substitution, including the core translate_name hook which maps based
+ on the DocumentRoot.
+
+ Note: Use the early/late flags in the directive to make it run before
+ or after mod_alias.
+--]]
+
+require 'apache2'
+
+function translate_name(r)
+ if r.uri == "/translate-name" then
+ r.uri = "/find_me.txt"
+ return apache2.DECLINED
+ end
+ return apache2.DECLINED
+end</pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="datastructures" id="datastructures">Data Structures</a></h2>
+
+<dl>
+<dt>request_rec</dt>
+ <dd>
+ <p>The request_rec is mapped in as a userdata. It has a metatable
+ which lets you do useful things with it. For the most part it
+ has the same fields as the request_rec struct, many of which are writable as
well as readable. (The table fields' content can be changed, but the
fields themselves cannot be set to different tables.)</p>
end</pre>
-<pre class="prettyprint lang-lua">r:addoutputfilter(name|function) -- add an output filter:
-
-r:addoutputfilter("fooFilter") -- add the fooFilter to the output stream</pre>
-
-
-<pre class="prettyprint lang-lua">r:sendfile(filename) -- sends an entire file to the client, using sendfile if supported by the current platform:
-
-if use_sendfile_thing then
- r:sendfile("/var/www/large_file.img")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:parseargs() -- returns two tables; one standard key/value table for regular GET data,
- -- and one for multi-value data (fx. foo=1&foo=2&foo=3):
-
-local GET, GETMULTI = r:parseargs()
-r:puts("Your name is: " .. GET['name'] or "Unknown")</pre>
-
-
-<pre class="prettyprint lang-lua">r:parsebody([sizeLimit]) -- parse the request body as a POST and return two lua tables,
- -- just like r:parseargs().
- -- An optional number may be passed to specify the maximum number
- -- of bytes to parse. Default is 8192 bytes:
-
-local POST, POSTMULTI = r:parsebody(1024*1024)
-r:puts("Your name is: " .. POST['name'] or "Unknown")</pre>
-
-
-<pre class="prettyprint lang-lua">r:puts("hello", " world", "!") -- print to response body, self explanatory</pre>
-
-
-<pre class="prettyprint lang-lua">r:write("a single string") -- print to response body, self explanatory</pre>
-
-
-<pre class="prettyprint lang-lua">r:escape_html("<html>test</html>") -- Escapes HTML code and returns the escaped result</pre>
-
-
-<pre class="prettyprint lang-lua">r:base64_encode(string) -- Encodes a string using the Base64 encoding standard:
-
-local encoded = r:base64_encode("This is a test") -- returns VGhpcyBpcyBhIHRlc3Q=</pre>
-
-
-<pre class="prettyprint lang-lua">r:base64_decode(string) -- Decodes a Base64-encoded string:
-
-local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test'</pre>
-
-
-<pre class="prettyprint lang-lua">r:md5(string) -- Calculates and returns the MD5 digest of a string (binary safe):
-
-local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339</pre>
-
-
-<pre class="prettyprint lang-lua">r:sha1(string) -- Calculates and returns the SHA1 digest of a string (binary safe):
-
-local hash = r:sha1("This is a test") -- returns a54d88e06612d820bc3be72877c74f257b561b19</pre>
-
-
-<pre class="prettyprint lang-lua">r:escape(string) -- URL-Escapes a string:
-
-local url = "http://foo.bar/1 2 3 & 4 + 5"
-local escaped = r:escape(url) -- returns 'http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5'</pre>
-
-
-<pre class="prettyprint lang-lua">r:unescape(string) -- Unescapes an URL-escaped string:
-
-local url = "http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5"
-local unescaped = r:unescape(url) -- returns 'http://foo.bar/1 2 3 & 4 + 5'</pre>
-
-
-<pre class="prettyprint lang-lua">r:construct_url(string) -- Constructs an URL from an URI
-
-local url = r:construct_url(r.uri)</pre>
-
-
-<pre class="prettyprint lang-lua">r.mpm_query(number) -- Queries the server for MPM information using ap_mpm_query:
-
-local mpm = r.mpm_query(14)
-if mpm == 1 then
- r:puts("This server uses the Event MPM")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:expr(string) -- Evaluates an <a href="../expr.html">expr</a> string.
-
-if r:expr("%{HTTP_HOST} =~ /^www/") then
- r:puts("This host name starts with www")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:scoreboard_process(a) -- Queries the server for information about the process at position <code>a</code>:
-
-local process = r:scoreboard_process(1)
-r:puts("Server 1 has PID " .. process.pid)</pre>
-
-
-<pre class="prettyprint lang-lua">r:scoreboard_worker(a, b) -- Queries for information about the worker thread, <code>b</code>, in process <code>a</code>:
-
-local thread = r:scoreboard_worker(1, 1)
-r:puts("Server 1's thread 1 has thread ID " .. thread.tid .. " and is in " .. thread.status .. " status")</pre>
-
-
-
-<pre class="prettyprint lang-lua">r:clock() -- Returns the current time with microsecond precision</pre>
-
-
-<pre class="prettyprint lang-lua">r:requestbody(filename) -- Reads and returns the request body of a request.
- -- If 'filename' is specified, it instead saves the
- -- contents to that file:
-
-local input = r:requestbody()
-r:puts("You sent the following request body to me:\n")
-r:puts(input)</pre>
-
-
-<pre class="prettyprint lang-lua">r:add_input_filter(filter_name) -- Adds 'filter_name' as an input filter</pre>
-
-
-<pre class="prettyprint lang-lua">r.module_info(module_name) -- Queries the server for information about a module
-
-local mod = r.module_info("mod_lua.c")
-if mod then
- for k, v in pairs(mod.commands) do
- r:puts( ("%s: %s\n"):format(k,v)) -- print out all directives accepted by this module
- end
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:loaded_modules() -- Returns a list of modules loaded by httpd:
-
-for k, module in pairs(r:loaded_modules()) do
- r:puts("I have loaded module " .. module .. "\n")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:runtime_dir_relative(filename) -- Compute the name of a run-time file (e.g., shared memory "file")
- -- relative to the appropriate run-time directory.</pre>
-
-
-<pre class="prettyprint lang-lua">r:server_info() -- Returns a table containing server information, such as
- -- the name of the httpd executable file, mpm used etc.</pre>
-
-
-<pre class="prettyprint lang-lua">r:set_document_root(file_path) -- Sets the document root for the request to file_path</pre>
-
-
-
-
-<pre class="prettyprint lang-lua">r:set_context_info(prefix, docroot) -- Sets the context prefix and context document root for a request</pre>
-
-
-<pre class="prettyprint lang-lua">r:os_escape_path(file_path) -- Converts an OS path to a URL in an OS dependent way</pre>
-
-
-<pre class="prettyprint lang-lua">r:escape_logitem(string) -- Escapes a string for logging</pre>
-
-
-<pre class="prettyprint lang-lua">r.strcmp_match(string, pattern) -- Checks if 'string' matches 'pattern' using strcmp_match (globs).
- -- fx. whether 'www.example.com' matches '*.example.com':
-
-local match = r.strcmp_match("foobar.com", "foo*.com")
-if match then
- r:puts("foobar.com matches foo*.com")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:set_keepalive() -- Sets the keepalive status for a request. Returns true if possible, false otherwise.</pre>
-
-
-<pre class="prettyprint lang-lua">r:make_etag() -- Constructs and returns the etag for the current request.</pre>
-
-
-<pre class="prettyprint lang-lua">r:send_interim_response(clear) -- Sends an interim (1xx) response to the client.
- -- if 'clear' is true, available headers will be sent and cleared.</pre>
-
-
-<pre class="prettyprint lang-lua">r:custom_response(status_code, string) -- Construct and set a custom response for a given status code.
- -- This works much like the ErrorDocument directive:
-
-r:custom_response(404, "Baleted!")</pre>
-
-
-<pre class="prettyprint lang-lua">r.exists_config_define(string) -- Checks whether a configuration definition exists or not:
-
-if r.exists_config_define("FOO") then
- r:puts("httpd was probably run with -DFOO, or it was defined in the configuration")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:state_query(string) -- Queries the server for state information</pre>
-
-
-<pre class="prettyprint lang-lua">r:stat(filename [,wanted]) -- Runs stat() on a file, and returns a table with file information:
-
-local info = r:stat("/var/www/foo.txt")
-if info then
- r:puts("This file exists and was last modified at: " .. info.modified)
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:regex(string, pattern [,flags]) -- Runs a regular expression match on a string, returning captures if matched:
+<pre class="prettyprint lang-lua">r:addoutputfilter(name|function) -- add an output filter:
-local matches = r:regex("foo bar baz", [[foo (\w+) (\S*)]])
-if matches then
- r:puts("The regex matched, and the last word captured ($2) was: " .. matches[2])
-end
+r:addoutputfilter("fooFilter") -- add the fooFilter to the output stream</pre>
--- Example ignoring case sensitivity:
-local matches = r:regex("FOO bar BAz", [[(foo) bar]], 1)
--- Flags can be a bitwise combination of:
--- 0x01: Ignore case
--- 0x02: Multiline search</pre>
+<pre class="prettyprint lang-lua">r:sendfile(filename) -- sends an entire file to the client, using sendfile if supported by the current platform:
+if use_sendfile_thing then
+ r:sendfile("/var/www/large_file.img")
+end</pre>
-<pre class="prettyprint lang-lua">r.usleep(number_of_microseconds) -- Puts the script to sleep for a given number of microseconds.</pre>
+<pre class="prettyprint lang-lua">r:parseargs() -- returns two tables; one standard key/value table for regular GET data,
+ -- and one for multi-value data (fx. foo=1&foo=2&foo=3):
-<pre class="prettyprint lang-lua">r:dbacquire(dbType[, dbParams]) -- Acquires a connection to a database and returns a database class.
- -- See '<a href="#databases">Database connectivity</a>' for details.</pre>
+local GET, GETMULTI = r:parseargs()
+r:puts("Your name is: " .. GET['name'] or "Unknown")</pre>
-<pre class="prettyprint lang-lua">r:ivm_set("key", value) -- Set an Inter-VM variable to hold a specific value.
- -- These values persist even though the VM is gone or not being used,
- -- and so should only be used if MaxConnectionsPerChild is > 0
- -- Values can be numbers, strings and booleans, and are stored on a
- -- per process basis (so they won't do much good with a prefork mpm)
-
-r:ivm_get("key") -- Fetches a variable set by ivm_set. Returns the contents of the variable
- -- if it exists or nil if no such variable exists.
-
--- An example getter/setter that saves a global variable outside the VM:
-function handle(r)
- -- First VM to call this will get no value, and will have to create it
- local foo = r:ivm_get("cached_data")
- if not foo then
- foo = do_some_calcs() -- fake some return value
- r:ivm_set("cached_data", foo) -- set it globally
- end
- r:puts("Cached data is: ", foo)
-end</pre>
+<pre class="prettyprint lang-lua">r:parsebody([sizeLimit]) -- parse the request body as a POST and return two lua tables,
+ -- just like r:parseargs().
+ -- An optional number may be passed to specify the maximum number
+ -- of bytes to parse. Default is 8192 bytes:
+
+local POST, POSTMULTI = r:parsebody(1024*1024)
+r:puts("Your name is: " .. POST['name'] or "Unknown")</pre>
-<pre class="prettyprint lang-lua">r:htpassword(string [,algorithm [,cost]]) -- Creates a password hash from a string.
- -- algorithm: 0 = APMD5 (default), 1 = SHA, 2 = BCRYPT, 3 = CRYPT.
- -- cost: only valid with BCRYPT algorithm (default = 5).</pre>
+<pre class="prettyprint lang-lua">r:puts("hello", " world", "!") -- print to response body, self explanatory</pre>
-<pre class="prettyprint lang-lua">r:mkdir(dir [,mode]) -- Creates a directory and sets mode to optional mode paramter.</pre>
+<pre class="prettyprint lang-lua">r:write("a single string") -- print to response body, self explanatory</pre>
-<pre class="prettyprint lang-lua">r:mkrdir(dir [,mode]) -- Creates directories recursive and sets mode to optional mode paramter.</pre>
+<pre class="prettyprint lang-lua">r:escape_html("<html>test</html>") -- Escapes HTML code and returns the escaped result</pre>
-<pre class="prettyprint lang-lua">r:rmdir(dir) -- Removes a directory.</pre>
+<pre class="prettyprint lang-lua">r:base64_encode(string) -- Encodes a string using the Base64 encoding standard:
+local encoded = r:base64_encode("This is a test") -- returns VGhpcyBpcyBhIHRlc3Q=</pre>
-<pre class="prettyprint lang-lua">r:touch(file [,mtime]) -- Sets the file modification time to current time or to optional mtime msec value.</pre>
+<pre class="prettyprint lang-lua">r:base64_decode(string) -- Decodes a Base64-encoded string:
-<pre class="prettyprint lang-lua">r:get_direntries(dir) -- Returns a table with all directory entries.
+local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test'</pre>
-function handle(r)
- local dir = r.context_document_root
- for _, f in ipairs(r:get_direntries(dir)) do
- local info = r:stat(dir .. "/" .. f)
- if info then
- local mtime = os.date(fmt, info.mtime / 1000000)
- local ftype = (info.filetype == 2) and "[dir] " or "[file]"
- r:puts( ("%s %s %10i %s\n"):format(ftype, mtime, info.size, f) )
- end
- end
-end</pre>
+<pre class="prettyprint lang-lua">r:md5(string) -- Calculates and returns the MD5 digest of a string (binary safe):
-<pre class="prettyprint lang-lua">r.date_parse_rfc(string) -- Parses a date/time string and returns seconds since epoche.</pre>
+local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339</pre>
-<pre class="prettyprint lang-lua">r:getcookie(key) -- Gets a HTTP cookie</pre>
+<pre class="prettyprint lang-lua">r:sha1(string) -- Calculates and returns the SHA1 digest of a string (binary safe):
+local hash = r:sha1("This is a test") -- returns a54d88e06612d820bc3be72877c74f257b561b19</pre>
-<pre class="prettyprint lang-lua">r:setcookie{
- key = [key],
- value = [value],
- expires = [expiry],
- secure = [boolean],
- httponly = [boolean],
- path = [path],
- domain = [domain]
-} -- Sets a HTTP cookie, for instance:
-r:setcookie{
- key = "cookie1",
- value = "HDHfa9eyffh396rt",
- expires = os.time() + 86400,
- secure = true
-}</pre>
+<pre class="prettyprint lang-lua">r:escape(string) -- URL-Escapes a string:
+local url = "http://foo.bar/1 2 3 & 4 + 5"
+local escaped = r:escape(url) -- returns 'http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5'</pre>
-<pre class="prettyprint lang-lua">r:wsupgrade() -- Upgrades a connection to WebSockets if possible (and requested):
-if r:wsupgrade() then -- if we can upgrade:
- r:wswrite("Welcome to websockets!") -- write something to the client
- r:wsclose() -- goodbye!
-end</pre>
+<pre class="prettyprint lang-lua">r:unescape(string) -- Unescapes an URL-escaped string:
-<pre class="prettyprint lang-lua">r:wsread() -- Reads a WebSocket frame from a WebSocket upgraded connection (see above):
+local url = "http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5"
+local unescaped = r:unescape(url) -- returns 'http://foo.bar/1 2 3 & 4 + 5'</pre>
-local line, isFinal = r:wsread() -- isFinal denotes whether this is the final frame.
- -- If it isn't, then more frames can be read
-r:wswrite("You wrote: " .. line)</pre>
+<pre class="prettyprint lang-lua">r:construct_url(string) -- Constructs an URL from an URI
-<pre class="prettyprint lang-lua">r:wswrite(line) -- Writes a frame to a WebSocket client:
-r:wswrite("Hello, world!")</pre>
+local url = r:construct_url(r.uri)</pre>
-<pre class="prettyprint lang-lua">r:wsclose() -- Closes a WebSocket request and terminates it for httpd:
+<pre class="prettyprint lang-lua">r.mpm_query(number) -- Queries the server for MPM information using ap_mpm_query:
-if r:wsupgrade() then
- r:wswrite("Write something: ")
- local line = r:wsread() or "nothing"
- r:wswrite("You wrote: " .. line);
- r:wswrite("Goodbye!")
- r:wsclose()
+local mpm = r.mpm_query(14)
+if mpm == 1 then
+ r:puts("This server uses the Event MPM")
end</pre>
-<pre class="prettyprint lang-lua">r:wspeek() -- Checks if any data is ready to be read
-
--- Sleep while nothing is being sent to us...
-while r:wspeek() == false do
- r.usleep(50000)
-end
--- We have data ready!
-local line = r:wsread()</pre>
-
-
+<pre class="prettyprint lang-lua">r:expr(string) -- Evaluates an <a href="../expr.html">expr</a> string.
-<pre class="prettyprint lang-lua">r:config() -- Get a walkable tree of the entire httpd configuration</pre>
+if r:expr("%{HTTP_HOST} =~ /^www/") then
+ r:puts("This host name starts with www")
+end</pre>
-<pre class="prettyprint lang-lua">r:activeconfig() -- Get a walkable tree of the active (virtualhost-specific) httpd configuration</pre>
+<pre class="prettyprint lang-lua">r:scoreboard_process(a) -- Queries the server for information about the process at position <code>a</code>:
+local process = r:scoreboard_process(1)
+r:puts("Server 1 has PID " .. process.pid)</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logging" id="logging">Logging Functions</a></h2>
+<pre class="prettyprint lang-lua">r:scoreboard_worker(a, b) -- Queries for information about the worker thread, <code>b</code>, in process <code>a</code>:
-<pre class="prettyprint lang-lua"> -- examples of logging messages<br />
- r:trace1("This is a trace log message") -- trace1 through trace8 can be used <br />
- r:debug("This is a debug log message")<br />
- r:info("This is an info log message")<br />
- r:notice("This is a notice log message")<br />
- r:warn("This is a warn log message")<br />
- r:err("This is an err log message")<br />
- r:alert("This is an alert log message")<br />
- r:crit("This is a crit log message")<br />
- r:emerg("This is an emerg log message")<br />
-</pre>
+local thread = r:scoreboard_worker(1, 1)
+r:puts("Server 1's thread 1 has thread ID " .. thread.tid .. " and is in " .. thread.status .. " status")</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="apache2" id="apache2">apache2 Package</a></h2>
-<p>A package named <code>apache2</code> is available with (at least) the following contents.</p>
-<dl>
- <dt>apache2.OK</dt>
- <dd>internal constant OK. Handlers should return this if they've
- handled the request.</dd>
- <dt>apache2.DECLINED</dt>
- <dd>internal constant DECLINED. Handlers should return this if
- they are not going to handle the request.</dd>
- <dt>apache2.DONE</dt>
- <dd>internal constant DONE.</dd>
- <dt>apache2.version</dt>
- <dd>Apache HTTP server version string</dd>
- <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
- <dd>HTTP status code</dd>
- <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
- <dd>internal constants used by <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
- <dt>apache2.AUTHZ_DENIED, apache2.AUTHZ_GRANTED, apache2.AUTHZ_NEUTRAL, apache2.AUTHZ_GENERAL_ERROR, apache2.AUTHZ_DENIED_NO_USER</dt>
- <dd>internal constants used by <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code></dd>
-</dl>
-<p>(Other HTTP status codes are not yet implemented.)</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="modifying_buckets" id="modifying_buckets">Modifying contents with Lua filters</a></h2>
-
- <p>
- Filter functions implemented via <code class="directive"><a href="#luainputfilter">LuaInputFilter</a></code>
- or <code class="directive"><a href="#luaoutputfilter">LuaOutputFilter</a></code> are designed as
- three-stage non-blocking functions using coroutines to suspend and resume a
- function as buckets are sent down the filter chain. The core structure of
- such a function is:
- </p>
- <pre class="prettyprint lang-lua">function filter(r)
- -- Our first yield is to signal that we are ready to receive buckets.
- -- Before this yield, we can set up our environment, check for conditions,
- -- and, if we deem it necessary, decline filtering a request alltogether:
- if something_bad then
- return -- This would skip this filter.
- end
- -- Regardless of whether we have data to prepend, a yield MUST be called here.
- -- Note that only output filters can prepend data. Input filters must use the
- -- final stage to append data to the content.
- coroutine.yield([optional header to be prepended to the content])
-
- -- After we have yielded, buckets will be sent to us, one by one, and we can
- -- do whatever we want with them and then pass on the result.
- -- Buckets are stored in the global variable 'bucket', so we create a loop
- -- that checks if 'bucket' is not nil:
- while bucket ~= nil do
- local output = mangle(bucket) -- Do some stuff to the content
- coroutine.yield(output) -- Return our new content to the filter chain
- end
+<pre class="prettyprint lang-lua">r:clock() -- Returns the current time with microsecond precision</pre>
- -- Once the buckets are gone, 'bucket' is set to nil, which will exit the
- -- loop and land us here. Anything extra we want to append to the content
- -- can be done by doing a final yield here. Both input and output filters
- -- can append data to the content in this phase.
- coroutine.yield([optional footer to be appended to the content])
-end</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="databases" id="databases">Database connectivity</a></h2>
-
- <p>
- Mod_lua implements a simple database feature for querying and running commands
- on the most popular database engines (mySQL, PostgreSQL, FreeTDS, ODBC, SQLite, Oracle)
- as well as mod_dbd.
- </p>
- <p>The example below shows how to acquire a database handle and return information from a table:</p>
- <pre class="prettyprint lang-lua">function handle(r)
- -- Acquire a database handle
- local database, err = r:dbacquire("mysql", "server=localhost,user=someuser,pass=somepass,dbname=mydb")
- if not err then
- -- Select some information from it
- local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1")
- if not err then
- local rows = results(0) -- fetch all rows synchronously
- for k, row in pairs(rows) do
- r:puts( string.format("Name: %s, Age: %s<br/>", row[1], row[2]) )
- end
- else
- r:puts("Database query error: " .. err)
- end
- database:close()
- else
- r:puts("Could not connect to the database: " .. err)
+<pre class="prettyprint lang-lua">r:requestbody(filename) -- Reads and returns the request body of a request.
+ -- If 'filename' is specified, it instead saves the
+ -- contents to that file:
+
+local input = r:requestbody()
+r:puts("You sent the following request body to me:\n")
+r:puts(input)</pre>
+
+
+<pre class="prettyprint lang-lua">r:add_input_filter(filter_name) -- Adds 'filter_name' as an input filter</pre>
+
+
+<pre class="prettyprint lang-lua">r.module_info(module_name) -- Queries the server for information about a module
+
+local mod = r.module_info("mod_lua.c")
+if mod then
+ for k, v in pairs(mod.commands) do
+ r:puts( ("%s: %s\n"):format(k,v)) -- print out all directives accepted by this module
end
end</pre>
- <p>
- To utilize <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>, specify <code>mod_dbd</code>
- as the database type, or leave the field blank:
- </p>
- <pre class="prettyprint lang-lua">local database = r:dbacquire("mod_dbd")</pre>
- <h3><a name="database_object" id="database_object">Database object and contained functions</a></h3>
-
- <p>The database object returned by <code>dbacquire</code> has the following methods:</p>
- <p><strong>Normal select and query from a database:</strong></p>
- <pre class="prettyprint lang-lua">-- Run a statement and return the number of rows affected:
-local affected, errmsg = database:query(r, "DELETE FROM `tbl` WHERE 1")
+<pre class="prettyprint lang-lua">r:loaded_modules() -- Returns a list of modules loaded by httpd:
--- Run a statement and return a result set that can be used synchronously or async:
-local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1")</pre>
+for k, module in pairs(r:loaded_modules()) do
+ r:puts("I have loaded module " .. module .. "\n")
+end</pre>
- <p><strong>Using prepared statements (recommended):</strong></p>
- <pre class="prettyprint lang-lua">-- Create and run a prepared statement:
-local statement, errmsg = database:prepare(r, "DELETE FROM `tbl` WHERE `age` > %u")
-if not errmsg then
- local result, errmsg = statement:query(20) -- run the statement with age > 20
-end
--- Fetch a prepared statement from a DBDPrepareSQL directive:
-local statement, errmsg = database:prepared(r, "someTag")
-if not errmsg then
- local result, errmsg = statement:select("John Doe", 123) -- inject the values "John Doe" and 123 into the statement
-end</pre>
+<pre class="prettyprint lang-lua">r:runtime_dir_relative(filename) -- Compute the name of a run-time file (e.g., shared memory "file")
+ -- relative to the appropriate run-time directory.</pre>
- <p><strong>Escaping values, closing databases etc:</strong></p>
- <pre class="prettyprint lang-lua">-- Escape a value for use in a statement:
-local escaped = database:escape(r, [["'|blabla]])
--- Close a database connection and free up handles:
-database:close()
+<pre class="prettyprint lang-lua">r:server_info() -- Returns a table containing server information, such as
+ -- the name of the httpd executable file, mpm used etc.</pre>
--- Check whether a database connection is up and running:
-local connected = database:active()</pre>
-
- <h3><a name="result_sets" id="result_sets">Working with result sets</a></h3>
-
- <p>The result set returned by <code>db:select</code> or by the prepared statement functions
- created through <code>db:prepare</code> can be used to
- fetch rows synchronously or asynchronously, depending on the row number specified:<br />
- <code>result(0)</code> fetches all rows in a synchronous manner, returning a table of rows.<br />
- <code>result(-1)</code> fetches the next available row in the set, asynchronously.<br />
- <code>result(N)</code> fetches row number <code>N</code>, asynchronously:
- </p>
- <pre class="prettyprint lang-lua">-- fetch a result set using a regular query:
-local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1")
+<pre class="prettyprint lang-lua">r:set_document_root(file_path) -- Sets the document root for the request to file_path</pre>
-local rows = result(0) -- Fetch ALL rows synchronously
-local row = result(-1) -- Fetch the next available row, asynchronously
-local row = result(1234) -- Fetch row number 1234, asynchronously
-local row = result(-1, true) -- Fetch the next available row, using row names as key indexes.</pre>
- <p>One can construct a function that returns an iterative function to iterate over all rows
- in a synchronous or asynchronous way, depending on the async argument:
- </p>
- <pre class="prettyprint lang-lua">function rows(resultset, async)
- local a = 0
- local function getnext()
- a = a + 1
- local row = resultset(-1)
- return row and a or nil, row
- end
- if not async then
- return pairs(resultset(0))
- else
- return getnext, self
- end
-end
-local statement, err = db:prepare(r, "SELECT * FROM `tbl` WHERE `age` > %u")
-if not err then
- -- fetch rows asynchronously:
- local result, err = statement:select(20)
- if not err then
- for index, row in rows(result, true) do
- ....
- end
- end
- -- fetch rows synchronously:
- local result, err = statement:select(20)
- if not err then
- for index, row in rows(result, false) do
- ....
- end
- end
+<pre class="prettyprint lang-lua">r:set_context_info(prefix, docroot) -- Sets the context prefix and context document root for a request</pre>
+
+
+<pre class="prettyprint lang-lua">r:os_escape_path(file_path) -- Converts an OS path to a URL in an OS dependent way</pre>
+
+
+<pre class="prettyprint lang-lua">r:escape_logitem(string) -- Escapes a string for logging</pre>
+
+
+<pre class="prettyprint lang-lua">r.strcmp_match(string, pattern) -- Checks if 'string' matches 'pattern' using strcmp_match (globs).
+ -- fx. whether 'www.example.com' matches '*.example.com':
+
+local match = r.strcmp_match("foobar.com", "foo*.com")
+if match then
+ r:puts("foobar.com matches foo*.com")
end</pre>
-
- <h3><a name="closing_databases" id="closing_databases">Closing a database connection</a></h3>
-
- <p>Database handles should be closed using <code>database:close()</code> when they are no longer
- needed. If you do not close them manually, they will eventually be garbage collected and
- closed by mod_lua, but you may end up having too many unused connections to the database
- if you leave the closing up to mod_lua. Essentially, the following two measures are
- the same:
- </p>
- <pre class="prettyprint lang-lua">-- Method 1: Manually close a handle
-local database = r:dbacquire("mod_dbd")
-database:close() -- All done
+<pre class="prettyprint lang-lua">r:set_keepalive() -- Sets the keepalive status for a request. Returns true if possible, false otherwise.</pre>
--- Method 2: Letting the garbage collector close it
-local database = r:dbacquire("mod_dbd")
-database = nil -- throw away the reference
-collectgarbage() -- close the handle via GC</pre>
-
- <h3><a name="database_caveat" id="database_caveat">Precautions when working with databases</a></h3>
-
- <p>Although the standard <code>query</code> and <code>run</code> functions are freely
- available, it is recommended that you use prepared statements whenever possible, to
- both optimize performance (if your db handle lives on for a long time) and to minimize
- the risk of SQL injection attacks. <code>run</code> and <code>query</code> should only
- be used when there are no variables inserted into a statement (a static statement).
- When using dynamic statements, use <code>db:prepare</code> or <code>db:prepared</code>.
- </p>
-
+<pre class="prettyprint lang-lua">r:make_etag() -- Constructs and returns the etag for the current request.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaAuthzProvider" id="LuaAuthzProvider">LuaAuthzProvider</a> <a name="luaauthzprovider" id="luaauthzprovider">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Plug an authorization provider function into <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaAuthzProvider provider_name /path/to/lua/script.lua function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.3 and later</td></tr>
-</table>
-<p>After a lua function has been registered as authorization provider, it can be used
-with the <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive:</p>
-<pre class="prettyprint lang-config">LuaRoot /usr/local/apache2/lua
-LuaAuthzProvider foo authz.lua authz_check_foo
-<Location />
- Require foo johndoe
-</Location></pre>
+<pre class="prettyprint lang-lua">r:send_interim_response(clear) -- Sends an interim (1xx) response to the client.
+ -- if 'clear' is true, available headers will be sent and cleared.</pre>
-<pre class="prettyprint lang-lua">require "apache2"
-function authz_check_foo(r, who)
- if r.user ~= who then return apache2.AUTHZ_DENIED
- return apache2.AUTHZ_GRANTED
-end</pre>
+<pre class="prettyprint lang-lua">r:custom_response(status_code, string) -- Construct and set a custom response for a given status code.
+ -- This works much like the ErrorDocument directive:
+
+r:custom_response(404, "Baleted!")</pre>
+<pre class="prettyprint lang-lua">r.exists_config_define(string) -- Checks whether a configuration definition exists or not:
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaCodeCache" id="LuaCodeCache">LuaCodeCache</a> <a name="luacodecache" id="luacodecache">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure the compiled code cache.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaCodeCache stat|forever|never</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LuaCodeCache stat</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>
- Specify the behavior of the in-memory code cache. The default
- is stat, which stats the top level script (not any included
- ones) each time that file is needed, and reloads it if the
- modified time indicates it is newer than the one it has
- already loaded. The other values cause it to keep the file
- cached forever (don't stat and replace) or to never cache the
- file.</p>
+if r.exists_config_define("FOO") then
+ r:puts("httpd was probably run with -DFOO, or it was defined in the configuration")
+end</pre>
- <p>In general stat or forever is good for production, and stat or never
- for development.</p>
- <div class="example"><h3>Examples:</h3><pre class="prettyprint lang-config">LuaCodeCache stat
-LuaCodeCache forever
-LuaCodeCache never</pre>
-</div>
+<pre class="prettyprint lang-lua">r:state_query(string) -- Queries the server for state information</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookAccessChecker" id="LuaHookAccessChecker">LuaHookAccessChecker</a> <a name="luahookaccesschecker" id="luahookaccesschecker">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the access_checker phase of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookAccessChecker /path/to/lua/script.lua hook_function_name [early|late]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The optional third argument is supported in 2.3.15 and later</td></tr>
-</table>
-<p>Add your hook to the access_checker phase. An access checker
-hook function usually returns OK, DECLINED, or HTTP_FORBIDDEN.</p>
- <div class="note"><h3>Ordering</h3><p>The optional arguments "early" or "late"
- control when this script runs relative to other modules.</p></div>
+<pre class="prettyprint lang-lua">r:stat(filename [,wanted]) -- Runs stat() on a file, and returns a table with file information:
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookAuthChecker" id="LuaHookAuthChecker">LuaHookAuthChecker</a> <a name="luahookauthchecker" id="luahookauthchecker">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the auth_checker phase of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookAuthChecker /path/to/lua/script.lua hook_function_name [early|late]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The optional third argument is supported in 2.3.15 and later</td></tr>
-</table>
-<p>Invoke a lua function in the auth_checker phase of processing
-a request. This can be used to implement arbitrary authentication
-and authorization checking. A very simple example:
-</p>
-<pre class="prettyprint lang-lua">require 'apache2'
+local info = r:stat("/var/www/foo.txt")
+if info then
+ r:puts("This file exists and was last modified at: " .. info.modified)
+end</pre>
--- fake authcheck hook
--- If request has no auth info, set the response header and
--- return a 401 to ask the browser for basic auth info.
--- If request has auth info, don't actually look at it, just
--- pretend we got userid 'foo' and validated it.
--- Then check if the userid is 'foo' and accept the request.
-function authcheck_hook(r)
- -- look for auth info
- auth = r.headers_in['Authorization']
- if auth ~= nil then
- -- fake the user
- r.user = 'foo'
- end
+<pre class="prettyprint lang-lua">r:regex(string, pattern [,flags]) -- Runs a regular expression match on a string, returning captures if matched:
+
+local matches = r:regex("foo bar baz", [[foo (\w+) (\S*)]])
+if matches then
+ r:puts("The regex matched, and the last word captured ($2) was: " .. matches[2])
+end
+
+-- Example ignoring case sensitivity:
+local matches = r:regex("FOO bar BAz", [[(foo) bar]], 1)
- if r.user == nil then
- r:debug("authcheck: user is nil, returning 401")
- r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
- return 401
- elseif r.user == "foo" then
- r:debug('user foo: OK')
- else
- r:debug("authcheck: user='" .. r.user .. "'")
- r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
- return 401
- end
- return apache2.OK
-end</pre>
+-- Flags can be a bitwise combination of:
+-- 0x01: Ignore case
+-- 0x02: Multiline search</pre>
- <div class="note"><h3>Ordering</h3><p>The optional arguments "early" or "late"
- control when this script runs relative to other modules.</p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookCheckUserID" id="LuaHookCheckUserID">LuaHookCheckUserID</a> <a name="luahookcheckuserid" id="luahookcheckuserid">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the check_user_id phase of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookCheckUserID /path/to/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookFixups" id="LuaHookFixups">LuaHookFixups</a> <a name="luahookfixups" id="luahookfixups">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the fixups phase of a request
-processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookFixups /path/to/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
-<p>
- Just like LuaHookTranslateName, but executed at the fixups phase
-</p>
+<pre class="prettyprint lang-lua">r.usleep(number_of_microseconds) -- Puts the script to sleep for a given number of microseconds.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookInsertFilter" id="LuaHookInsertFilter">LuaHookInsertFilter</a> <a name="luahookinsertfilter" id="luahookinsertfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the insert_filter phase of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookInsertFilter /path/to/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>Not Yet Implemented</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookLog" id="LuaHookLog">LuaHookLog</a> <a name="luahooklog" id="luahooklog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the access log phase of a request
-processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookLog /path/to/lua/script.lua log_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
-<p>
- This simple logging hook allows you to run a function when httpd enters the
- logging phase of a request. With it, you can append data to your own logs,
- manipulate data before the regular log is written, or prevent a log entry
- from being created. To prevent the usual logging from happening, simply return
- <code>apache2.DONE</code> in your logging handler, otherwise return
- <code>apache2.OK</code> to tell httpd to log as normal.
-</p>
-<p>Example:</p>
-<pre class="prettyprint lang-config">LuaHookLog /path/to/script.lua logger</pre>
-<pre class="prettyprint lang-lua">-- /path/to/script.lua --
-function logger(r)
- -- flip a coin:
- -- If 1, then we write to our own Lua log and tell httpd not to log
- -- in the main log.
- -- If 2, then we just sanitize the output a bit and tell httpd to
- -- log the sanitized bits.
+<pre class="prettyprint lang-lua">r:dbacquire(dbType[, dbParams]) -- Acquires a connection to a database and returns a database class.
+ -- See '<a href="#databases">Database connectivity</a>' for details.</pre>
- if math.random(1,2) == 1 then
- -- Log stuff ourselves and don't log in the regular log
- local f = io.open("/foo/secret.log", "a")
- if f then
- f:write("Something secret happened at " .. r.uri .. "\n")
- f:close()
- end
- return apache2.DONE -- Tell httpd not to use the regular logging functions
- else
- r.uri = r.uri:gsub("somesecretstuff", "") -- sanitize the URI
- return apache2.OK -- tell httpd to log it.
+
+<pre class="prettyprint lang-lua">r:ivm_set("key", value) -- Set an Inter-VM variable to hold a specific value.
+ -- These values persist even though the VM is gone or not being used,
+ -- and so should only be used if MaxConnectionsPerChild is > 0
+ -- Values can be numbers, strings and booleans, and are stored on a
+ -- per process basis (so they won't do much good with a prefork mpm)
+
+r:ivm_get("key") -- Fetches a variable set by ivm_set. Returns the contents of the variable
+ -- if it exists or nil if no such variable exists.
+
+-- An example getter/setter that saves a global variable outside the VM:
+function handle(r)
+ -- First VM to call this will get no value, and will have to create it
+ local foo = r:ivm_get("cached_data")
+ if not foo then
+ foo = do_some_calcs() -- fake some return value
+ r:ivm_set("cached_data", foo) -- set it globally
end
+ r:puts("Cached data is: ", foo)
end</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookMapToStorage" id="LuaHookMapToStorage">LuaHookMapToStorage</a> <a name="luahookmaptostorage" id="luahookmaptostorage">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the map_to_storage phase of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookMapToStorage /path/to/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Like <code class="directive">LuaHookTranslateName</code> but executed at the
- map-to-storage phase of a request. Modules like mod_cache run at this phase,
- which makes for an interesting example on what to do here:</p>
- <pre class="prettyprint lang-config">LuaHookMapToStorage /path/to/lua/script.lua check_cache</pre>
+<pre class="prettyprint lang-lua">r:htpassword(string [,algorithm [,cost]]) -- Creates a password hash from a string.
+ -- algorithm: 0 = APMD5 (default), 1 = SHA, 2 = BCRYPT, 3 = CRYPT.
+ -- cost: only valid with BCRYPT algorithm (default = 5).</pre>
- <pre class="prettyprint lang-lua">require"apache2"
-cached_files = {}
-function read_file(filename)
- local input = io.open(filename, "r")
- if input then
- local data = input:read("*a")
- cached_files[filename] = data
- file = cached_files[filename]
- input:close()
- end
- return cached_files[filename]
-end
+<pre class="prettyprint lang-lua">r:mkdir(dir [,mode]) -- Creates a directory and sets mode to optional mode paramter.</pre>
-function check_cache(r)
- if r.filename:match("%.png$") then -- Only match PNG files
- local file = cached_files[r.filename] -- Check cache entries
- if not file then
- file = read_file(r.filename) -- Read file into cache
- end
- if file then -- If file exists, write it out
- r.status = 200
- r:write(file)
- r:info(("Sent %s to client from cache"):format(r.filename))
- return apache2.DONE -- skip default handler for PNG files
- end
+
+<pre class="prettyprint lang-lua">r:mkrdir(dir [,mode]) -- Creates directories recursive and sets mode to optional mode paramter.</pre>
+
+
+<pre class="prettyprint lang-lua">r:rmdir(dir) -- Removes a directory.</pre>
+
+
+<pre class="prettyprint lang-lua">r:touch(file [,mtime]) -- Sets the file modification time to current time or to optional mtime msec value.</pre>
+
+
+<pre class="prettyprint lang-lua">r:get_direntries(dir) -- Returns a table with all directory entries.
+
+function handle(r)
+ local dir = r.context_document_root
+ for _, f in ipairs(r:get_direntries(dir)) do
+ local info = r:stat(dir .. "/" .. f)
+ if info then
+ local mtime = os.date(fmt, info.mtime / 1000000)
+ local ftype = (info.filetype == 2) and "[dir] " or "[file]"
+ r:puts( ("%s %s %10i %s\n"):format(ftype, mtime, info.size, f) )
end
- return apache2.DECLINED -- If we had nothing to do, let others serve this.
+ end
end</pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookTranslateName" id="LuaHookTranslateName">LuaHookTranslateName</a> <a name="luahooktranslatename" id="luahooktranslatename">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the translate name phase of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookTranslateName /path/to/lua/script.lua hook_function_name [early|late]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The optional third argument is supported in 2.3.15 and later</td></tr>
-</table><p>
- Add a hook (at APR_HOOK_MIDDLE) to the translate name phase of
- request processing. The hook function receives a single
- argument, the request_rec, and should return a status code,
- which is either an HTTP error code, or the constants defined
- in the apache2 module: apache2.OK, apache2.DECLINED, or
- apache2.DONE. </p>
+<pre class="prettyprint lang-lua">r.date_parse_rfc(string) -- Parses a date/time string and returns seconds since epoche.</pre>
- <p>For those new to hooks, basically each hook will be invoked
- until one of them returns apache2.OK. If your hook doesn't
- want to do the translation it should just return
- apache2.DECLINED. If the request should stop processing, then
- return apache2.DONE.</p>
- <p>Example:</p>
+<pre class="prettyprint lang-lua">r:getcookie(key) -- Gets a HTTP cookie</pre>
-<pre class="prettyprint lang-config"># httpd.conf
-LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</pre>
+<pre class="prettyprint lang-lua">r:setcookie{
+ key = [key],
+ value = [value],
+ expires = [expiry],
+ secure = [boolean],
+ httponly = [boolean],
+ path = [path],
+ domain = [domain]
+} -- Sets a HTTP cookie, for instance:
+
+r:setcookie{
+ key = "cookie1",
+ value = "HDHfa9eyffh396rt",
+ expires = os.time() + 86400,
+ secure = true
+}</pre>
-<pre class="prettyprint lang-lua">-- /scripts/conf/hooks.lua --
-require "apache2"
-function silly_mapper(r)
- if r.uri == "/" then
- r.filename = "/var/www/home.lua"
- return apache2.OK
- else
- return apache2.DECLINED
- end
+
+<pre class="prettyprint lang-lua">r:wsupgrade() -- Upgrades a connection to WebSockets if possible (and requested):
+if r:wsupgrade() then -- if we can upgrade:
+ r:wswrite("Welcome to websockets!") -- write something to the client
+ r:wsclose() -- goodbye!
end</pre>
- <div class="note"><h3>Context</h3><p>This directive is not valid in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, or htaccess
- context.</p></div>
+<pre class="prettyprint lang-lua">r:wsread() -- Reads a WebSocket frame from a WebSocket upgraded connection (see above):
+
+local line, isFinal = r:wsread() -- isFinal denotes whether this is the final frame.
+ -- If it isn't, then more frames can be read
+r:wswrite("You wrote: " .. line)</pre>
+
+
+<pre class="prettyprint lang-lua">r:wswrite(line) -- Writes a frame to a WebSocket client:
+r:wswrite("Hello, world!")</pre>
+
- <div class="note"><h3>Ordering</h3><p>The optional arguments "early" or "late"
- control when this script runs relative to other modules.</p></div>
+<pre class="prettyprint lang-lua">r:wsclose() -- Closes a WebSocket request and terminates it for httpd:
+if r:wsupgrade() then
+ r:wswrite("Write something: ")
+ local line = r:wsread() or "nothing"
+ r:wswrite("You wrote: " .. line);
+ r:wswrite("Goodbye!")
+ r:wsclose()
+end</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaHookTypeChecker" id="LuaHookTypeChecker">LuaHookTypeChecker</a> <a name="luahooktypechecker" id="luahooktypechecker">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the type_checker phase of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaHookTypeChecker /path/to/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>
- This directive provides a hook for the type_checker phase of the request processing.
- This phase is where requests are assigned a content type and a handler, and thus can
- be used to modify the type and handler based on input:
- </p>
- <pre class="prettyprint lang-config">LuaHookTypeChecker /path/to/lua/script.lua type_checker</pre>
- <pre class="prettyprint lang-lua"> function type_checker(r)
- if r.uri:match("%.to_gif$") then -- match foo.png.to_gif
- r.content_type = "image/gif" -- assign it the image/gif type
- r.handler = "gifWizard" -- tell the gifWizard module to handle this
- r.filename = r.uri:gsub("%.to_gif$", "") -- fix the filename requested
- return apache2.OK
- end
+<pre class="prettyprint lang-lua">r:wspeek() -- Checks if any data is ready to be read
- return apache2.DECLINED
- end</pre>
+-- Sleep while nothing is being sent to us...
+while r:wspeek() == false do
+ r.usleep(50000)
+end
+-- We have data ready!
+local line = r:wsread()</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaInherit" id="LuaInherit">LuaInherit</a> <a name="luainherit" id="luainherit">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls how parent configuration sections are merged into children</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaInherit none|parent-first|parent-last</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LuaInherit parent-first</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.0 and later</td></tr>
-</table><p>By default, if LuaHook* directives are used in overlapping
- Directory or Location configuration sections, the scripts defined in the
- more specific section are run <em>after</em> those defined in the more
- generic section (LuaInherit parent-first). You can reverse this order, or
- make the parent context not apply at all.</p>
-
- <p> In previous 2.3.x releases, the default was effectively to ignore LuaHook*
- directives from parent configuration sections.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaInputFilter" id="LuaInputFilter">LuaInputFilter</a> <a name="luainputfilter" id="luainputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a Lua function for content input filtering</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaInputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.5 and later</td></tr>
-</table>
-<p>Provides a means of adding a Lua function as an input filter.
-As with output filters, input filters work as coroutines,
-first yielding before buffers are sent, then yielding whenever
-a bucket needs to be passed down the chain, and finally (optionally)
-yielding anything that needs to be appended to the input data. The
-global variable <code>bucket</code> holds the buckets as they are passed
-onto the Lua script:
-</p>
-<pre class="prettyprint lang-config">LuaInputFilter myInputFilter /www/filter.lua input_filter
-<Files *.lua>
- SetInputFilter myInputFilter
-</Files></pre>
+<pre class="prettyprint lang-lua">r:config() -- Get a walkable tree of the entire httpd configuration</pre>
-<pre class="prettyprint lang-lua">--[[
- Example input filter that converts all POST data to uppercase.
-]]--
-function input_filter(r)
- print("luaInputFilter called") -- debug print
- coroutine.yield() -- Yield and wait for buckets
- while bucket do -- For each bucket, do...
- local output = string.upper(bucket) -- Convert all POST data to uppercase
- coroutine.yield(output) -- Send converted data down the chain
- end
- -- No more buckets available.
- coroutine.yield("&filterSignature=1234") -- Append signature at the end
-end</pre>
-<p>
-The input filter supports denying/skipping a filter if it is deemed unwanted:
-</p>
-<pre class="prettyprint lang-lua">function input_filter(r)
- if not good then
- return -- Simply deny filtering, passing on the original content instead
- end
- coroutine.yield() -- wait for buckets
- ... -- insert filter stuff here
-end</pre>
+<pre class="prettyprint lang-lua">r:activeconfig() -- Get a walkable tree of the active (virtualhost-specific) httpd configuration</pre>
-<p>
-See "<a href="#modifying_buckets">Modifying contents with Lua
-filters</a>" for more information.
-</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaMapHandler" id="LuaMapHandler">LuaMapHandler</a> <a name="luamaphandler" id="luamaphandler">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Map a path to a lua handler</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaMapHandler uri-pattern /path/to/lua/script.lua [function-name]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>This directive matches a uri pattern to invoke a specific
- handler function in a specific file. It uses PCRE regular
- expressions to match the uri, and supports interpolating
- match groups into both the file path and the function name.
- Be careful writing your regular expressions to avoid security
- issues.</p>
- <div class="example"><h3>Examples:</h3><pre class="prettyprint lang-config">LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2</pre>
-</div>
- <p>This would match uri's such as /photos/show?id=9
- to the file /scripts/photos.lua and invoke the
- handler function handle_show on the lua vm after
- loading that file.</p>
-<pre class="prettyprint lang-config">LuaMapHandler /bingo /scripts/wombat.lua</pre>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logging" id="logging">Logging Functions</a></h2>
- <p>This would invoke the "handle" function, which
- is the default if no specific function name is
- provided.</p>
+<pre class="prettyprint lang-lua"> -- examples of logging messages<br />
+ r:trace1("This is a trace log message") -- trace1 through trace8 can be used <br />
+ r:debug("This is a debug log message")<br />
+ r:info("This is an info log message")<br />
+ r:notice("This is a notice log message")<br />
+ r:warn("This is a warn log message")<br />
+ r:err("This is an err log message")<br />
+ r:alert("This is an alert log message")<br />
+ r:crit("This is a crit log message")<br />
+ r:emerg("This is an emerg log message")<br />
+</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaOutputFilter" id="LuaOutputFilter">LuaOutputFilter</a> <a name="luaoutputfilter" id="luaoutputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a Lua function for content output filtering</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaOutputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.5 and later</td></tr>
-</table>
-<p>Provides a means of adding a Lua function as an output filter.
-As with input filters, output filters work as coroutines,
-first yielding before buffers are sent, then yielding whenever
-a bucket needs to be passed down the chain, and finally (optionally)
-yielding anything that needs to be appended to the input data. The
-global variable <code>bucket</code> holds the buckets as they are passed
-onto the Lua script:
-</p>
-<pre class="prettyprint lang-config">LuaOutputFilter myOutputFilter /www/filter.lua output_filter
-<Files *.lua>
- SetOutputFilter myOutputFilter
-</Files></pre>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="apache2" id="apache2">apache2 Package</a></h2>
+<p>A package named <code>apache2</code> is available with (at least) the following contents.</p>
+<dl>
+ <dt>apache2.OK</dt>
+ <dd>internal constant OK. Handlers should return this if they've
+ handled the request.</dd>
+ <dt>apache2.DECLINED</dt>
+ <dd>internal constant DECLINED. Handlers should return this if
+ they are not going to handle the request.</dd>
+ <dt>apache2.DONE</dt>
+ <dd>internal constant DONE.</dd>
+ <dt>apache2.version</dt>
+ <dd>Apache HTTP server version string</dd>
+ <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
+ <dd>HTTP status code</dd>
+ <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
+ <dd>internal constants used by <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
+ <dt>apache2.AUTHZ_DENIED, apache2.AUTHZ_GRANTED, apache2.AUTHZ_NEUTRAL, apache2.AUTHZ_GENERAL_ERROR, apache2.AUTHZ_DENIED_NO_USER</dt>
+ <dd>internal constants used by <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code></dd>
-<pre class="prettyprint lang-lua">--[[
- Example output filter that escapes all HTML entities in the output
-]]--
-function output_filter(r)
- coroutine.yield("(Handled by myOutputFilter)<br/>\n") -- Prepend some data to the output,
- -- yield and wait for buckets.
- while bucket do -- For each bucket, do...
- local output = r:escape_html(bucket) -- Escape all output
- coroutine.yield(output) -- Send converted data down the chain
+</dl>
+<p>(Other HTTP status codes are not yet implemented.)</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="modifying_buckets" id="modifying_buckets">Modifying contents with Lua filters</a></h2>
+
+ <p>
+ Filter functions implemented via <code class="directive"><a href="#luainputfilter">LuaInputFilter</a></code>
+ or <code class="directive"><a href="#luaoutputfilter">LuaOutputFilter</a></code> are designed as
+ three-stage non-blocking functions using coroutines to suspend and resume a
+ function as buckets are sent down the filter chain. The core structure of
+ such a function is:
+ </p>
+ <pre class="prettyprint lang-lua">function filter(r)
+ -- Our first yield is to signal that we are ready to receive buckets.
+ -- Before this yield, we can set up our environment, check for conditions,
+ -- and, if we deem it necessary, decline filtering a request alltogether:
+ if something_bad then
+ return -- This would skip this filter.
+ end
+ -- Regardless of whether we have data to prepend, a yield MUST be called here.
+ -- Note that only output filters can prepend data. Input filters must use the
+ -- final stage to append data to the content.
+ coroutine.yield([optional header to be prepended to the content])
+
+ -- After we have yielded, buckets will be sent to us, one by one, and we can
+ -- do whatever we want with them and then pass on the result.
+ -- Buckets are stored in the global variable 'bucket', so we create a loop
+ -- that checks if 'bucket' is not nil:
+ while bucket ~= nil do
+ local output = mangle(bucket) -- Do some stuff to the content
+ coroutine.yield(output) -- Return our new content to the filter chain
+ end
+
+ -- Once the buckets are gone, 'bucket' is set to nil, which will exit the
+ -- loop and land us here. Anything extra we want to append to the content
+ -- can be done by doing a final yield here. Both input and output filters
+ -- can append data to the content in this phase.
+ coroutine.yield([optional footer to be appended to the content])
+end</pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="databases" id="databases">Database connectivity</a></h2>
+
+ <p>
+ Mod_lua implements a simple database feature for querying and running commands
+ on the most popular database engines (mySQL, PostgreSQL, FreeTDS, ODBC, SQLite, Oracle)
+ as well as mod_dbd.
+ </p>
+ <p>The example below shows how to acquire a database handle and return information from a table:</p>
+ <pre class="prettyprint lang-lua">function handle(r)
+ -- Acquire a database handle
+ local database, err = r:dbacquire("mysql", "server=localhost,user=someuser,pass=somepass,dbname=mydb")
+ if not err then
+ -- Select some information from it
+ local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1")
+ if not err then
+ local rows = results(0) -- fetch all rows synchronously
+ for k, row in pairs(rows) do
+ r:puts( string.format("Name: %s, Age: %s<br/>", row[1], row[2]) )
+ end
+ else
+ r:puts("Database query error: " .. err)
+ end
+ database:close()
+ else
+ r:puts("Could not connect to the database: " .. err)
end
- -- No more buckets available.
end</pre>
-<p>
-As with the input filter, the output filter supports denying/skipping a filter
-if it is deemed unwanted:
-</p>
-<pre class="prettyprint lang-lua">function output_filter(r)
- if not r.content_type:match("text/html") then
- return -- Simply deny filtering, passing on the original content instead
- end
- coroutine.yield() -- wait for buckets
- ... -- insert filter stuff here
-end</pre>
+ <p>
+ To utilize <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>, specify <code>mod_dbd</code>
+ as the database type, or leave the field blank:
+ </p>
+ <pre class="prettyprint lang-lua">local database = r:dbacquire("mod_dbd")</pre>
-<div class="note"><h3>Lua filters with <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></h3>
-<p> When a Lua filter is used as the underlying provider via the
-<code class="directive"><a href="../mod/mod_filter.html#filterprovider">FilterProvider</a></code> directive, filtering
-will only work when the <var>filter-name</var> is identical to the <var>provider-name</var>.
-</p> </div>
+ <h3><a name="database_object" id="database_object">Database object and contained functions</a></h3>
+
+ <p>The database object returned by <code>dbacquire</code> has the following methods:</p>
+ <p><strong>Normal select and query from a database:</strong></p>
+ <pre class="prettyprint lang-lua">-- Run a statement and return the number of rows affected:
+local affected, errmsg = database:query(r, "DELETE FROM `tbl` WHERE 1")
-<p>
-See "<a href="#modifying_buckets">Modifying contents with Lua filters</a>" for more
-information.
-</p>
+-- Run a statement and return a result set that can be used synchronously or async:
+local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1")</pre>
+ <p><strong>Using prepared statements (recommended):</strong></p>
+ <pre class="prettyprint lang-lua">-- Create and run a prepared statement:
+local statement, errmsg = database:prepare(r, "DELETE FROM `tbl` WHERE `age` > %u")
+if not errmsg then
+ local result, errmsg = statement:query(20) -- run the statement with age > 20
+end
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaPackageCPath" id="LuaPackageCPath">LuaPackageCPath</a> <a name="luapackagecpath" id="luapackagecpath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a directory to lua's package.cpath</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaPackageCPath /path/to/include/?.soa</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Add a path to lua's shared library search path. Follows the same
- conventions as lua. This just munges the package.cpath in the
- lua vms.</p>
+-- Fetch a prepared statement from a DBDPrepareSQL directive:
+local statement, errmsg = database:prepared(r, "someTag")
+if not errmsg then
+ local result, errmsg = statement:select("John Doe", 123) -- inject the values "John Doe" and 123 into the statement
+end</pre>
+ <p><strong>Escaping values, closing databases etc:</strong></p>
+ <pre class="prettyprint lang-lua">-- Escape a value for use in a statement:
+local escaped = database:escape(r, [["'|blabla]])
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaPackagePath" id="LuaPackagePath">LuaPackagePath</a> <a name="luapackagepath" id="luapackagepath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a directory to lua's package.path</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaPackagePath /path/to/include/?.lua</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>Add a path to lua's module search path. Follows the same
- conventions as lua. This just munges the package.path in the
- lua vms.</p>
+-- Close a database connection and free up handles:
+database:close()
- <div class="example"><h3>Examples:</h3><pre class="prettyprint lang-config">LuaPackagePath /scripts/lib/?.lua
-LuaPackagePath /scripts/lib/?/init.lua</pre>
-</div>
+-- Check whether a database connection is up and running:
+local connected = database:active()</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaQuickHandler" id="LuaQuickHandler">LuaQuickHandler</a> <a name="luaquickhandler" id="luaquickhandler">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Provide a hook for the quick handler of request processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaQuickHandler /path/to/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>
- This phase is run immediately after the request has been mapped to a virtal host,
- and can be used to either do some request processing before the other phases kick
- in, or to serve a request without the need to translate, map to storage et cetera.
- As this phase is run before anything else, directives such as <code class="directive"><a href="../mod/core.html#location"><Location></a></code> or <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> are void in this phase, just as
- URIs have not been properly parsed yet.
+
+ <h3><a name="result_sets" id="result_sets">Working with result sets</a></h3>
+
+ <p>The result set returned by <code>db:select</code> or by the prepared statement functions
+ created through <code>db:prepare</code> can be used to
+ fetch rows synchronously or asynchronously, depending on the row number specified:<br />
+ <code>result(0)</code> fetches all rows in a synchronous manner, returning a table of rows.<br />
+ <code>result(-1)</code> fetches the next available row in the set, asynchronously.<br />
+ <code>result(N)</code> fetches row number <code>N</code>, asynchronously:
</p>
- <div class="note"><h3>Context</h3><p>This directive is not valid in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, or htaccess
- context.</p></div>
+ <pre class="prettyprint lang-lua">-- fetch a result set using a regular query:
+local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1")
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaRoot" id="LuaRoot">LuaRoot</a> <a name="luaroot" id="luaroot">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify the base path for resolving relative paths for mod_lua directives</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaRoot /path/to/a/directory</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Specify the base path which will be used to evaluate all
- relative paths within mod_lua. If not specified they
- will be resolved relative to the current working directory,
- which may not always work well for a server.</p>
+local rows = result(0) -- Fetch ALL rows synchronously
+local row = result(-1) -- Fetch the next available row, asynchronously
+local row = result(1234) -- Fetch row number 1234, asynchronously
+local row = result(-1, true) -- Fetch the next available row, using row names as key indexes.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LuaScope" id="LuaScope">LuaScope</a> <a name="luascope" id="luascope">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>One of once, request, conn, thread -- default is once</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LuaScope once|request|conn|thread|server [min] [max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LuaScope once</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Specify the life cycle scope of the Lua interpreter which will
- be used by handlers in this "Directory." The default is "once"</p>
+ <p>One can construct a function that returns an iterative function to iterate over all rows
+ in a synchronous or asynchronous way, depending on the async argument:
+ </p>
+ <pre class="prettyprint lang-lua">function rows(resultset, async)
+ local a = 0
+ local function getnext()
+ a = a + 1
+ local row = resultset(-1)
+ return row and a or nil, row
+ end
+ if not async then
+ return pairs(resultset(0))
+ else
+ return getnext, self
+ end
+end
- <dl>
- <dt>once:</dt> <dd>use the interpreter once and throw it away.</dd>
+local statement, err = db:prepare(r, "SELECT * FROM `tbl` WHERE `age` > %u")
+if not err then
+ -- fetch rows asynchronously:
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, true) do
+ ....
+ end
+ end
- <dt>request:</dt> <dd>use the interpreter to handle anything based on
- the same file within this request, which is also
- request scoped.</dd>
+ -- fetch rows synchronously:
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, false) do
+ ....
+ end
+ end
+end</pre>
- <dt>conn:</dt> <dd>Same as request but attached to the connection_rec</dd>
+
+ <h3><a name="closing_databases" id="closing_databases">Closing a database connection</a></h3>
+
- <dt>thread:</dt> <dd>Use the interpreter for the lifetime of the thread
- handling the request (only available with threaded MPMs).</dd>
+ <p>Database handles should be closed using <code>database:close()</code> when they are no longer
+ needed. If you do not close them manually, they will eventually be garbage collected and
+ closed by mod_lua, but you may end up having too many unused connections to the database
+ if you leave the closing up to mod_lua. Essentially, the following two measures are
+ the same:
+ </p>
+ <pre class="prettyprint lang-lua">-- Method 1: Manually close a handle
+local database = r:dbacquire("mod_dbd")
+database:close() -- All done
- <dt>server:</dt> <dd>This one is different than others because the
- server scope is quite long lived, and multiple threads
- will have the same server_rec. To accommodate this,
- server scoped Lua states are stored in an apr
- resource list. The <code>min</code> and <code>max</code> arguments
- specify the minimum and maximum number of Lua states to keep in the
- pool.</dd>
- </dl>
- <p>
- Generally speaking, the <code>thread</code> and <code>server</code> scopes
- execute roughly 2-3 times faster than the rest, because they don't have to
- spawn new Lua states on every request (especially with the event MPM, as
- even keepalive requests will use a new thread for each request). If you are
- satisfied that your scripts will not have problems reusing a state, then
- the <code>thread</code> or <code>server</code> scopes should be used for
- maximum performance. While the <code>thread</code> scope will provide the
- fastest responses, the <code>server</code> scope will use less memory, as
- states are pooled, allowing f.x. 1000 threads to share only 100 Lua states,
- thus using only 10% of the memory required by the <code>thread</code> scope.
+-- Method 2: Letting the garbage collector close it
+local database = r:dbacquire("mod_dbd")
+database = nil -- throw away the reference
+collectgarbage() -- close the handle via GC</pre>
+
+
+ <h3><a name="database_caveat" id="database_caveat">Precautions when working with databases</a></h3>
+
+ <p>Although the standard <code>query</code> and <code>run</code> functions are freely
+ available, it is recommended that you use prepared statements whenever possible, to
+ both optimize performance (if your db handle lives on for a long time) and to minimize
+ the risk of SQL injection attacks. <code>run</code> and <code>query</code> should only
+ be used when there are no variables inserted into a statement (a static statement).
+ When using dynamic statements, use <code>db:prepare</code> or <code>db:prepared</code>.
</p>
+
</div>
</div>
<li><img alt="" src="../images/down.gif" /> <a href="#databases">Connectivité aux bases de données</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basicconf" id="basicconf">Configuration de base</a></h2>
+<div class="directive-section"><h2><a name="luaauthzprovider" id="luaauthzprovider">Directive</a> <a name="LuaAuthzProvider" id="LuaAuthzProvider">LuaAuthzProvider</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Branche une fonction fournisseur d'autorisation dans <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaAuthzProvider provider_name /path/to/lua/script.lua function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.4.3 du serveur HTTP Apache</td></tr>
+</table>
+<p>Lorsqu'une fonction lua a été enregistrée en tant que fournisseur
+d'autorisation, elle peut être appelée via la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> :</p>
-<p>La directive de base pour le chargement du module est</p>
-<pre class="prettyprint lang-config">LoadModule lua_module modules/mod_lua.so</pre>
+<pre class="prettyprint lang-config">LuaRoot /usr/local/apache2/lua
+LuaAuthzProvider foo authz.lua authz_check_foo
+<Location />
+ Require foo johndoe
+</Location></pre>
+<pre class="prettyprint lang-lua">require "apache2"
+function authz_check_foo(r, who)
+ if r.user ~= who then return apache2.AUTHZ_DENIED
+ return apache2.AUTHZ_GRANTED
+end</pre>
-<p>
-<code>mod_lua</code> fournit un gestionnaire nommé
-<code>lua-script</code> qui peut être utilisé avec une directive
-<code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> ou <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> :</p>
-<pre class="prettyprint lang-config"><Files *.lua>
- SetHandler lua-script
-</Files></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luacodecache" id="luacodecache">Directive</a> <a name="LuaCodeCache" id="LuaCodeCache">LuaCodeCache</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure le cache de code compilé.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaCodeCache stat|forever|never</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LuaCodeCache stat</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>
+ Cette directive permet de définir le comportement du cache de code
+ en mémoire. La valeur par défaut est stat ; dans ce cas, le script
+ du niveau le plus haut (et pas les scripts inclus) est vérifié à
+ chaque fois que ce fichier est nécessaire, et est rechargé si la
+ date de modification est plus récente que celle du script déjà
+ chargé. Les autres valeurs permettent respectivement de garder le
+ fichier en cache perpétuellement (forever - jamais vérifié ni
+ remplacé), ou de ne jamais le mettre en cache (never).</p>
-<p>
-Ceci aura pour effet de faire traiter les requêtes pour les fichiers
-dont l'extension est <code>.lua</code> par <code>mod_lua</code> en
-invoquant cette fonction de <code>gestion</code> de fichier.
-</p>
+ <p>En général, les valeurs stat et forever sont utilisées pour un
+ serveur en production, et les valeurs stat ou never pour un serveur
+ en développement.</p>
-<p>Pour plus de détails, voir la directive
-<code class="directive">LuaMapHandler</code>.
- </p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writinghandlers" id="writinghandlers">Ecrire des gestionnaires</a></h2>
-<p>Dans l'API du serveur HTTP Apache, un gestionnaire est une sorte de
-point d'accroche (hook) spécifique responsable de la génération de la
-réponse. <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> et
-<code class="module"><a href="../mod/mod_status.html">mod_status</a></code> sont des exemples de modules comportant un
-gestionnaire.</p>
+ <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaCodeCache stat
+LuaCodeCache forever
+LuaCodeCache never</pre>
+</div>
-<p><code>mod_lua</code> cherche toujours à invoquer une fonction Lua pour le
-gestionnaire, plutôt que de simplement évaluer le corps d'un script dans
-le style de CGI. Une fonction de gestionnaire se présente comme suit :</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahookaccesschecker" id="luahookaccesschecker">Directive</a> <a name="LuaHookAccessChecker" id="LuaHookAccessChecker">LuaHookAccessChecker</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase access_checker du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookAccessChecker /chemin/vers/lua/script.lua hook_function_name [early|late]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le troisième argument optionnel est disponible depuis la
+version 2.3.15 du serveur HTTP Apache.</td></tr>
+</table>
+<p>Ajoute votre fonction d'accroche à la phase access_checker. Une
+fonction d'accroche access checker renvoie en général OK, DECLINED, ou
+HTTP_FORBIDDEN.</p>
+<div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
+ "early" ou "late" permettent de contrôler le moment auquel ce script
+ s'exécute par rapport aux autres modules.</p></div>
-<pre class="prettyprint lang-lua">
-<strong>example.lua</strong><br />
--- exemple de gestionnaire
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahookauthchecker" id="luahookauthchecker">Directive</a> <a name="LuaHookAuthChecker" id="LuaHookAuthChecker">LuaHookAuthChecker</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase auth_checker du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookAuthChecker /chemin/vers/lua/script.lua hook_function_name [early|late]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le troisième argument optionnel est disponible depuis la
+version 2.3.15 du serveur HTTP Apache.</td></tr>
+</table>
+<p>Invoque une fonction lua au cours de la phase auth_checker du
+traitement de la requête. Cette directive peut s'utiliser pour
+implémenter une vérification arbitraire de l'authentification et de
+l'autorisation. Voici un exemple très simple :
+</p>
+<pre class="prettyprint lang-lua">require 'apache2'
-require "string"
+-- fonction d'accroche authcheck fictive
+-- Si la requête ne contient aucune donnée d'authentification, l'en-tête
+-- de la réponse est défini et un code 401 est renvoyé afin de demander au
+-- navigateur d'effectuer une authentification basique. Si la requête
+-- comporte des données d'authentification, elles ne sont pas vraiment
+-- consultées, mais on admet la prise en compte de l'utilisateur 'foo' et
+-- on la valide. On vérifie ensuite si l'utilisateur est bien 'foo' et on
+-- accepte la requête.
+function authcheck_hook(r)
---[[
- Il s'agit du nom de méthode par défaut pour les gestionnaires Lua ;
- voir les noms de fonctions optionnels dans la directive
- LuaMapHandler pour choisir un point d'entrée différent.
---]]
-function handle(r)
- r.content_type = "text/plain"
+ -- recherche des informations d'authentification
+ auth = r.headers_in['Authorization']
+ if auth ~= nil then
+ -- définition d'un utilisateur par défaut
+ r.user = 'foo'
+ end
- if r.method == 'GET' then
- r:puts("Hello Lua World!\n")
- for k, v in pairs( r:parseargs() ) do
- r:puts( string.format("%s: %s\n", k, v) )
- end
- elseif r.method == 'POST' then
- r:puts("Hello Lua World!\n")
- for k, v in pairs( r:parsebody() ) do
- r:puts( string.format("%s: %s\n", k, v) )
- end
- else
- elseif r.method == 'PUT' then
--- message d'erreur personnalisé
- r:puts("Unsupported HTTP method " .. r.method)
- r.status = 405
- return apache2.ok
- else
--- message d'erreur ErrorDocument
- return 501
- end
- return apache2.OK
+ if r.user == nil then
+ r:debug("authcheck: user is nil, returning 401")
+ r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
+ return 401
+ elseif r.user == "foo" then
+ r:debug('user foo: OK')
+ else
+ r:debug("authcheck: user='" .. r.user .. "'")
+ r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
+ return 401
+ end
+ return apache2.OK
end</pre>
+<div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
+ "early" ou "late" permettent de contrôler le moment auquel ce script
+ s'exécute par rapport aux autres modules.</p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahookcheckuserid" id="luahookcheckuserid">Directive</a> <a name="LuaHookCheckUserID" id="LuaHookCheckUserID">LuaHookCheckUserID</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase check_user_id du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookCheckUserID /path/to/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahookfixups" id="luahookfixups">Directive</a> <a name="LuaHookFixups" id="LuaHookFixups">LuaHookFixups</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase de correction du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookFixups /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
<p>
-Ce gestionnaire se contente d'afficher les arguments codés d'un uri ou
-d'un formulaire dans un page au format texte.
+ Idem LuaHookTranslateName, mais s'exécute durant la phase de
+ correction.
</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahookinsertfilter" id="luahookinsertfilter">Directive</a> <a name="LuaHookInsertFilter" id="LuaHookInsertFilter">LuaHookInsertFilter</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase insert_filter du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookInsertFilter /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>Non encore implémenté</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahooklog" id="luahooklog">Directive</a> <a name="LuaHookLog" id="LuaHookLog">LuaHookLog</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Permet une insertion dans la phase de journalisation du
+traitement d'une requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookLog /path/to/lua/script.lua log_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
<p>
-Cela signifie que vous pouvez (et êtes encouragé à) avoir plusieurs
-gestionnaires (ou points d'entrée, ou filtres) dans le même script.
+ Ce dispositif d'insertion simple permet d'exécuter une fonction
+ lorsque httpd entre dans la phase de journalisation du traitement
+ d'une requête. Vous pouvez ainsi ajouter des données à vos propres
+ entrées de journalisation, manipuler les entrées du journal standard
+ avant leur enregistrement ou empêcher l'enregistrement d'une entrée
+ dans le journal. Pour empêcher l'enregistrement normal des entrées
+ du journal, renvoyez simplement <code>apache2.DONE</code> dans votre
+ gestionnaire de journalisation, ou au contraire, renvoyez
+ <code>apache2.OK</code> pour que httpd effectue une journalisation
+ normale.
</p>
+<p>Exemple :</p>
+<pre class="prettyprint lang-config">LuaHookLog /path/to/script.lua logger</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writingauthzproviders" id="writingauthzproviders">Ecriture de fournisseurs d'autorisation</a></h2>
-
-
-<p><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> fournit une interface d'autorisation
-de haut niveau bien plus facile à utiliser que dans les hooks
-correspondants. Le premier argument de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> permet de spécifier le
-fournisseur d'autorisation à utiliser. Pour chaque directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>,
-<code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> appellera le fournisseur d'autorisation
-spécifié, le reste de la ligne constituant les paramètres. Le
-fournisseur considéré va alors vérifier les autorisations et fournir le
-résultat dans une valeur de retour.</p>
-
-<p>En général, le fournisseur authz est appelé avant l'authentification.
-S'il doit connaître le nom d'utilisateur authentifié (ou si
-l'utilisateur est appelé à être authentifié), le fournisseur doit
-renvoyer <code>apache2.AUTHZ_DENIED_NO_USER</code>, ce qui va
-déclancher le processus d'authentification et un deuxième appel du
-fournisseur authz.</p>
-
-<p>La fonction du fournisseur authz ci-dessous accepte deux arguments,
-une adresse IP et un nom d'utilisateur. Elle autorise l'accès dans le
-cas où la requête provient de l'adresse IP spécifiée, ou si
-l'utilisateur authentifié correspond au second argument :</p>
-
-<pre class="prettyprint lang-lua">
-<strong>authz_provider.lua</strong><br />
-
-require 'apache2'
+<pre class="prettyprint lang-lua">-- /path/to/script.lua --
+function logger(r)
+ -- on joue à pile ou face :
+ -- Si on obtient 1, on écrit dans notre propre journal Lua et on dit
+ -- à httpd de ne pas enregistrer d'entrée dans le journal standard..
+ -- Si on obtient 2, on nettoie un peu les données avant que httpd ne
+ -- les enregistre dans le journal standard.
-function authz_check_foo(r, ip, user)
- if r.useragent_ip == ip then
- return apache2.AUTHZ_GRANTED
- elseif r.user == nil then
- return apache2.AUTHZ_DENIED_NO_USER
- elseif r.user == user then
- return apache2.AUTHZ_GRANTED
+ if math.random(1,2) == 1 then
+ -- On effectue notre propre journalisation et le journal
+ -- standard n'est pas alimenté
+ local f = io.open("/foo/secret.log", "a")
+ if f then
+ f:write("Quelque chose de secret est arrivé à " .. r.uri .. "\n")
+ f:close()
+ end
+ return apache2.DONE -- On dit à httpd de ne rien enregistrer
+ --dans le journal standard
else
- return apache2.AUTHZ_DENIED
+ r.uri = r.uri:gsub("somesecretstuff", "") -- nettoie les données
+ return apache2.OK -- et httpd doit alors les enregistrer.
end
end</pre>
-<p>La configuration suivante enregistre cette fonction en tant que
-fournisseur <code>foo</code>, et la configure por l'URL <code>/</code> :</p>
-<pre class="prettyprint lang-config">LuaAuthzProvider foo authz_provider.lua authz_check_foo
-<Location />
- Require foo 10.1.2.3 john_doe
-</Location></pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahookmaptostorage" id="luahookmaptostorage">Directive</a> <a name="LuaHookMapToStorage" id="LuaHookMapToStorage">LuaHookMapToStorage</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase map_to_storage du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookMapToStorage /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Identique à la directive
+ <code class="directive">LuaHookTranslateName</code>, mais s'exécute à la
+ phase map-to-storage du traitement de la requête. Les modules comme
+ mod_cache agissent pendant cette phase, ce qui permet de présenter
+ un exemple intéressant de ce que l'on peut faire ici :</p>
+ <pre class="prettyprint lang-config">LuaHookMapToStorage /path/to/lua/script.lua check_cache</pre>
+ <pre class="prettyprint lang-lua">require"apache2"
+cached_files = {}
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writinghooks" id="writinghooks">Ecriture de fonctions d'accroche
-(hooks)</a></h2>
+function read_file(filename)
+ local input = io.open(filename, "r")
+ if input then
+ local data = input:read("*a")
+ cached_files[filename] = data
+ file = cached_files[filename]
+ input:close()
+ end
+ return cached_files[filename]
+end
-<p>Les fonctions d'accroche déterminent la manière dont les modules (et
-les scripts Lua) participent au traitement des requêtes. Chaque type
-d'accroche proposé par le serveur a un rôle spécifique, comme
-l'association de requêtes au système de fichiers, le contrôle d'accès,
-ou la définition de types MIME : </p>
+function check_cache(r)
+ if r.filename:match("%.png$") then -- Ne concerne que les fichiers PNG
+ local file = cached_files[r.filename] -- Vérifie les entrées du cache
+ if not file then
+ file = read_file(r.filename) -- Lit le fichier vers le cache
+ end
+ if file then -- Si le fichier existe, on l'envoie
+ r.status = 200
+ r:write(file)
+ r:info(("%s a été envoyé au client depuis le cache"):format(r.filename))
+ return apache2.DONE -- cout-circuite le gestionnaire par défaut des fichiers PNG
+ end
+ end
+ return apache2.DECLINED -- Si nous n'avons rien eu à faire, nous laissons les autres s'en charger
+end</pre>
-<table class="bordered"><tr class="header">
- <th>Phase d'accroche</th>
- <th>Directive mod_lua</th>
- <th>Description</th>
- </tr>
-<tr>
- <td>Gestionnaire rapide</td>
- <td><code class="directive"><a href="#luaquickhandler">LuaQuickHandler</a></code></td>
- <td>Il s'agit de la première accroche appelée lorsqu'une requête
- a été associée à un serveur ou un serveur virtuel.</td>
- </tr>
-<tr class="odd">
- <td>Phase de traduction</td>
- <td><code class="directive"><a href="#luahooktranslatename">LuaHookTranslateName</a></code></td>
- <td>Cette phase traduit l'URI de la requête en nom de fichier
- sur le système. Ce sont des modules comme
- <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> et <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> qui
- interviennent au cours de cette phase.</td>
- </tr>
-<tr>
- <td>Choix du lieu de stockage de la ressource</td>
- <td><code class="directive"><a href="#luahookmaptostorage">LuaHookMapToStorage</a></code></td>
- <td>Cette phase définit le lieu de stockage de la ressource :
- physique, en cache ou externe/mandaté. Elle est assurée par les
- modules de mandat ou de mise en cache.</td>
- </tr>
-<tr class="odd">
- <td>Autorisation d'accès</td>
- <td><code class="directive"><a href="#luahookaccesschecker">LuaHookAccessChecker</a></code></td>
- <td>Cette phase vérifie si un client a l'autorisation d'accès à
- la ressource. Elle s'exécute avant l'authentification de
- l'utisateur ; il faut donc être prudent.
- </td>
- </tr>
-<tr>
- <td>Vérification de l'identifiant utilisateur</td>
- <td><code class="directive"><a href="#luahookcheckuserid">LuaHookCheckUserID</a></code></td>
- <td>Cette phase vérifie l'identifiant de l'utilisateur ayant
- fait l'objet d'une négociation.</td>
- </tr>
-<tr class="odd">
- <td>Vérification de l'autorisation d'accès</td>
- <td><code class="directive"><a href="#luahookauthchecker">LuaHookAuthChecker</a></code>
- ou
- <code class="directive"><a href="#luaauthzprovider">LuaAuthzProvider</a></code></td>
- <td>Cette phase vérifie l'autorisation d'accès d'un utilisateur
- en fonction des ses paramètres de connexion, comme
- l'identifiant, le certificat, etc...
- </td>
- </tr>
-<tr>
- <td>Vérification du type de la ressource</td>
- <td><code class="directive"><a href="#luahooktypechecker">LuaHookTypeChecker</a></code></td>
- <td>Cette phase assigne un type de contenu et un gestionnaire à
- la ressource.</td>
- </tr>
-<tr class="odd">
- <td>Derniers réglages</td>
- <td><code class="directive"><a href="#luahookfixups">LuaHookFixups</a></code></td>
- <td>C'est la dernière phase avant l'activation des gestionnaires
- de contenu. Toute modification de dernière minute à la requête
- doit être effectuée ici.</td>
- </tr>
-<tr>
- <td>Gestionnaire de contenu</td>
- <td>fichiers fx. <code>.lua</code> ou directive <code class="directive"><a href="#luamaphandler">LuaMapHandler</a></code></td>
- <td>C'est durant cette phase que le contenu est traité. Les
- fichiers sont lus, interprétés, certains sont exécutés, et le
- résultat obtenu est envoyé au client.</td>
- </tr>
-<tr class="odd">
- <td>Journalisation</td>
- <td><code class="directive"><a href="#luahooklog">LuaHookLog</a></code></td>
- <td>Lorsqu'une requête a été traitée, plusieurs phases de
- journalisation interviennent, et enregistrent leurs résultats
- dans les fichiers d'erreur ou d'accès. Mod_lua peut
- s'intercaler au départ de ce processus et ainsi contrôler la
- journalisation.</td>
- </tr>
-</table>
-<p>Les fonctions d'accroche reçoivent l'objet de la requête comme seul
-argument (sauf LuaAuthzProvider qui reçoit aussi des arguments en
-provenance de la directive Require). Elles peuvent renvoyer une valeur,
-selon la fonction, mais il s'agit en général d'un
-code d'état HTTP ou des valeurs OK, DONE, ou DECLINED,
-que vous pouvez écrire dans Lua sous la forme <code>apache2.OK</code>,
-<code>apache2.DONE</code>, ou <code>apache2.DECLINED</code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahooktranslatename" id="luahooktranslatename">Directive</a> <a name="LuaHookTranslateName" id="LuaHookTranslateName">LuaHookTranslateName</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée à la phase du nom de
+traduction du traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookTranslateName /chemin/vers/lua/script.lua nom_fonction_hook [early|late]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le troisième argument optionnel est disponible depuis la
+version 2.3.15 du serveur HTTP Apache.</td></tr>
+</table><p>
+ Cette directive permet d'ajouter un point d'entrée (à
+ APR_HOOK_MIDDLE) à la phase du nom de traduction du traitement de la
+ requête. La fonction hook accepte un seul argument, le request_rec,
+ et doit renvoyer un code d'état qui est soit un code d'erreur HTTP,
+ ou une constante définie dans le module apache2 : apache2.OK,
+ apache2.DECLINED, ou apache2.DONE.</p>
+ <p>Pour ceux qui ne sont pas familiers avec les points d'entrée
+ (hook), en gros, chaque hook sera invoqué jusqu'à ce que l'un
+ d'entre eux renvoie apache2.OK. Si un hook n'effectuer pas la
+ traduction, il doit juste renvoyer apache2.DECLINED. Si le
+ traitement de la requête doit être interrompu, la valeur renvoyée
+ doit être apache2.DONE.</p>
-<pre class="prettyprint lang-lua">
-<strong>translate_name.lua</strong><br />
--- exemple d'accroche qui réécrit un URI en chemin du système de fichiers.
+ <p>Exemple :</p>
-require 'apache2'
+<pre class="prettyprint lang-config"># httpd.conf
+LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</pre>
-function translate_name(r)
- if r.uri == "/translate-name" then
- r.filename = r.document_root .. "/find_me.txt"
+
+<pre class="prettyprint lang-lua">-- /scripts/conf/hooks.lua --
+require "apache2"
+function silly_mapper(r)
+ if r.uri == "/" then
+ r.filename = "/var/www/home.lua"
return apache2.OK
+ else
+ return apache2.DECLINED
end
- -- on ne gère pas cette URL et on donne sa chance à un autre module
- return apache2.DECLINED
end</pre>
+ <div class="note"><h3>Contexte</h3><p>Cette directive ne peut être
+ utilisée ni à l'intérieur d'une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, ni dans un fichier htaccess.</p></div>
-<pre class="prettyprint lang-lua">
-<strong>translate_name2.lua</strong><br />
---[[ exemple d'accroche qui réécrit un URI vers un autre URI. Il renvoie
- un apache2.DECLINED pour permettre à un autre interpréteur d'URL de
- travailler sur la substitution, y compris l'accroche translate_name
- de base dont les tables de correspondances se basent sur DocumentRoot.
+ <div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
+ "early" ou "late" permettent de contrôler le moment auquel ce script
+ s'exécute par rapport aux autres modules.</p></div>
- Note: utilisez le drapeau early/late de la directive pour
- l'exécuter avant ou après mod_alias.
---]]
-
-require 'apache2'
-
-function translate_name(r)
- if r.uri == "/translate-name" then
- r.uri = "/find_me.txt"
- return apache2.DECLINED
- end
- return apache2.DECLINED
-end</pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="datastructures" id="datastructures">Structures de données</a></h2>
-
-<dl>
-<dt>request_rec</dt>
- <dd>
- <p>request_rec est considérée en tant que donnée utilisateur.
- Elle possède une métatable qui vous permet d'accomplir des
- choses intéressantes. Pour la plus grande partie, elle possède
- les mêmes champs que la structure request_rec, la
- plupart d'entre eux étant accessibles en lecture et écriture (le
- contenu des champs de la table peut être modifié, mais les
- champs eux-mêmes ne peuvent pas être établis en tant que tables
- distinctes).</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luahooktypechecker" id="luahooktypechecker">Directive</a> <a name="LuaHookTypeChecker" id="LuaHookTypeChecker">LuaHookTypeChecker</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase type_checker du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookTypeChecker /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>...</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luainherit" id="luainherit">Directive</a> <a name="LuaInherit" id="LuaInherit">LuaInherit</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contrôle la manière dont les sections de configuration
+parentes sont fusionnées dans les enfants</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaInherit none|parent-first|parent-last</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LuaInherit parent-first</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Versions 2.4.0 et supérieures</td></tr>
+</table><p>Par défaut, si des directives LuaHook* se trouvent dans
+ des sections de configuration Directory ou Location qui se
+ chevauchent, les scripts
+ définis dans les sections les plus spécifiques s'exécutent
+ <em>après</em> ceux définis dans les sections plus génériques
+ (LuaInherit parent-first). Vous pouvez inverser cet ordre, ou faire
+ en sorte que le contexte parent ne s'applique pas du tout.</p>
- <table class="bordered"><tr class="header">
- <th><strong>Nom</strong></th>
- <th><strong>Type Lua</strong></th>
- <th><strong>Modifiable</strong></th>
- <th><strong>Description</strong></th>
- </tr>
-<tr>
- <td><code>allowoverrides</code></td>
- <td>string</td>
- <td>non</td>
- <td>L'option AllowOverride s'applique à la requête courante.</td>
- </tr>
-<tr class="odd">
- <td><code>ap_auth_type</code></td>
- <td>string</td>
- <td>non</td>
- <td>Ce champ contient le type d'authentification effectuée
- (par exemple <code>basic</code>)</td>
- </tr>
-<tr>
- <td><code>args</code></td>
- <td>string</td>
- <td>oui</td>
- <td>La chaîne de paramètres de la requête (par exemple
- <code>foo=bar&name=johnsmith</code>)</td>
- </tr>
-<tr class="odd">
- <td><code>assbackwards</code></td>
- <td>boolean</td>
- <td>non</td>
- <td>contient true s'il s'agit d'une requête de style HTTP/0.9
- (par exemple <code>GET /foo</code> (sans champs d'en-tête) )</td>
- </tr>
-<tr>
- <td><code>auth_name</code></td>
- <td>string</td>
- <td>non</td>
- <td>La chaîne d'identification utilisée pour la vérification
- de l'autorisation d'accès (si elle est disponible).</td>
- </tr>
-<tr class="odd">
- <td><code>banner</code></td>
- <td>string</td>
- <td>non</td>
- <td>La bannière du serveur, par exemple <code>Apache HTTP
- Server/2.4.3 openssl/0.9.8c</code></td>
- </tr>
-<tr>
- <td><code>basic_auth_pw</code></td>
- <td>string</td>
- <td>non</td>
- <td>Le mot de passe pour l'authentification de base envoyé
- avec la requête, s'il existe</td>
- </tr>
-<tr class="odd">
- <td><code>canonical_filename</code></td>
- <td>string</td>
- <td>non</td>
- <td>Le nom de fichier canonique de la requête</td>
- </tr>
-<tr>
- <td><code>content_encoding</code></td>
- <td>string</td>
- <td>non</td>
- <td>Le type de codage du contenu de la requête courante</td>
- </tr>
-<tr class="odd">
- <td><code>content_type</code></td>
- <td>string</td>
- <td>oui</td>
- <td>Le type de contenu de la requête courante, tel qu'il a été
- déterminé au cours de la phase type_check (par exemple
- <code>image/gif</code> ou <code>text/html</code>)</td>
- </tr>
-<tr>
- <td><code>context_prefix</code></td>
- <td>string</td>
- <td>non</td>
- <td />
- </tr>
-<tr class="odd">
- <td><code>context_document_root</code></td>
- <td>string</td>
- <td>non</td>
- <td />
- </tr>
-<tr>
- <td><code>document_root</code></td>
- <td>string</td>
- <td>non</td>
- <td>La racine des documents du serveur</td>
- </tr>
-<tr class="odd">
- <td><code>err_headers_out</code></td>
- <td>table</td>
- <td>non</td>
- <td>L'en-tête MIME de l'environnement pour la réponse, écrit
- même en cas d'erreur et conservé pendant les redirections
- internes</td>
- </tr>
-<tr>
- <td><code>filename</code></td>
- <td>string</td>
- <td>oui</td>
- <td>Le nom de fichier correspondant à la requête, par exemple
- /www/example.com/foo.txt. Il peut être modifié au cours des
- phases translate-name ou map-to-storage du traitement de la
- requête pour permettre au gestionnaire par défaut (ou aux
- gestionnaires de script) de servir une version du fichier
- autre que celle demandée.</td>
- </tr>
-<tr class="odd">
- <td><code>handler</code></td>
- <td>string</td>
- <td>oui</td>
- <td>Le nom du <a href="../handler.html">gestionnaire</a> qui
- doit traiter la requête, par exemple <code>lua-script</code>
- si elle doit être traitée par mod_lua. Cette valeur est en
- général définie via les directives <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ou <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>, mais peut aussi l'être
- via mod_lua pour permettre à un autre gestionnaire de traiter
- une requête spécifique qui ne serait pas traitée par défaut
- par ce dernier.
- </td>
- </tr>
-<tr>
- <td><code>headers_in</code></td>
- <td>table</td>
- <td>oui</td>
- <td>Les en-têtes MIME de l'environnement de la requête. Il
- s'agit des en-têtes comme <code>Host, User-Agent,
- Referer</code>, etc...</td>
- </tr>
-<tr class="odd">
- <td><code>headers_out</code></td>
- <td>table</td>
- <td>oui</td>
- <td>Les en-têtes MIME de l'environnement de la réponse.</td>
- </tr>
-<tr>
- <td><code>hostname</code></td>
- <td>string</td>
- <td>non</td>
- <td>Le nom d'hôte, tel que défini par l'en-tête
- <code>Host:</code> ou par un URI complet.</td>
- </tr>
-<tr class="odd">
- <td><code>is_https</code></td>
- <td>boolean</td>
- <td>non</td>
- <td>Indique si la requête à été faite via HTTPS</td>
- </tr>
-<tr>
- <td><code>is_initial_req</code></td>
- <td>boolean</td>
- <td>non</td>
- <td>Indique si la requête courante est la requête initiale ou
- une sous-requête.</td>
- </tr>
-<tr class="odd">
- <td><code>limit_req_body</code></td>
- <td>number</td>
- <td>non</td>
- <td>La taille maximale du corps de la requête, ou 0 si aucune
- limite.</td>
- </tr>
-<tr>
- <td><code>log_id</code></td>
- <td>string</td>
- <td>non</td>
- <td>L'identifiant de la requête dans les journaux d'accès ou
- d'erreur.</td>
- </tr>
-<tr class="odd">
- <td><code>method</code></td>
- <td>string</td>
- <td>non</td>
- <td>La méthode de la requête, par exemple <code>GET</code> ou
- <code>POST</code>.</td>
- </tr>
-<tr>
- <td><code>notes</code></td>
- <td>table</td>
- <td>oui</td>
- <td>Une liste de notes qui peuvent être transmises d'un module
- à l'autre.</td>
- </tr>
-<tr class="odd">
- <td><code>options</code></td>
- <td>string</td>
- <td>non</td>
- <td>La valeur de la directive Options pour la requête
- courante.</td>
- </tr>
-<tr>
- <td><code>path_info</code></td>
- <td>string</td>
- <td>non</td>
- <td>La valeur de PATH_INFO extraite de la requête.</td>
- </tr>
-<tr class="odd">
- <td><code>port</code></td>
- <td>number</td>
- <td>non</td>
- <td>Le port du serveur utilisé par la requête.</td>
- </tr>
-<tr>
- <td><code>protocol</code></td>
- <td>string</td>
- <td>non</td>
- <td>Le protocole utilisé, par exemple <code>HTTP/1.1</code></td>
- </tr>
-<tr class="odd">
- <td><code>proxyreq</code></td>
- <td>string</td>
- <td>oui</td>
- <td>Indique s'il s'agit d'une requête mandatée ou non. Cette
- valeur est en général définie au cours de la phase
- post_read_request/translate_name du traitement de la requête.</td>
- </tr>
-<tr>
- <td><code>range</code></td>
- <td>string</td>
- <td>non</td>
- <td>Le contenu de l'en-tête <code>Range:</code>.</td>
- </tr>
-<tr class="odd">
- <td><code>remaining</code></td>
- <td>number</td>
- <td>non</td>
- <td>Le nombre d'octets du corps de la requête restant à lire.</td>
- </tr>
-<tr>
- <td><code>server_built</code></td>
- <td>string</td>
- <td>non</td>
- <td>La date de compilation du serveur.</td>
- </tr>
-<tr class="odd">
- <td><code>server_name</code></td>
- <td>string</td>
- <td>non</td>
- <td>Le nom du serveur pour cette requête.</td>
- </tr>
-<tr>
- <td><code>some_auth_required</code></td>
- <td>boolean</td>
- <td>non</td>
- <td>Indique si une autorisation est/était requise pour cette
- requête.</td>
- </tr>
-<tr class="odd">
- <td><code>subprocess_env</code></td>
- <td>table</td>
- <td>oui</td>
- <td>Le jeu de variables d'environnement pour cette requête.</td>
- </tr>
-<tr>
- <td><code>started</code></td>
- <td>number</td>
- <td>non</td>
- <td>Le moment où le serveur a été (re)démarré, en secondes
- depuis epoch (1er janvier 1970)</td>
- </tr>
-<tr class="odd">
- <td><code>status</code></td>
- <td>number</td>
- <td>oui</td>
- <td>Le code de retour (courant) pour cette requête, par
- exemple <code>200</code> ou <code>404</code>.</td>
- </tr>
-<tr>
- <td><code>the_request</code></td>
- <td>string</td>
- <td>non</td>
- <td>La chaîne de la requête telle qu'elle a été envoyée par le
- client, par exemple <code>GET /foo/bar HTTP/1.1</code>.</td>
- </tr>
-<tr class="odd">
- <td><code>unparsed_uri</code></td>
- <td>string</td>
- <td>non</td>
- <td>La partie URI non interprétée de la requête</td>
- </tr>
-<tr>
- <td><code>uri</code></td>
- <td>string</td>
- <td>oui</td>
- <td>L'URI après interprétation par httpd</td>
- </tr>
-<tr class="odd">
- <td><code>user</code></td>
- <td>string</td>
- <td>oui</td>
- <td>Si une authentification a été effectuée, nom de
- l'utilisateur authentifié.</td>
- </tr>
-<tr>
- <td><code>useragent_ip</code></td>
- <td>string</td>
- <td>non</td>
- <td>L'adresse IP de l'agent qui a envoyé la requête</td>
- </tr>
+ <p>Jusqu'aux versions 2.3.x, le comportement par défaut consistait à
+ ignorer les directives LuaHook* situées dans les sections de
+ configuration parentes.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luainputfilter" id="luainputfilter">Directive</a> <a name="LuaInputFilter" id="LuaInputFilter">LuaInputFilter</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit une fonction Lua pour le filtrage en entrée</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaInputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.4.5 du serveur HTTP
+Apache</td></tr>
</table>
- </dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="functions" id="functions">Méthodes de l'objet request_rec</a></h2>
-
-<p>L'objet request_rec possède (au minimum) les méthodes suivantes :</p>
-
-<pre class="prettyprint lang-lua">r:flush() -- vide le tampon de sortie
- -- Renvoie true si le vidage a été effectué avec succès,
- -- false dans le cas contraire.
-
-while nous_avons_des_données_à_envoyer do
- r:puts("Bla bla bla\n") -- envoi des données à envoyer vers le tampon
- r:flush() -- vidage du tampon (envoi au client)
- r.usleep(500000) -- mise en attente pendant 0.5 secondes et bouclage
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:addoutputfilter(name|function) -- ajoute un filtre en sortie
-
-r:addoutputfilter("fooFilter") -- insère le filtre fooFilter dans le flux de sortie</pre>
-
-
-<pre class="prettyprint lang-lua">r:sendfile(filename) -- envoie un fichier entier au client en utilisant sendfile s'il est
- -- supporté par la plateforme :
-
-if use_sendfile_thing then
- r:sendfile("/var/www/large_file.img")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:parseargs() -- renvoie deux tables : une table standard de couples
- -- clé/valeur pour les données GET simples,
- -- et une autre pour les données
- -- multivaluées (par exemple foo=1&foo=2&foo=3) :
-
-local GET, GETMULTI = r:parseargs()
-r:puts("Votre nom est : " .. GET['name'] or "Unknown")</pre>
-
-
-
-<pre class="prettyprint lang-lua">r:parsebody()([sizeLimit]) -- interprète le corps de la
- -- requête en tant que POST et renvoie
- -- deux tables lua, comme r:parseargs(). Un
- -- nombre optionnel peut être fourni
- -- pour spécifier le nombre maximal
- -- d'octets à interpréter. La
- -- valeur par défaut est 8192.
-
-local POST, POSTMULTI = r:parsebody(1024*1024)
-r:puts("Votre nom est : " .. POST['name'] or "Unknown")</pre>
-
-
-
-<pre class="prettyprint lang-lua">r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la réponse</pre>
-
-
-<pre class="prettyprint lang-lua">r:write("une simple chaîne") -- affichage dans le corps de la réponse</pre>
-
-
-<pre class="prettyprint lang-lua">r:escape_html("<html>test</html>") -- Echappe le code HTML et renvoie le résultat</pre>
-
-
-<pre class="prettyprint lang-lua">r:base64_encode(string) -- Encode une chaîne à l'aide du standard de codage Base64.
+<p>Cette directive permet d'ajouter un filtre en entrée sous la forme
+d'une fonction Lua. A l'instar des filtres en sorties, les filtres en
+entrée fonctionnent comme des sous-routines, intervenant dans un premier
+temps avant l'envoi du contenu des tampons, puis chaque fois qu'un
+paquet de données doit être transmis à la chaîne, et éventuellement
+produisant toute donnée à ajouter aux données en entrée. La variable
+globale <code>bucket</code> contient les paquets de données tels qu'ils
+sont transmis au script Lua :
+</p>
-local encoded = r:base64_encode("This is a test") -- returns VGhpcyBpcyBhIHRlc3Q=</pre>
+<pre class="prettyprint lang-config">LuaInputFilter myInputFilter /www/filter.lua input_filter
+<Files *.lua>
+ SetInputFilter myInputFilter
+</Files></pre>
+<pre class="prettyprint lang-lua">--[[
+ Exemple de filtre en entrée qui convertit toutes les données POST en
+ majuscules.
+]]--
+function input_filter(r)
+ print("luaInputFilter called") -- pour débogage
+ coroutine.yield() -- attend des paquets de données
+ while bucket do -- Pour chaque paquet, faire ...
+ local output = string.upper(bucket) -- Convertit toutes les données POST en majuscules
+ coroutine.yield(output) -- Envoie les données traitées à la chaîne de filtrage
+ end
+ -- plus aucune donnée à traiter.
+ coroutine.yield("&filterSignature=1234") -- Ajoute une signature à la fin
+end</pre>
-<pre class="prettyprint lang-lua">r:base64_decode(string) -- Décode une chaîne codée en Base64.
+<p>
+Le filtre en entrée peut interdire ou sauter un filtre s'il est
+considéré comme indésirable :
+</p>
+<pre class="prettyprint lang-lua">function input_filter(r)
+ if not good then
+ return -- Empêche tout simplement le filtrage et transmet le contenu original
+ end
+ coroutine.yield() -- attend des paquets de données
+ ... -- insert les filtres ici
+end</pre>
-local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test'</pre>
+<p>
+Voir "<a href="#modifying_buckets">Modification de contenu avec les
+filtres Lua</a>" pour plus de détails.
+</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luamaphandler" id="luamaphandler">Directive</a> <a name="LuaMapHandler" id="LuaMapHandler">LuaMapHandler</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Met en correspondance un chemin avec un gestionnaire lua</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaMapHandler modele-uri /chemin/vers/lua/script.lua
+[nom-fonction]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Cette directive permet de faire correspondre un modèle d'uri avec
+ une fonction de gestionnaire située dans un fichier spécifique. Elle
+ utilise les expressions rationnelles PCRE pour mettre en
+ correspondance l'uri, et supporte les groupes de correspondance
+ d'interpolation dans le chemin du fichier et le nom de la fonction.
+ Prenez garde aux problèmes de sécurité en écrivant vos expressions
+ rationnelles.</p>
+ <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2</pre>
+</div>
+ <p>Cette directive va faire correspondre des uri comme
+ /photos/show?id=9 au fichier /scripts/photos.lua, et invoquera la
+ fonction de gestionnaire handle_show au niveau de la vm lua
+ après chargement de ce fichier.</p>
-<pre class="prettyprint lang-lua">r:md5(string) -- Calcule et renvoie le condensé MD5 d'une chaîne en mode binaire (binary safe).
+<pre class="prettyprint lang-config">LuaMapHandler /bingo /scripts/wombat.lua</pre>
-local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339</pre>
+ <p>Cette directive invoquera la fonction "handle" qui est la
+ valeur par défaut si aucun nom de fonction spécifique n'est
+ spécifié.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luaoutputfilter" id="luaoutputfilter">Directive</a> <a name="LuaOutputFilter" id="LuaOutputFilter">LuaOutputFilter</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit une fonction Lua pour le filtrage de contenu en
+sortie</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaOutputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.5 du serveur HTTP
+Apache</td></tr>
+</table>
+<p>>Cette directive permet d'ajouter un filtre en sortie sous la forme
+d'une fonction Lua. A l'instar des filtres en sorties, les filtres en
+entrée fonctionnent comme des sous-routines, intervenant dans un premier
+temps avant l'envoi du contenu des tampons, puis chaque fois qu'un
+paquet de données doit être transmis à la chaîne, et éventuellement
+produisant toute donnée à ajouter aux données en sortie. La variable
+globale <code>bucket</code> contient les paquets de données tels qu'ils
+sont transmis au script Lua :
+</p>
-<pre class="prettyprint lang-lua">r:sha1(string) -- Calcule et renvoie le condensé SHA1 d'une chaîne en mode binaire (binary safe).
+<pre class="prettyprint lang-config">LuaOutputFilter myOutputFilter /www/filter.lua output_filter
+<Files *.lua>
+ SetOutputFilter myOutputFilter
+</Files></pre>
-local hash = r:sha1("This is a test") -- returns a54d88e06612d820bc3be72877c74f257b561b19</pre>
+<pre class="prettyprint lang-lua">--[[
+ Exemple de filtre en sortie qui échappe toutes les entités HTML en
+ sortie
+]]--
+function output_filter(r)
+ coroutine.yield("(Handled by myOutputFilter)<br/>\n") -- Ajoute des données au début de la sortie,
+ -- puis attend des paquets de données à traiter
+ while bucket do -- Pour chaque paquet, faire ...
+ local output = r:escape_html(bucket) -- Echappe les données en sortie
+ coroutine.yield(output) -- Envoie les données traitées à la chaîne
+ end
+ -- plus aucune donnée à traiter.
+end</pre>
+<p>
+Comme les filres en entrée, le filtre en sortie peut interdire ou sauter un filtre s'il est
+considéré comme indésirable :
+</p>
+<pre class="prettyprint lang-lua">function output_filter(r)
+ if not r.content_type:match("text/html") then
+ return -- Empêche tout simplement le filtrage et transmet le contenu original
+ end
+ coroutine.yield() -- attend des paquets de données
+ ... -- insert les filtres ici
+end</pre>
-<pre class="prettyprint lang-lua">r:escape(string) -- Echappe une chaîne de type URL.
+<div class="note"><h3>Les filtres Lua avec <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></h3>
+<p>Lorsqu'on utilise un filtre Lua comme fournisseur sous-jacent via la
+directive <code class="directive"><a href="../mod/mod_filter.html#filterprovider">FilterProvider</a></code>, le
+filtrage ne fonctionnera que si <var>filter-name</var> est identique à
+<var>provider-name</var>.
+</p> </div>
-local url = "http://foo.bar/1 2 3 & 4 + 5"
-local escaped = r:escape(url) -- renvoie 'http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5'</pre>
+<p>
+Voir "<a href="#modifying_buckets">Modification de contenu avec les
+filtres Lua</a>" pour plus de détails.
+</p>
-<pre class="prettyprint lang-lua">r:unescape(string) -- Déséchappe une chaîne de type URL.
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luapackagecpath" id="luapackagecpath">Directive</a> <a name="LuaPackageCPath" id="LuaPackageCPath">LuaPackageCPath</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un répertoire au package.cpath de lua</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaPackageCPath /chemin/vers/include/?.soa</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Cette directive permet d'ajouter un chemin à la liste des chemins
+ de recherche des bibliothèques partagées de lua. Ceci modifie le
+ package.cpath dans les vms lua.</p>
-local url = "http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5"
-local unescaped = r:unescape(url) -- renvoie 'http://foo.bar/1 2 3 & 4 + 5'</pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luapackagepath" id="luapackagepath">Directive</a> <a name="LuaPackagePath" id="LuaPackagePath">LuaPackagePath</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un répertoire au package.path de lua</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaPackagePath /chemin/vers/include/?.lua</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table><p>Cette directive permet d'ajouter un chemin à la liste des
+ chemins de recherche du module lua. Elle suit les mêmes conventions
+ que lua. Ceci modifie le package.path dans les vms lua.</p>
-<pre class="prettyprint lang-lua">r:construct_url(string) -- Construit une URL à partir d'un URI
+ <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaPackagePath /scripts/lib/?.lua
+LuaPackagePath /scripts/lib/?/init.lua</pre>
+</div>
-local url = r:construct_url(r.uri)</pre>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luaquickhandler" id="luaquickhandler">Directive</a> <a name="LuaQuickHandler" id="LuaQuickHandler">LuaQuickHandler</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la gestion rapide du
+traitement de la requête</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaQuickHandler /path/to/script.lua hook_function_name</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Cette phase s'exécute juste après l'attribution de la requête à
+ un serveur virtuel, et permet d'effectuer certains traitements avant
+ le déroulement des autres phases, ou de servir une requête sans
+ avoir à la traduire, l'associer à un espace de stockage, etc...
+ Comme cette phase s'exécute avant toute autre, les directives telles
+ que <code class="directive"><a href="../mod/core.html#location"><Location></a></code> ou
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ne
+ sont pas encore prises en compte, car Les URI n'ont pas encore été
+ entièrement interprétés.
+ </p>
+ <div class="note"><h3>Contexte</h3><p>Cette directive ne peut être
+ utilisée ni à l'intérieur d'une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, ni dans un fichier htaccess.</p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luaroot" id="luaroot">Directive</a> <a name="LuaRoot" id="LuaRoot">LuaRoot</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le chemin de base pour la résolution des chemins
+relatifs dans les directives de mod_lua</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaRoot /chemin/vers/un/répertoire</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Cette directive permet de spécifier le chemin de base qui sera
+ utilisé pour évaluer tous les chemins relatifs dans mod_lua. En
+ l'absence de cette directive, les chemins relatifs sont résolus par
+ rapport au répertoire de travail courant, ce qui ne sera pas
+ toujours approprié pour un serveur.</p>
-<pre class="prettyprint lang-lua">r.mpm_query(number) -- Interroge le serveur à propos de son module MPM via la requête ap_mpm_query.
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="luascope" id="luascope">Directive</a> <a name="LuaScope" id="LuaScope">LuaScope</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Une valeur parmi once, request, conn, thread -- la valeur par défaut est once</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaScope once|request|conn|thread|server [min] [max]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LuaScope once</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
+</table>
+ <p>Cette directive permet de spécifier la durée de vie de
+ l'interpréteur Lua qui sera utilisé dans ce "répertoire". La valeur
+ par défaut est "once".</p>
-local mpm = r.mpm_query(14)
-if mpm == 1 then
- r:puts("Ce serveur utilise le MPM Event")
-end</pre>
+ <dl>
+ <dt>once:</dt> <dd>utilise l'interpréteur une fois.</dd>
+ <dt>request:</dt> <dd>utilise l'interpréteur pour traiter tout ce
+ qui est basé sur le même fichier dans la requête, et qui se trouve
+ aussi dans la portée de la requête.</dd>
-<pre class="prettyprint lang-lua">r:expr(string) -- Evalue une chaîne de type <a href="../expr.html">expr</a>.
+ <dt>conn:</dt> <dd>idem request, mais attaché à connection_rec</dd>
-if r:expr("%{HTTP_HOST} =~ /^www/") then
- r:puts("Ce nom d'hôte commence par www")
-end</pre>
+ <dt>thread:</dt> <dd>Utilise l'interpréteur pendant toute la durée
+ de vie du thread qui traite la requête (disponible seulement avec
+ les MPMs threadés).</dd>
+ <dt>server:</dt> <dd>Le comportement est ici différent, car la
+ portée du serveur présente une durée de vie assez longue, et
+ plusieurs threads vont partager le même server_rec. Pour gérer tout
+ ceci, les états lua du serveur sont stockés dans une liste de ressources
+ apr. Les arguments <code>min</code> et <code>max</code> permettent
+ de spécifier les nombres minimaux et maximaux d'états lua à stocker
+ dans la liste.</dd>
+ </dl>
+ <p>En général, les portées <code>thread</code> et <code>server</code>
+ sont 2 à 3 fois plus rapides que les autres, car elles n'ont pas besoin
+ de régénérer de nouveaux états Lua à chaque requête (comme c'est le
+ cas avec le MPM event, où même les connexions persistantes utilisent un
+ nouveau thread pour chaque requête). Si vous pensez que vos scripts
+ n'auront pas de problème s'il réutilisent un état, alors les portées
+ <code>thread</code> ou <code>server</code> doivent être utilisées car
+ elles présenteront de meilleures performances. Alors que la portée
+ <code>thread</code> fournira les réponses les plus rapides, la portée
+ <code>server</code> utilisera moins de mémoire car les états sont
+ rassemblés dans des jeux, permettant par exemple à 1000 threads de
+ partager 100 états Lua, ne nécessitant ainsi que 10% de la mémoire
+ requise par la portée <code>thread</code>.
+ </p>
-<pre class="prettyprint lang-lua">r:scoreboard_process(a) -- Interroge le serveur à propos du
- -- processus à la position <code>a</code>.
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basicconf" id="basicconf">Configuration de base</a></h2>
-local process = r:scoreboard_process(1)
-r:puts("Le serveur 1 a comme PID " .. process.pid)</pre>
+<p>La directive de base pour le chargement du module est</p>
+<pre class="prettyprint lang-config">LoadModule lua_module modules/mod_lua.so</pre>
-<pre class="prettyprint lang-lua">r:scoreboard_worker(a, b) -- Interroge le serveur à propos du
- -- thread <code>b</code>, dans le processus <code>a</code>.
-local thread = r:scoreboard_worker(1, 1)
-r:puts("L'ID du thread 1 du serveur 1 est " .. thread.tid .. " et son
-état est " .. thread.status)</pre>
+<p>
+<code>mod_lua</code> fournit un gestionnaire nommé
+<code>lua-script</code> qui peut être utilisé avec une directive
+<code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> ou <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> :</p>
+<pre class="prettyprint lang-config"><Files *.lua>
+ SetHandler lua-script
+</Files></pre>
-<pre class="prettyprint lang-lua">r:clock() -- Renvoie l'heure courante avec une précision d'une microseconde.</pre>
+<p>
+Ceci aura pour effet de faire traiter les requêtes pour les fichiers
+dont l'extension est <code>.lua</code> par <code>mod_lua</code> en
+invoquant cette fonction de <code>gestion</code> de fichier.
+</p>
-<pre class="prettyprint lang-lua">r:requestbody(filename) -- Lit et renvoie le corps d'une requête.
- -- Si 'filename' est spécifié, le
- -- corps de requête n'est pas
- -- renvoyé, mais sauvegardé dans
- -- le fichier correspondant.
+<p>Pour plus de détails, voir la directive
+<code class="directive">LuaMapHandler</code>.
+ </p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writinghandlers" id="writinghandlers">Ecrire des gestionnaires</a></h2>
+<p>Dans l'API du serveur HTTP Apache, un gestionnaire est une sorte de
+point d'accroche (hook) spécifique responsable de la génération de la
+réponse. <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> et
+<code class="module"><a href="../mod/mod_status.html">mod_status</a></code> sont des exemples de modules comportant un
+gestionnaire.</p>
-local input = r:requestbody()
-r:puts("Vous m'avez envoyé le corps de requête suivant :\n")
-r:puts(input)</pre>
+<p><code>mod_lua</code> cherche toujours à invoquer une fonction Lua pour le
+gestionnaire, plutôt que de simplement évaluer le corps d'un script dans
+le style de CGI. Une fonction de gestionnaire se présente comme suit :</p>
-<pre class="prettyprint lang-lua">r:add_input_filter(filter_name) -- Ajoute le filtre en entrée 'filter_name'.</pre>
+<pre class="prettyprint lang-lua">
+<strong>example.lua</strong><br />
+-- exemple de gestionnaire
+require "string"
-<pre class="prettyprint lang-lua">r:module_info(module_name) -- Interroge le serveur à propos d'un module.
+--[[
+ Il s'agit du nom de méthode par défaut pour les gestionnaires Lua ;
+ voir les noms de fonctions optionnels dans la directive
+ LuaMapHandler pour choisir un point d'entrée différent.
+--]]
+function handle(r)
+ r.content_type = "text/plain"
-local mod = r.module_info("mod_lua.c")
-if mod then
- for k, v in pairs(mod.commands) do
- r:puts( ("%s: %s\n"):format(k,v)) -- affiche toutes les directives
- -- implémentées par ce module.
+ if r.method == 'GET' then
+ r:puts("Hello Lua World!\n")
+ for k, v in pairs( r:parseargs() ) do
+ r:puts( string.format("%s: %s\n", k, v) )
+ end
+ elseif r.method == 'POST' then
+ r:puts("Hello Lua World!\n")
+ for k, v in pairs( r:parsebody() ) do
+ r:puts( string.format("%s: %s\n", k, v) )
+ end
+ else
+ elseif r.method == 'PUT' then
+-- message d'erreur personnalisé
+ r:puts("Unsupported HTTP method " .. r.method)
+ r.status = 405
+ return apache2.ok
+ else
+-- message d'erreur ErrorDocument
+ return 501
end
+ return apache2.OK
end</pre>
-<pre class="prettyprint lang-lua">r:loaded_modules() -- Renvoie une liste des modules chargés par httpd.
-
-for k, module in pairs(r:loaded_modules()) do
- r:puts("J'ai chargé le module " .. module .. "\n")
-end</pre>
-
-
-<pre class="prettyprint lang-lua">r:runtime_dir_relative(filename) -- Génère le nom d'un fichier run-time
- -- (par exemple la mémoire partagée
- -- "file") relativement au répertoire de run-time.</pre>
-
+<p>
+Ce gestionnaire se contente d'afficher les arguments codés d'un uri ou
+d'un formulaire dans un page au format texte.
+</p>
-<pre class="prettyprint lang-lua">r:server_info() -- Renvoie une table contenant des informations à
- -- propos du serveur, comme le nom de
- -- l'exécutable httpd, le module mpm utilisé, etc...</pre>
+<p>
+Cela signifie que vous pouvez (et êtes encouragé à) avoir plusieurs
+gestionnaires (ou points d'entrée, ou filtres) dans le même script.
+</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writingauthzproviders" id="writingauthzproviders">Ecriture de fournisseurs d'autorisation</a></h2>
-<pre class="prettyprint lang-lua">r:set_document_root(file_path) -- Définit la racine des documents
- -- pour la requête à file_path.</pre>
+<p><code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> fournit une interface d'autorisation
+de haut niveau bien plus facile à utiliser que dans les hooks
+correspondants. Le premier argument de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> permet de spécifier le
+fournisseur d'autorisation à utiliser. Pour chaque directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>,
+<code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> appellera le fournisseur d'autorisation
+spécifié, le reste de la ligne constituant les paramètres. Le
+fournisseur considéré va alors vérifier les autorisations et fournir le
+résultat dans une valeur de retour.</p>
-<pre class="prettyprint lang-lua">r:add_version_component(component_string) -- Ajoute un élément à
- -- la bannière du serveur.</pre>
+<p>En général, le fournisseur authz est appelé avant l'authentification.
+S'il doit connaître le nom d'utilisateur authentifié (ou si
+l'utilisateur est appelé à être authentifié), le fournisseur doit
+renvoyer <code>apache2.AUTHZ_DENIED_NO_USER</code>, ce qui va
+déclancher le processus d'authentification et un deuxième appel du
+fournisseur authz.</p>
+<p>La fonction du fournisseur authz ci-dessous accepte deux arguments,
+une adresse IP et un nom d'utilisateur. Elle autorise l'accès dans le
+cas où la requête provient de l'adresse IP spécifiée, ou si
+l'utilisateur authentifié correspond au second argument :</p>
-<pre class="prettyprint lang-lua">r:set_context_info(prefix, docroot) -- Définit le préfixe et la
- -- racine des documents du contexte pour une requête.</pre>
+<pre class="prettyprint lang-lua">
+<strong>authz_provider.lua</strong><br />
+require 'apache2'
-<pre class="prettyprint lang-lua">r:os_escape_path(file_path) -- Convertit un chemin du système de
- -- fichiers en URL indépendamment du système d'exploitation.</pre>
+function authz_check_foo(r, ip, user)
+ if r.useragent_ip == ip then
+ return apache2.AUTHZ_GRANTED
+ elseif r.user == nil then
+ return apache2.AUTHZ_DENIED_NO_USER
+ elseif r.user == user then
+ return apache2.AUTHZ_GRANTED
+ else
+ return apache2.AUTHZ_DENIED
+ end
+end</pre>
-<pre class="prettyprint lang-lua">r:escape_logitem(string) -- Echappe une chaîne pour journalisation.</pre>
+<p>La configuration suivante enregistre cette fonction en tant que
+fournisseur <code>foo</code>, et la configure por l'URL <code>/</code> :</p>
+<pre class="prettyprint lang-config">LuaAuthzProvider foo authz_provider.lua authz_check_foo
+<Location />
+ Require foo 10.1.2.3 john_doe
+</Location></pre>
-<pre class="prettyprint lang-lua">r.strcmp_match(string, pattern) -- Vérifie si 'string' correspond à
- -- 'pattern' via la fonction strcmp_match (GLOBs). Par exemple, est-ce que
- -- 'www.example.com' correspond à '*.example.com' ?
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writinghooks" id="writinghooks">Ecriture de fonctions d'accroche
+(hooks)</a></h2>
-local match = r.strcmp_match("foobar.com", "foo*.com")
-if match then
- r:puts("foobar.com matches foo*.com")
-end</pre>
+<p>Les fonctions d'accroche déterminent la manière dont les modules (et
+les scripts Lua) participent au traitement des requêtes. Chaque type
+d'accroche proposé par le serveur a un rôle spécifique, comme
+l'association de requêtes au système de fichiers, le contrôle d'accès,
+ou la définition de types MIME : </p>
+<table class="bordered"><tr class="header">
+ <th>Phase d'accroche</th>
+ <th>Directive mod_lua</th>
+ <th>Description</th>
+ </tr>
+<tr>
+ <td>Gestionnaire rapide</td>
+ <td><code class="directive"><a href="#luaquickhandler">LuaQuickHandler</a></code></td>
+ <td>Il s'agit de la première accroche appelée lorsqu'une requête
+ a été associée à un serveur ou un serveur virtuel.</td>
+ </tr>
+<tr class="odd">
+ <td>Phase de traduction</td>
+ <td><code class="directive"><a href="#luahooktranslatename">LuaHookTranslateName</a></code></td>
+ <td>Cette phase traduit l'URI de la requête en nom de fichier
+ sur le système. Ce sont des modules comme
+ <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> et <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> qui
+ interviennent au cours de cette phase.</td>
+ </tr>
+<tr>
+ <td>Choix du lieu de stockage de la ressource</td>
+ <td><code class="directive"><a href="#luahookmaptostorage">LuaHookMapToStorage</a></code></td>
+ <td>Cette phase définit le lieu de stockage de la ressource :
+ physique, en cache ou externe/mandaté. Elle est assurée par les
+ modules de mandat ou de mise en cache.</td>
+ </tr>
+<tr class="odd">
+ <td>Autorisation d'accès</td>
+ <td><code class="directive"><a href="#luahookaccesschecker">LuaHookAccessChecker</a></code></td>
+ <td>Cette phase vérifie si un client a l'autorisation d'accès à
+ la ressource. Elle s'exécute avant l'authentification de
+ l'utisateur ; il faut donc être prudent.
+ </td>
+ </tr>
+<tr>
+ <td>Vérification de l'identifiant utilisateur</td>
+ <td><code class="directive"><a href="#luahookcheckuserid">LuaHookCheckUserID</a></code></td>
+ <td>Cette phase vérifie l'identifiant de l'utilisateur ayant
+ fait l'objet d'une négociation.</td>
+ </tr>
+<tr class="odd">
+ <td>Vérification de l'autorisation d'accès</td>
+ <td><code class="directive"><a href="#luahookauthchecker">LuaHookAuthChecker</a></code>
+ ou
+ <code class="directive"><a href="#luaauthzprovider">LuaAuthzProvider</a></code></td>
+ <td>Cette phase vérifie l'autorisation d'accès d'un utilisateur
+ en fonction des ses paramètres de connexion, comme
+ l'identifiant, le certificat, etc...
+ </td>
+ </tr>
+<tr>
+ <td>Vérification du type de la ressource</td>
+ <td><code class="directive"><a href="#luahooktypechecker">LuaHookTypeChecker</a></code></td>
+ <td>Cette phase assigne un type de contenu et un gestionnaire à
+ la ressource.</td>
+ </tr>
+<tr class="odd">
+ <td>Derniers réglages</td>
+ <td><code class="directive"><a href="#luahookfixups">LuaHookFixups</a></code></td>
+ <td>C'est la dernière phase avant l'activation des gestionnaires
+ de contenu. Toute modification de dernière minute à la requête
+ doit être effectuée ici.</td>
+ </tr>
+<tr>
+ <td>Gestionnaire de contenu</td>
+ <td>fichiers fx. <code>.lua</code> ou directive <code class="directive"><a href="#luamaphandler">LuaMapHandler</a></code></td>
+ <td>C'est durant cette phase que le contenu est traité. Les
+ fichiers sont lus, interprétés, certains sont exécutés, et le
+ résultat obtenu est envoyé au client.</td>
+ </tr>
+<tr class="odd">
+ <td>Journalisation</td>
+ <td><code class="directive"><a href="#luahooklog">LuaHookLog</a></code></td>
+ <td>Lorsqu'une requête a été traitée, plusieurs phases de
+ journalisation interviennent, et enregistrent leurs résultats
+ dans les fichiers d'erreur ou d'accès. Mod_lua peut
+ s'intercaler au départ de ce processus et ainsi contrôler la
+ journalisation.</td>
+ </tr>
+</table>
-<pre class="prettyprint lang-lua">r:set_keepalive() -- Définit l'état de persistance d'une requête.
- -- Renvoie true dans la mesure du possible, false dans le cas contraire.</pre>
+<p>Les fonctions d'accroche reçoivent l'objet de la requête comme seul
+argument (sauf LuaAuthzProvider qui reçoit aussi des arguments en
+provenance de la directive Require). Elles peuvent renvoyer une valeur,
+selon la fonction, mais il s'agit en général d'un
+code d'état HTTP ou des valeurs OK, DONE, ou DECLINED,
+que vous pouvez écrire dans Lua sous la forme <code>apache2.OK</code>,
+<code>apache2.DONE</code>, ou <code>apache2.DECLINED</code>.</p>
-<pre class="prettyprint lang-lua">r:make_etag() -- Génère et renvoie le etag pour la requête courante.</pre>
+<pre class="prettyprint lang-lua">
+<strong>translate_name.lua</strong><br />
+-- exemple d'accroche qui réécrit un URI en chemin du système de fichiers.
+require 'apache2'
-<pre class="prettyprint lang-lua">r:send_interim_response(clear) -- Renvoie une réponse d'intérim (1xx) au
- -- client. Si 'clear' est vrai, les en-têtes disponibles
- -- seront envoyés et effacés.</pre>
+function translate_name(r)
+ if r.uri == "/translate-name" then
+ r.filename = r.document_root .. "/find_me.txt"
+ return apache2.OK
+ end
+ -- on ne gère pas cette URL et on donne sa chance à un autre module
+ return apache2.DECLINED
+end</pre>
-<pre class="prettyprint lang-lua">r:custom_response(status_code, string) -- Génère et définit une réponse
- -- personnalisée pour un code d'état particulier.
- -- Le fonctionnement est très proche de celui de la directive ErrorDocument.
-r:custom_response(404, "Baleted!")</pre>
+<pre class="prettyprint lang-lua">
+<strong>translate_name2.lua</strong><br />
+--[[ exemple d'accroche qui réécrit un URI vers un autre URI. Il renvoie
+ un apache2.DECLINED pour permettre à un autre interpréteur d'URL de
+ travailler sur la substitution, y compris l'accroche translate_name
+ de base dont les tables de correspondances se basent sur DocumentRoot.
+ Note: utilisez le drapeau early/late de la directive pour
+ l'exécuter avant ou après mod_alias.
+--]]
-<pre class="prettyprint lang-lua">r.exists_config_define(string) -- Vérifie si une définition de configuration existe.
+require 'apache2'
-if r.exists_config_define("FOO") then
- r:puts("httpd a probablement été lancé avec l'option -DFOO, ou FOO a
- été défini dans la configuration")
+function translate_name(r)
+ if r.uri == "/translate-name" then
+ r.uri = "/find_me.txt"
+ return apache2.DECLINED
+ end
+ return apache2.DECLINED
end</pre>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="datastructures" id="datastructures">Structures de données</a></h2>
-<pre class="prettyprint lang-lua">r:state_query(string) -- Interroge le serveur à propos de son état.</pre>
+<dl>
+<dt>request_rec</dt>
+ <dd>
+ <p>request_rec est considérée en tant que donnée utilisateur.
+ Elle possède une métatable qui vous permet d'accomplir des
+ choses intéressantes. Pour la plus grande partie, elle possède
+ les mêmes champs que la structure request_rec, la
+ plupart d'entre eux étant accessibles en lecture et écriture (le
+ contenu des champs de la table peut être modifié, mais les
+ champs eux-mêmes ne peuvent pas être établis en tant que tables
+ distinctes).</p>
+
+ <table class="bordered"><tr class="header">
+ <th><strong>Nom</strong></th>
+ <th><strong>Type Lua</strong></th>
+ <th><strong>Modifiable</strong></th>
+ <th><strong>Description</strong></th>
+ </tr>
+<tr>
+ <td><code>allowoverrides</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>L'option AllowOverride s'applique à la requête courante.</td>
+ </tr>
+<tr class="odd">
+ <td><code>ap_auth_type</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Ce champ contient le type d'authentification effectuée
+ (par exemple <code>basic</code>)</td>
+ </tr>
+<tr>
+ <td><code>args</code></td>
+ <td>string</td>
+ <td>oui</td>
+ <td>La chaîne de paramètres de la requête (par exemple
+ <code>foo=bar&name=johnsmith</code>)</td>
+ </tr>
+<tr class="odd">
+ <td><code>assbackwards</code></td>
+ <td>boolean</td>
+ <td>non</td>
+ <td>contient true s'il s'agit d'une requête de style HTTP/0.9
+ (par exemple <code>GET /foo</code> (sans champs d'en-tête) )</td>
+ </tr>
+<tr>
+ <td><code>auth_name</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La chaîne d'identification utilisée pour la vérification
+ de l'autorisation d'accès (si elle est disponible).</td>
+ </tr>
+<tr class="odd">
+ <td><code>banner</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La bannière du serveur, par exemple <code>Apache HTTP
+ Server/2.4.3 openssl/0.9.8c</code></td>
+ </tr>
+<tr>
+ <td><code>basic_auth_pw</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Le mot de passe pour l'authentification de base envoyé
+ avec la requête, s'il existe</td>
+ </tr>
+<tr class="odd">
+ <td><code>canonical_filename</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Le nom de fichier canonique de la requête</td>
+ </tr>
+<tr>
+ <td><code>content_encoding</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Le type de codage du contenu de la requête courante</td>
+ </tr>
+<tr class="odd">
+ <td><code>content_type</code></td>
+ <td>string</td>
+ <td>oui</td>
+ <td>Le type de contenu de la requête courante, tel qu'il a été
+ déterminé au cours de la phase type_check (par exemple
+ <code>image/gif</code> ou <code>text/html</code>)</td>
+ </tr>
+<tr>
+ <td><code>context_prefix</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td />
+ </tr>
+<tr class="odd">
+ <td><code>context_document_root</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td />
+ </tr>
+<tr>
+ <td><code>document_root</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La racine des documents du serveur</td>
+ </tr>
+<tr class="odd">
+ <td><code>err_headers_out</code></td>
+ <td>table</td>
+ <td>non</td>
+ <td>L'en-tête MIME de l'environnement pour la réponse, écrit
+ même en cas d'erreur et conservé pendant les redirections
+ internes</td>
+ </tr>
+<tr>
+ <td><code>filename</code></td>
+ <td>string</td>
+ <td>oui</td>
+ <td>Le nom de fichier correspondant à la requête, par exemple
+ /www/example.com/foo.txt. Il peut être modifié au cours des
+ phases translate-name ou map-to-storage du traitement de la
+ requête pour permettre au gestionnaire par défaut (ou aux
+ gestionnaires de script) de servir une version du fichier
+ autre que celle demandée.</td>
+ </tr>
+<tr class="odd">
+ <td><code>handler</code></td>
+ <td>string</td>
+ <td>oui</td>
+ <td>Le nom du <a href="../handler.html">gestionnaire</a> qui
+ doit traiter la requête, par exemple <code>lua-script</code>
+ si elle doit être traitée par mod_lua. Cette valeur est en
+ général définie via les directives <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ou <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>, mais peut aussi l'être
+ via mod_lua pour permettre à un autre gestionnaire de traiter
+ une requête spécifique qui ne serait pas traitée par défaut
+ par ce dernier.
+ </td>
+ </tr>
+<tr>
+ <td><code>headers_in</code></td>
+ <td>table</td>
+ <td>oui</td>
+ <td>Les en-têtes MIME de l'environnement de la requête. Il
+ s'agit des en-têtes comme <code>Host, User-Agent,
+ Referer</code>, etc...</td>
+ </tr>
+<tr class="odd">
+ <td><code>headers_out</code></td>
+ <td>table</td>
+ <td>oui</td>
+ <td>Les en-têtes MIME de l'environnement de la réponse.</td>
+ </tr>
+<tr>
+ <td><code>hostname</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Le nom d'hôte, tel que défini par l'en-tête
+ <code>Host:</code> ou par un URI complet.</td>
+ </tr>
+<tr class="odd">
+ <td><code>is_https</code></td>
+ <td>boolean</td>
+ <td>non</td>
+ <td>Indique si la requête à été faite via HTTPS</td>
+ </tr>
+<tr>
+ <td><code>is_initial_req</code></td>
+ <td>boolean</td>
+ <td>non</td>
+ <td>Indique si la requête courante est la requête initiale ou
+ une sous-requête.</td>
+ </tr>
+<tr class="odd">
+ <td><code>limit_req_body</code></td>
+ <td>number</td>
+ <td>non</td>
+ <td>La taille maximale du corps de la requête, ou 0 si aucune
+ limite.</td>
+ </tr>
+<tr>
+ <td><code>log_id</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>L'identifiant de la requête dans les journaux d'accès ou
+ d'erreur.</td>
+ </tr>
+<tr class="odd">
+ <td><code>method</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La méthode de la requête, par exemple <code>GET</code> ou
+ <code>POST</code>.</td>
+ </tr>
+<tr>
+ <td><code>notes</code></td>
+ <td>table</td>
+ <td>oui</td>
+ <td>Une liste de notes qui peuvent être transmises d'un module
+ à l'autre.</td>
+ </tr>
+<tr class="odd">
+ <td><code>options</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La valeur de la directive Options pour la requête
+ courante.</td>
+ </tr>
+<tr>
+ <td><code>path_info</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La valeur de PATH_INFO extraite de la requête.</td>
+ </tr>
+<tr class="odd">
+ <td><code>port</code></td>
+ <td>number</td>
+ <td>non</td>
+ <td>Le port du serveur utilisé par la requête.</td>
+ </tr>
+<tr>
+ <td><code>protocol</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Le protocole utilisé, par exemple <code>HTTP/1.1</code></td>
+ </tr>
+<tr class="odd">
+ <td><code>proxyreq</code></td>
+ <td>string</td>
+ <td>oui</td>
+ <td>Indique s'il s'agit d'une requête mandatée ou non. Cette
+ valeur est en général définie au cours de la phase
+ post_read_request/translate_name du traitement de la requête.</td>
+ </tr>
+<tr>
+ <td><code>range</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Le contenu de l'en-tête <code>Range:</code>.</td>
+ </tr>
+<tr class="odd">
+ <td><code>remaining</code></td>
+ <td>number</td>
+ <td>non</td>
+ <td>Le nombre d'octets du corps de la requête restant à lire.</td>
+ </tr>
+<tr>
+ <td><code>server_built</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La date de compilation du serveur.</td>
+ </tr>
+<tr class="odd">
+ <td><code>server_name</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>Le nom du serveur pour cette requête.</td>
+ </tr>
+<tr>
+ <td><code>some_auth_required</code></td>
+ <td>boolean</td>
+ <td>non</td>
+ <td>Indique si une autorisation est/était requise pour cette
+ requête.</td>
+ </tr>
+<tr class="odd">
+ <td><code>subprocess_env</code></td>
+ <td>table</td>
+ <td>oui</td>
+ <td>Le jeu de variables d'environnement pour cette requête.</td>
+ </tr>
+<tr>
+ <td><code>started</code></td>
+ <td>number</td>
+ <td>non</td>
+ <td>Le moment où le serveur a été (re)démarré, en secondes
+ depuis epoch (1er janvier 1970)</td>
+ </tr>
+<tr class="odd">
+ <td><code>status</code></td>
+ <td>number</td>
+ <td>oui</td>
+ <td>Le code de retour (courant) pour cette requête, par
+ exemple <code>200</code> ou <code>404</code>.</td>
+ </tr>
+<tr>
+ <td><code>the_request</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La chaîne de la requête telle qu'elle a été envoyée par le
+ client, par exemple <code>GET /foo/bar HTTP/1.1</code>.</td>
+ </tr>
+<tr class="odd">
+ <td><code>unparsed_uri</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>La partie URI non interprétée de la requête</td>
+ </tr>
+<tr>
+ <td><code>uri</code></td>
+ <td>string</td>
+ <td>oui</td>
+ <td>L'URI après interprétation par httpd</td>
+ </tr>
+<tr class="odd">
+ <td><code>user</code></td>
+ <td>string</td>
+ <td>oui</td>
+ <td>Si une authentification a été effectuée, nom de
+ l'utilisateur authentifié.</td>
+ </tr>
+<tr>
+ <td><code>useragent_ip</code></td>
+ <td>string</td>
+ <td>non</td>
+ <td>L'adresse IP de l'agent qui a envoyé la requête</td>
+ </tr>
+</table>
+ </dd>
+ </dl>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="functions" id="functions">Méthodes de l'objet request_rec</a></h2>
+<p>L'objet request_rec possède (au minimum) les méthodes suivantes :</p>
-<pre class="prettyprint lang-lua">r:stat(filename [,wanted]) -- Exécute stat() sur un fichier, et renvoie une table contenant
- -- des informations à propos de ce fichier.
+<pre class="prettyprint lang-lua">r:flush() -- vide le tampon de sortie
+ -- Renvoie true si le vidage a été effectué avec succès,
+ -- false dans le cas contraire.
-local info = r:stat("/var/www/foo.txt")
-if info then
- r:puts("Ce fichier existe et a été modifié pour la dernière fois à : " .. info.modified)
+while nous_avons_des_données_à_envoyer do
+ r:puts("Bla bla bla\n") -- envoi des données à envoyer vers le tampon
+ r:flush() -- vidage du tampon (envoi au client)
+ r.usleep(500000) -- mise en attente pendant 0.5 secondes et bouclage
end</pre>
-<pre class="prettyprint lang-lua">r:regex(string, pattern [,flags]) -- Exécute une recherche à base d'expression rationnelle
- -- sur une chaîne, et renvoie les éventuelles correspondances trouvées.
-
-local matches = r:regex("foo bar baz", [[foo (\w+) (\S*)]])
-if matches then
- r:puts("L'expression rationnelle correspond et le dernier mot
- capturé ($2) est : " .. matches[2])
-end
-
--- Exemple avec insensibilité à la casse :
-local matches = r:regex("FOO bar BAz", [[(foo) bar]], 1)
-
--- les drapeaux peuvent être une combibaison bit à bit de :
--- 0x01: insensibilité à la casse
--- 0x02: recherche multiligne</pre>
-
-
-<pre class="prettyprint lang-lua">r.usleep(microsecondes) -- Interrompt l'exécution du script pendant le nombre de microsecondes spécifié.</pre>
+<pre class="prettyprint lang-lua">r:addoutputfilter(name|function) -- ajoute un filtre en sortie
+r:addoutputfilter("fooFilter") -- insère le filtre fooFilter dans le flux de sortie</pre>
-<pre class="prettyprint lang-lua">r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion à une base de données et renvoie une classe database.
- -- Voir '<a href="#databases">Connectivité aux bases de données</a>'
- -- pour plus de détails.</pre>
+<pre class="prettyprint lang-lua">r:sendfile(filename) -- envoie un fichier entier au client en utilisant sendfile s'il est
+ -- supporté par la plateforme :
-<pre class="prettyprint lang-lua">r:ivm_set("key", value) -- Défini une variable Inter-VM avec une valeur spécifique.
- -- Ces valeurs sont conservées même si la VM est
- -- arrêtée ou non utilisée, et ne doivent donc être
- -- utilisées que si MaxConnectionsPerChild > 0.
- -- Les valeurs peuvent être de type number, string
- -- ou boolean et sont stockées séparément pour
- -- chaque processus (elles ne seront donc pas d'une
- -- grande utilité si l'on utilise le mpm prefork).
-
-r:ivm_get("key") -- Lit le contenu d'une variable définie via ivm_set. Renvoie
- -- le contenu de la variable si elle existe, ou nil
- -- dans le cas contraire.
-
--- Voici un exemple de lecture/écriture qui sauvegarde une variable
--- globale en dehors de la VM :
-function handle(r)
- -- La première VM qui effectue l'appel suivant n'obtiendra aucune
- -- valeur, et devra la créer
- local foo = r:ivm_get("cached_data")
- if not foo then
- foo = do_some_calcs() -- simulation de valeurs de retour
- r:ivm_set("cached_data", foo) -- définition globale de la variable
- end
- r:puts("La donnée en cache est : ", foo)
+if use_sendfile_thing then
+ r:sendfile("/var/www/large_file.img")
end</pre>
-<pre class="prettyprint lang-lua">r:htpassword(string [,algorithm [,cost]]) -- Génère un hash de mot de passe à partir d'une chaîne.
- -- algorithm: 0 = APMD5 (défaut), 1 = SHA, 2 = BCRYPT, 3 = CRYPT.
- -- cost: ne s'utilise qu'avec l'algorythme BCRYPT (défaut = 5).</pre>
-
-
-<pre class="prettyprint lang-lua">r:mkdir(dir [,mode]) -- Crée un répertoire et définit son mode via le paramètre optionnel mode.</pre>
-
-
-<pre class="prettyprint lang-lua">r:mkrdir(dir [,mode]) -- Crée des répertoires de manière récursive et définit
- -- leur mode via le paramètre optionnel mode.</pre>
-
-
-<pre class="prettyprint lang-lua">r:rmdir(dir) -- Supprime un répertoire.</pre>
-
-<pre class="prettyprint lang-lua">r:touch(file [,mtime]) -- Définit la date de modification d'un fichier à la date courante ou à
- -- la valeur optionnelle mtime en msec.</pre>
+<pre class="prettyprint lang-lua">r:parseargs() -- renvoie deux tables : une table standard de couples
+ -- clé/valeur pour les données GET simples,
+ -- et une autre pour les données
+ -- multivaluées (par exemple foo=1&foo=2&foo=3) :
+local GET, GETMULTI = r:parseargs()
+r:puts("Votre nom est : " .. GET['name'] or "Unknown")</pre>
-<pre class="prettyprint lang-lua">r:get_direntries(dir) -- Renvoie une table contenant toutes les entrées de répertoires.
--- Renvoie un chemin sous forme éclatée en chemin, fichier, extension
-function handle(r)
- local dir = r.context_document_root
- for _, f in ipairs(r:get_direntries(dir)) do
- local info = r:stat(dir .. "/" .. f)
- if info then
- local mtime = os.date(fmt, info.mtime / 1000000)
- local ftype = (info.filetype == 2) and "[dir] " or "[file]"
- r:puts( ("%s %s %10i %s\n"):format(ftype, mtime, info.size, f) )
- end
- end
-end</pre>
+<pre class="prettyprint lang-lua">r:parsebody()([sizeLimit]) -- interprète le corps de la
+ -- requête en tant que POST et renvoie
+ -- deux tables lua, comme r:parseargs(). Un
+ -- nombre optionnel peut être fourni
+ -- pour spécifier le nombre maximal
+ -- d'octets à interpréter. La
+ -- valeur par défaut est 8192.
-<pre class="prettyprint lang-lua">r.date_parse_rfc(string) -- Interprète une chaîne date/heure et renvoie l'équivalent en secondes depuis epoche.</pre>
+local POST, POSTMULTI = r:parsebody(1024*1024)
+r:puts("Votre nom est : " .. POST['name'] or "Unknown")</pre>
-<pre class="prettyprint lang-lua">r:getcookie(key) -- Obtient un cookie HTTP</pre>
+<pre class="prettyprint lang-lua">r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la réponse</pre>
-<pre class="prettyprint lang-lua">r:setcookie(key, value, secure, expires) -- Définit un cookie HTTP, par exemple :
-r:setcookie("foo", "bar and stuff", false, os.time() + 86400)</pre>
+<pre class="prettyprint lang-lua">r:write("une simple chaîne") -- affichage dans le corps de la réponse</pre>
-<pre class="prettyprint lang-lua">r:wsupgrade() -- Met à jour une connexion vers les WebSockets si possible (et si demandé) :
-if r:wsupgrade() then -- si la mise à jour est possible :
- r:wswrite("Bienvenue dans les websockets!") -- écrit quelque chose à l'intention du client
- r:wsclose() -- Au revoir !
-end</pre>
+<pre class="prettyprint lang-lua">r:escape_html("<html>test</html>") -- Echappe le code HTML et renvoie le résultat</pre>
-<pre class="prettyprint lang-lua">r:wsread() -- Lit un cadre de websocket depuis une connexion vers websocket mise à jour (voir ci-dessus) :
-
-local line, isFinal = r:wsread() -- isFinal indique s'il s'agit du cadre final.
- -- dans le cas contraire, on peut lire les cadres suivants
-r:wswrite("Vous avez écrit : " .. line)</pre>
+<pre class="prettyprint lang-lua">r:base64_encode(string) -- Encode une chaîne à l'aide du standard de codage Base64.
-<pre class="prettyprint lang-lua">r:wswrite(line) -- écrit un cadre vers un client WebSocket :
-r:wswrite("Bonjour le Monde !")</pre>
+local encoded = r:base64_encode("This is a test") -- returns VGhpcyBpcyBhIHRlc3Q=</pre>
-<pre class="prettyprint lang-lua">r:wsclose() -- ferme une requête WebSocket et l'achève pour httpd :
+<pre class="prettyprint lang-lua">r:base64_decode(string) -- Décode une chaîne codée en Base64.
-if r:wsupgrade() then
- r:wswrite("Ecrire quelque chose : ")
- local line = r:wsread() or "nothing"
- r:wswrite("Vous avez écrit : " .. line);
- r:wswrite("Au revoir !")
- r:wsclose()
-end</pre>
+local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test'</pre>
-<pre class="prettyprint lang-lua">r:wspeek() -- Vérifie s'il y a des données à lire
--- Se met en sommeil tant que rien ne nous est envoyé ...
-while r:wspeek() == false do
- r.usleep(50000)
-end
--- Il y a des données à lire !
-local line = r:wsread()</pre>
+<pre class="prettyprint lang-lua">r:md5(string) -- Calcule et renvoie le condensé MD5 d'une chaîne en mode binaire (binary safe).
+local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339</pre>
-<pre class="prettyprint lang-lua">r:config() -- Extrait une arborescence de l'ensemble de
- -- la configuration de httpd pouvant être parcourue</pre>
+<pre class="prettyprint lang-lua">r:sha1(string) -- Calcule et renvoie le condensé SHA1 d'une chaîne en mode binaire (binary safe).
+local hash = r:sha1("This is a test") -- returns a54d88e06612d820bc3be72877c74f257b561b19</pre>
-<pre class="prettyprint lang-lua">r:activeconfig() -- Extrait une arborescence de la configuration active
- -- de httpd (pour le serveur virtuel sélectionné)</pre>
+<pre class="prettyprint lang-lua">r:escape(string) -- Echappe une chaîne de type URL.
+local url = "http://foo.bar/1 2 3 & 4 + 5"
+local escaped = r:escape(url) -- renvoie 'http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5'</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logging" id="logging">Fonctions de journalisation</a></h2>
-<pre class="prettyprint lang-lua"> -- exemples de messages de journalisation
- r:trace1("Ceci est un message de journalisation de niveau
- trace") -- les niveaux valides vont de trace1 à trace8 <br />
- r:debug("Ceci est un message de journalisation de niveau debug")<br />
- r:info("Ceci est un message de journalisation de niveau info")<br />
- r:notice("Ceci est un message de journalisation de niveau notice")<br />
- r:warn("Ceci est un message de journalisation de niveau warn")<br />
- r:err("Ceci est un message de journalisation de niveau err")<br />
- r:alert("Ceci est un message de journalisation de niveau alert")<br />
- r:crit("Ceci est un message de journalisation de niveau crit")<br />
- r:emerg("Ceci est un message de journalisation de niveau emerg")<br />
-</pre>
+<pre class="prettyprint lang-lua">r:unescape(string) -- Déséchappe une chaîne de type URL.
+local url = "http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5"
+local unescaped = r:unescape(url) -- renvoie 'http://foo.bar/1 2 3 & 4 + 5'</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="apache2" id="apache2">Paquet apache2</a></h2>
-<p>Le paquet nommé <code>apache2</code> est fourni avec (au minimum) le
-contenu suivant :</p>
-<dl>
- <dt>apache2.OK</dt>
- <dd>Constante interne OK. Les gestionnaires renverront cette valeur
- s'ils ont traité la requête.</dd>
- <dt>apache2.DECLINED</dt>
- <dd>Constante interne DECLINED. Les gestionnaires renverront cette
- valeur s'ils n'ont pas l'intention de traiter la requête.</dd>
- <dt>apache2.DONE</dt>
- <dd>Constante interne DONE.</dd>
- <dt>apache2.version</dt>
- <dd>Chaîne contenant la version du serveur HTTP Apache</dd>
- <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
- <dd>Code d'état HTTP</dd>
- <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
- <dd>Constantes internes utilisées par <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
- <dt>apache2.AUTHZ_DENIED, apache2.AUTHZ_GRANTED, apache2.AUTHZ_NEUTRAL, apache2.AUTHZ_GENERAL_ERROR, apache2.AUTHZ_DENIED_NO_USER</dt>
- <dd>constantes internes utilisées par <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code></dd>
-</dl>
-<p>Les autres codes d'état HTTP ne sont pas encore implémentés.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="modifying_buckets" id="modifying_buckets">Modification de contenu avec les filtres lua</a></h2>
-
- <p>
- Les fonctions de filtrage implémentées via les directives <code class="directive"><a href="#luainputfilter">LuaInputFilter</a></code> ou <code class="directive"><a href="#luaoutputfilter">LuaOutputFilter</a></code> sont conçues comme des
- fonctions de 3ème phase non blocantes utilisant des sous-routines
- pour suspendre et reprendre l'exécution d'une fonction lorsque des
- paquets de données sont envoyés à la chaîne de filtrage. La
- structure de base d'une telle fonction est :
- </p>
- <pre class="prettyprint lang-lua">function filter(r)
- -- Nous indiquons tout d'abord que nous sommes prêts à recevoir des
- -- blocs de données.
- -- Avant ceci, nous pouvons définir notre environnement, tester
- -- certaines conditions, et, si nous le jugeons nécessaire, refuser le
- -- filtrage d'une requête :
- if something_bad then
- return -- Le filtrage est sauté
- end
- -- Sans se préoccuper des données que nous devons éventuellement ajouter, un arrêt est réalisé ici.
- -- Noter que les filtres de sortie sont les seuls capables d'ajouter des éléments au début des données.
- -- Les filtres en entrée peuvent ajouter des éléments à la fin des données au stade final.
+<pre class="prettyprint lang-lua">r:construct_url(string) -- Construit une URL à partir d'un URI
- coroutine.yield([optional header to be prepended to the content])
+local url = r:construct_url(r.uri)</pre>
- -- Après cet arrêt, nous allons recevoir d'autres blocs de données, un par un ;
- -- nous pouvons les traiter comme il nous plaît et procéder à la réponse.
- -- Ces blocs sont conservés dans la variable globale 'bucket', nous réalisons donc
- -- une boucle pour vérifier que 'bucket' n'est pas vide :
- while bucket ~= nil do
- local output = mangle(bucket) -- Do some stuff to the content
- coroutine.yield(output) -- Return our new content to the filter chain
- end
- -- Une fois les blocs de données épuisés, 'bucket' est positionné à une valeur vide ('nil'),
- -- ce qui va nous faire sortir de cette boucle et nous amener à l'étape suivante.
- -- On peut ajouter ce qu'on veut à la fin des données à cette étape, qui constitue le dernier
- -- arrêt. Les filtres d'entrée comme de sortie peuvent servir à ajouter des éléments à la fin
- -- des données à cette étape.
- coroutine.yield([optional footer to be appended to the content])
+<pre class="prettyprint lang-lua">r.mpm_query(number) -- Interroge le serveur à propos de son module MPM via la requête ap_mpm_query.
+
+local mpm = r.mpm_query(14)
+if mpm == 1 then
+ r:puts("Ce serveur utilise le MPM Event")
end</pre>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="databases" id="databases">Connectivité aux bases de données</a></h2>
-
- <p>Mod_lua implémente une fonctionnalité basique de connexion aux
-bases de données permettant d'envoyer des requêtes ou d'exécuter des
-commandes auprès des moteurs de base de données les plus courants
-(mySQL, PostgreSQL, FreeTDS, ODBC, SQLite, Oracle), ainsi que mod_dbd.
- </p>
- <p>L'exemple suivant montre comment se connecter à une base de
-données et extraire des informations d'une table :</p>
- <pre class="prettyprint lang-lua">function handle(r)
- -- connexion à la base de données
- local database, err = r:dbacquire("mysql", "server=localhost,user=someuser,pass=somepass,dbname=mydb")
- if not err then
- -- Sélection de certaines informations
- local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1")
- if not err then
- local rows = results(0) -- extrait tous les enregistrements en mode synchrone
- for k, row in pairs(rows) do
- r:puts( string.format("Name: %s, Age: %s<br/>", row[1], row[2]) )
- end
- else
- r:puts("Database query error: " .. err)
- end
- database:close()
- else
- r:puts("Connexion à la base de données impossible : " .. err)
- end
+
+<pre class="prettyprint lang-lua">r:expr(string) -- Evalue une chaîne de type <a href="../expr.html">expr</a>.
+
+if r:expr("%{HTTP_HOST} =~ /^www/") then
+ r:puts("Ce nom d'hôte commence par www")
end</pre>
- <p>
- Pour utiliser <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>, spécifiez
-<code>mod_dbd</code> comme type de base de données, ou laissez le champ
-vide :
- </p>
- <pre class="prettyprint lang-lua">local database = r:dbacquire("mod_dbd")</pre>
- <h3><a name="database_object" id="database_object">L'objet database et ses méthodes</a></h3>
-
- <p>L'objet database renvoyé par <code>dbacquire</code> possède
-les méthodes suivantes :</p>
- <p><strong>Sélection normale et requête vers une base de données
-:</strong></p>
- <pre class="prettyprint lang-lua">-- Exécution d'une requête et renvoie du nombre d'enregistrements
-affectés :
-local affected, errmsg = database:query(r, "DELETE FROM `tbl` WHERE 1")
+<pre class="prettyprint lang-lua">r:scoreboard_process(a) -- Interroge le serveur à propos du
+ -- processus à la position <code>a</code>.
--- Exécution d'une requête et renvoie du résultat qui peut être utilisé
-en mode synchrone ou asynchrone :
-local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1")</pre>
+local process = r:scoreboard_process(1)
+r:puts("Le serveur 1 a comme PID " .. process.pid)</pre>
- <p><strong>Utilisation de requêtes préparées (recommandé) :</strong></p>
- <pre class="prettyprint lang-lua">-- Création et exécution d'une requête préparée :
-local statement, errmsg = database:prepare(r, "DELETE FROM `tbl` WHERE `age` > %u")
-if not errmsg then
- local result, errmsg = statement:query(20) -- exécute la requête pour age > 20
-end
--- Extrait une requête préparée depuis une directive DBDPrepareSQL :
-local statement, errmsg = database:prepared(r, "someTag")
-if not errmsg then
- local result, errmsg = statement:select("John Doe", 123) -- injecte les valeurs "John Doe" et 123 dans la requête
-end</pre>
+<pre class="prettyprint lang-lua">r:scoreboard_worker(a, b) -- Interroge le serveur à propos du
+ -- thread <code>b</code>, dans le processus <code>a</code>.
- <p><strong>Echappement de valeurs, fermeture de la base données,
-etc...</strong></p>
- <pre class="prettyprint lang-lua">-- Echappe une valeur pour pouvoir l'utiliser dans une requête :
-local escaped = database:escape(r, [["'|blabla]])
+local thread = r:scoreboard_worker(1, 1)
+r:puts("L'ID du thread 1 du serveur 1 est " .. thread.tid .. " et son
+état est " .. thread.status)</pre>
--- Ferme une base de données et libère les liens vers cette dernière :
-database:close()
--- Vérifie si une connexion à une base de données est en service et
-opérationnelle :
-local connected = database:active()</pre>
+<pre class="prettyprint lang-lua">r:clock() -- Renvoie l'heure courante avec une précision d'une microseconde.</pre>
-
- <h3><a name="result_sets" id="result_sets">Travail avec les jeux d'enregistrements renvoyés par les requêtes</a></h3>
-
- <p>Les jeux d'enregistrements renvoyés par <code>db:select</code> ou par des
-requêtes préparées créées par <code>db:prepare</code> permettent de
-sélectionner des enregistrements en mode synchrone ou
-asynchrone, selon le nombre d'enregistrements spécifié :<br />
- <code>result(0)</code> sélectionne tous les enregistrements en mode
-synchrone en renvoyant une table d'enregistrements.<br />
- <code>result(-1)</code> sélectionne le prochain enregistrement disponible en
-mode asynchrone.<br />
- <code>result(N)</code> sélectionne l'enregistrement numéro
-<code>N</code> en mode asynchrone.
- </p>
- <pre class="prettyprint lang-lua">-- extrait un jeu d'enregistrements via une requête régulière :
-local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1")
-local rows = result(0) -- sélectionne tous les enregistrements en mode synchrone
-local row = result(-1) -- sélectionne le prochain enregistrement disponible en mode asynchrone
-local row = result(1234) -- sélectionne l'enregistrement 1234 en mode asynchrone
-local row = result(-1, true) -- Lit l'enregistrement suivant en utilisant les noms d'enregistrements comme index.</pre>
+<pre class="prettyprint lang-lua">r:requestbody(filename) -- Lit et renvoie le corps d'une requête.
+ -- Si 'filename' est spécifié, le
+ -- corps de requête n'est pas
+ -- renvoyé, mais sauvegardé dans
+ -- le fichier correspondant.
- <p>Il est possible de construire une fonction qui renvoie une
-fonction itérative permettant de traiter tous les enregistrement en mode
-synchrone ou asynchrone selon la valeur de l'argument async :
- </p>
- <pre class="prettyprint lang-lua">function rows(resultset, async)
- local a = 0
- local function getnext()
- a = a + 1
- local row = resultset(-1)
- return row and a or nil, row
- end
- if not async then
- return pairs(resultset(0))
- else
- return getnext, self
- end
-end
+local input = r:requestbody()
+r:puts("Vous m'avez envoyé le corps de requête suivant :\n")
+r:puts(input)</pre>
-local statement, err = db:prepare(r, "SELECT * FROM `tbl` WHERE `age` > %u")
-if not err then
- -- sélectionne des enregistrements en mode asynchrone :
- local result, err = statement:select(20)
- if not err then
- for index, row in rows(result, true) do
- ....
- end
- end
- -- sélectionne des enregistrements en mode synchrone :
- local result, err = statement:select(20)
- if not err then
- for index, row in rows(result, false) do
- ....
- end
+<pre class="prettyprint lang-lua">r:add_input_filter(filter_name) -- Ajoute le filtre en entrée 'filter_name'.</pre>
+
+
+<pre class="prettyprint lang-lua">r:module_info(module_name) -- Interroge le serveur à propos d'un module.
+
+local mod = r.module_info("mod_lua.c")
+if mod then
+ for k, v in pairs(mod.commands) do
+ r:puts( ("%s: %s\n"):format(k,v)) -- affiche toutes les directives
+ -- implémentées par ce module.
end
end</pre>
-
- <h3><a name="closing_databases" id="closing_databases">Fermeture d'une connexion à une base de données</a></h3>
-
- <p>Lorsqu'elles ne sont plus utilisées, les connexions aux bases de
-données doivent être fermées avec <code>database:close()</code>. Si vous
-ne les fermez pas manuellement, mod_lua les fermera peut-être en tant
-que résidus collectés, mais si ce n'est pas le cas, vous pouvez finir
-pas avoir trop de connexions vers la base de données inutilisées. Les
-deux mesures suivantes sont pratiquement identiques :
- </p>
- <pre class="prettyprint lang-lua">-- Méthode 1 : fermeture manuelle de la connexion
-local database = r:dbacquire("mod_dbd")
-database:close() -- c'est tout
+<pre class="prettyprint lang-lua">r:loaded_modules() -- Renvoie une liste des modules chargés par httpd.
--- Méthode 2 : on laisse le collecteur de résidus la fermer
-local database = r:dbacquire("mod_dbd")
-database = nil -- on coupe le lien
-collectgarbage() -- fermeture de la connexion par le collecteur de résidus</pre>
+for k, module in pairs(r:loaded_modules()) do
+ r:puts("J'ai chargé le module " .. module .. "\n")
+end</pre>
-
- <h3><a name="database_caveat" id="database_caveat">Précautions à prendre lorsque l'on travaille avec les bases
-de données</a></h3>
-
- <p>Bien que les fonctions <code>query</code> et <code>run</code>
-soient toujours disponibles, il est recommandé d'utiliser des requêtes
-préparées chaque fois que possible, afin d'une part d'optimiser les
-performances (si votre connexion reste longtemps en vie), et d'autre part
-minimiser le risque d'attaques par injection SQL. Les fonctions
-<code>run</code> et <code>query</code> ne doivent être utilisées que
-lorsque la requête ne contient pas de variables (requête statique). Dans
-le cas des requêtes dynamiques, utilisez <code>db:prepare</code> ou
-<code>db:prepared</code>.
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luaauthzprovider" id="luaauthzprovider">Directive</a> <a name="LuaAuthzProvider" id="LuaAuthzProvider">LuaAuthzProvider</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Branche une fonction fournisseur d'autorisation dans <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaAuthzProvider provider_name /path/to/lua/script.lua function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.4.3 du serveur HTTP Apache</td></tr>
-</table>
-<p>Lorsqu'une fonction lua a été enregistrée en tant que fournisseur
-d'autorisation, elle peut être appelée via la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> :</p>
+<pre class="prettyprint lang-lua">r:runtime_dir_relative(filename) -- Génère le nom d'un fichier run-time
+ -- (par exemple la mémoire partagée
+ -- "file") relativement au répertoire de run-time.</pre>
-<pre class="prettyprint lang-config">LuaRoot /usr/local/apache2/lua
-LuaAuthzProvider foo authz.lua authz_check_foo
-<Location />
- Require foo johndoe
-</Location></pre>
+<pre class="prettyprint lang-lua">r:server_info() -- Renvoie une table contenant des informations à
+ -- propos du serveur, comme le nom de
+ -- l'exécutable httpd, le module mpm utilisé, etc...</pre>
-<pre class="prettyprint lang-lua">require "apache2"
-function authz_check_foo(r, who)
- if r.user ~= who then return apache2.AUTHZ_DENIED
- return apache2.AUTHZ_GRANTED
-end</pre>
+<pre class="prettyprint lang-lua">r:set_document_root(file_path) -- Définit la racine des documents
+ -- pour la requête à file_path.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luacodecache" id="luacodecache">Directive</a> <a name="LuaCodeCache" id="LuaCodeCache">LuaCodeCache</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure le cache de code compilé.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaCodeCache stat|forever|never</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LuaCodeCache stat</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>
- Cette directive permet de définir le comportement du cache de code
- en mémoire. La valeur par défaut est stat ; dans ce cas, le script
- du niveau le plus haut (et pas les scripts inclus) est vérifié à
- chaque fois que ce fichier est nécessaire, et est rechargé si la
- date de modification est plus récente que celle du script déjà
- chargé. Les autres valeurs permettent respectivement de garder le
- fichier en cache perpétuellement (forever - jamais vérifié ni
- remplacé), ou de ne jamais le mettre en cache (never).</p>
+<pre class="prettyprint lang-lua">r:add_version_component(component_string) -- Ajoute un élément à
+ -- la bannière du serveur.</pre>
- <p>En général, les valeurs stat et forever sont utilisées pour un
- serveur en production, et les valeurs stat ou never pour un serveur
- en développement.</p>
- <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaCodeCache stat
-LuaCodeCache forever
-LuaCodeCache never</pre>
-</div>
+<pre class="prettyprint lang-lua">r:set_context_info(prefix, docroot) -- Définit le préfixe et la
+ -- racine des documents du contexte pour une requête.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahookaccesschecker" id="luahookaccesschecker">Directive</a> <a name="LuaHookAccessChecker" id="LuaHookAccessChecker">LuaHookAccessChecker</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase access_checker du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookAccessChecker /chemin/vers/lua/script.lua hook_function_name [early|late]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le troisième argument optionnel est disponible depuis la
-version 2.3.15 du serveur HTTP Apache.</td></tr>
-</table>
-<p>Ajoute votre fonction d'accroche à la phase access_checker. Une
-fonction d'accroche access checker renvoie en général OK, DECLINED, ou
-HTTP_FORBIDDEN.</p>
-<div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
- "early" ou "late" permettent de contrôler le moment auquel ce script
- s'exécute par rapport aux autres modules.</p></div>
+<pre class="prettyprint lang-lua">r:os_escape_path(file_path) -- Convertit un chemin du système de
+ -- fichiers en URL indépendamment du système d'exploitation.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahookauthchecker" id="luahookauthchecker">Directive</a> <a name="LuaHookAuthChecker" id="LuaHookAuthChecker">LuaHookAuthChecker</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase auth_checker du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookAuthChecker /chemin/vers/lua/script.lua hook_function_name [early|late]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le troisième argument optionnel est disponible depuis la
-version 2.3.15 du serveur HTTP Apache.</td></tr>
-</table>
-<p>Invoque une fonction lua au cours de la phase auth_checker du
-traitement de la requête. Cette directive peut s'utiliser pour
-implémenter une vérification arbitraire de l'authentification et de
-l'autorisation. Voici un exemple très simple :
-</p>
-<pre class="prettyprint lang-lua">require 'apache2'
--- fonction d'accroche authcheck fictive
--- Si la requête ne contient aucune donnée d'authentification, l'en-tête
--- de la réponse est défini et un code 401 est renvoyé afin de demander au
--- navigateur d'effectuer une authentification basique. Si la requête
--- comporte des données d'authentification, elles ne sont pas vraiment
--- consultées, mais on admet la prise en compte de l'utilisateur 'foo' et
--- on la valide. On vérifie ensuite si l'utilisateur est bien 'foo' et on
--- accepte la requête.
-function authcheck_hook(r)
+<pre class="prettyprint lang-lua">r:escape_logitem(string) -- Echappe une chaîne pour journalisation.</pre>
- -- recherche des informations d'authentification
- auth = r.headers_in['Authorization']
- if auth ~= nil then
- -- définition d'un utilisateur par défaut
- r.user = 'foo'
- end
- if r.user == nil then
- r:debug("authcheck: user is nil, returning 401")
- r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
- return 401
- elseif r.user == "foo" then
- r:debug('user foo: OK')
- else
- r:debug("authcheck: user='" .. r.user .. "'")
- r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
- return 401
- end
- return apache2.OK
+<pre class="prettyprint lang-lua">r.strcmp_match(string, pattern) -- Vérifie si 'string' correspond à
+ -- 'pattern' via la fonction strcmp_match (GLOBs). Par exemple, est-ce que
+ -- 'www.example.com' correspond à '*.example.com' ?
+
+local match = r.strcmp_match("foobar.com", "foo*.com")
+if match then
+ r:puts("foobar.com matches foo*.com")
end</pre>
-<div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
- "early" ou "late" permettent de contrôler le moment auquel ce script
- s'exécute par rapport aux autres modules.</p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahookcheckuserid" id="luahookcheckuserid">Directive</a> <a name="LuaHookCheckUserID" id="LuaHookCheckUserID">LuaHookCheckUserID</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase check_user_id du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookCheckUserID /path/to/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahookfixups" id="luahookfixups">Directive</a> <a name="LuaHookFixups" id="LuaHookFixups">LuaHookFixups</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase de correction du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookFixups /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
-<p>
- Idem LuaHookTranslateName, mais s'exécute durant la phase de
- correction.
-</p>
+<pre class="prettyprint lang-lua">r:set_keepalive() -- Définit l'état de persistance d'une requête.
+ -- Renvoie true dans la mesure du possible, false dans le cas contraire.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahookinsertfilter" id="luahookinsertfilter">Directive</a> <a name="LuaHookInsertFilter" id="LuaHookInsertFilter">LuaHookInsertFilter</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase insert_filter du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookInsertFilter /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>Non encore implémenté</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahooklog" id="luahooklog">Directive</a> <a name="LuaHookLog" id="LuaHookLog">LuaHookLog</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Permet une insertion dans la phase de journalisation du
-traitement d'une requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookLog /path/to/lua/script.lua log_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
-<p>
- Ce dispositif d'insertion simple permet d'exécuter une fonction
- lorsque httpd entre dans la phase de journalisation du traitement
- d'une requête. Vous pouvez ainsi ajouter des données à vos propres
- entrées de journalisation, manipuler les entrées du journal standard
- avant leur enregistrement ou empêcher l'enregistrement d'une entrée
- dans le journal. Pour empêcher l'enregistrement normal des entrées
- du journal, renvoyez simplement <code>apache2.DONE</code> dans votre
- gestionnaire de journalisation, ou au contraire, renvoyez
- <code>apache2.OK</code> pour que httpd effectue une journalisation
- normale.
-</p>
-<p>Exemple :</p>
-<pre class="prettyprint lang-config">LuaHookLog /path/to/script.lua logger</pre>
-<pre class="prettyprint lang-lua">-- /path/to/script.lua --
-function logger(r)
- -- on joue à pile ou face :
- -- Si on obtient 1, on écrit dans notre propre journal Lua et on dit
- -- à httpd de ne pas enregistrer d'entrée dans le journal standard..
- -- Si on obtient 2, on nettoie un peu les données avant que httpd ne
- -- les enregistre dans le journal standard.
+<pre class="prettyprint lang-lua">r:make_etag() -- Génère et renvoie le etag pour la requête courante.</pre>
+
+
+<pre class="prettyprint lang-lua">r:send_interim_response(clear) -- Renvoie une réponse d'intérim (1xx) au
+ -- client. Si 'clear' est vrai, les en-têtes disponibles
+ -- seront envoyés et effacés.</pre>
+
- if math.random(1,2) == 1 then
- -- On effectue notre propre journalisation et le journal
- -- standard n'est pas alimenté
- local f = io.open("/foo/secret.log", "a")
- if f then
- f:write("Quelque chose de secret est arrivé à " .. r.uri .. "\n")
- f:close()
- end
- return apache2.DONE -- On dit à httpd de ne rien enregistrer
- --dans le journal standard
- else
- r.uri = r.uri:gsub("somesecretstuff", "") -- nettoie les données
- return apache2.OK -- et httpd doit alors les enregistrer.
- end
+<pre class="prettyprint lang-lua">r:custom_response(status_code, string) -- Génère et définit une réponse
+ -- personnalisée pour un code d'état particulier.
+ -- Le fonctionnement est très proche de celui de la directive ErrorDocument.
+
+r:custom_response(404, "Baleted!")</pre>
+
+
+<pre class="prettyprint lang-lua">r.exists_config_define(string) -- Vérifie si une définition de configuration existe.
+
+if r.exists_config_define("FOO") then
+ r:puts("httpd a probablement été lancé avec l'option -DFOO, ou FOO a
+ été défini dans la configuration")
end</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahookmaptostorage" id="luahookmaptostorage">Directive</a> <a name="LuaHookMapToStorage" id="LuaHookMapToStorage">LuaHookMapToStorage</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase map_to_storage du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookMapToStorage /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Identique à la directive
- <code class="directive">LuaHookTranslateName</code>, mais s'exécute à la
- phase map-to-storage du traitement de la requête. Les modules comme
- mod_cache agissent pendant cette phase, ce qui permet de présenter
- un exemple intéressant de ce que l'on peut faire ici :</p>
- <pre class="prettyprint lang-config">LuaHookMapToStorage /path/to/lua/script.lua check_cache</pre>
+<pre class="prettyprint lang-lua">r:state_query(string) -- Interroge le serveur à propos de son état.</pre>
- <pre class="prettyprint lang-lua">require"apache2"
-cached_files = {}
-function read_file(filename)
- local input = io.open(filename, "r")
- if input then
- local data = input:read("*a")
- cached_files[filename] = data
- file = cached_files[filename]
- input:close()
- end
- return cached_files[filename]
-end
+<pre class="prettyprint lang-lua">r:stat(filename [,wanted]) -- Exécute stat() sur un fichier, et renvoie une table contenant
+ -- des informations à propos de ce fichier.
-function check_cache(r)
- if r.filename:match("%.png$") then -- Ne concerne que les fichiers PNG
- local file = cached_files[r.filename] -- Vérifie les entrées du cache
- if not file then
- file = read_file(r.filename) -- Lit le fichier vers le cache
- end
- if file then -- Si le fichier existe, on l'envoie
- r.status = 200
- r:write(file)
- r:info(("%s a été envoyé au client depuis le cache"):format(r.filename))
- return apache2.DONE -- cout-circuite le gestionnaire par défaut des fichiers PNG
- end
- end
- return apache2.DECLINED -- Si nous n'avons rien eu à faire, nous laissons les autres s'en charger
+local info = r:stat("/var/www/foo.txt")
+if info then
+ r:puts("Ce fichier existe et a été modifié pour la dernière fois à : " .. info.modified)
end</pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahooktranslatename" id="luahooktranslatename">Directive</a> <a name="LuaHookTranslateName" id="LuaHookTranslateName">LuaHookTranslateName</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée à la phase du nom de
-traduction du traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookTranslateName /chemin/vers/lua/script.lua nom_fonction_hook [early|late]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le troisième argument optionnel est disponible depuis la
-version 2.3.15 du serveur HTTP Apache.</td></tr>
-</table><p>
- Cette directive permet d'ajouter un point d'entrée (à
- APR_HOOK_MIDDLE) à la phase du nom de traduction du traitement de la
- requête. La fonction hook accepte un seul argument, le request_rec,
- et doit renvoyer un code d'état qui est soit un code d'erreur HTTP,
- ou une constante définie dans le module apache2 : apache2.OK,
- apache2.DECLINED, ou apache2.DONE.</p>
+<pre class="prettyprint lang-lua">r:regex(string, pattern [,flags]) -- Exécute une recherche à base d'expression rationnelle
+ -- sur une chaîne, et renvoie les éventuelles correspondances trouvées.
- <p>Pour ceux qui ne sont pas familiers avec les points d'entrée
- (hook), en gros, chaque hook sera invoqué jusqu'à ce que l'un
- d'entre eux renvoie apache2.OK. Si un hook n'effectuer pas la
- traduction, il doit juste renvoyer apache2.DECLINED. Si le
- traitement de la requête doit être interrompu, la valeur renvoyée
- doit être apache2.DONE.</p>
+local matches = r:regex("foo bar baz", [[foo (\w+) (\S*)]])
+if matches then
+ r:puts("L'expression rationnelle correspond et le dernier mot
+ capturé ($2) est : " .. matches[2])
+end
- <p>Exemple :</p>
+-- Exemple avec insensibilité à la casse :
+local matches = r:regex("FOO bar BAz", [[(foo) bar]], 1)
-<pre class="prettyprint lang-config"># httpd.conf
-LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</pre>
+-- les drapeaux peuvent être une combibaison bit à bit de :
+-- 0x01: insensibilité à la casse
+-- 0x02: recherche multiligne</pre>
-<pre class="prettyprint lang-lua">-- /scripts/conf/hooks.lua --
-require "apache2"
-function silly_mapper(r)
- if r.uri == "/" then
- r.filename = "/var/www/home.lua"
- return apache2.OK
- else
- return apache2.DECLINED
+<pre class="prettyprint lang-lua">r.usleep(microsecondes) -- Interrompt l'exécution du script pendant le nombre de microsecondes spécifié.</pre>
+
+
+<pre class="prettyprint lang-lua">r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion à une base de données et renvoie une classe database.
+ -- Voir '<a href="#databases">Connectivité aux bases de données</a>'
+ -- pour plus de détails.</pre>
+
+
+<pre class="prettyprint lang-lua">r:ivm_set("key", value) -- Défini une variable Inter-VM avec une valeur spécifique.
+ -- Ces valeurs sont conservées même si la VM est
+ -- arrêtée ou non utilisée, et ne doivent donc être
+ -- utilisées que si MaxConnectionsPerChild > 0.
+ -- Les valeurs peuvent être de type number, string
+ -- ou boolean et sont stockées séparément pour
+ -- chaque processus (elles ne seront donc pas d'une
+ -- grande utilité si l'on utilise le mpm prefork).
+
+r:ivm_get("key") -- Lit le contenu d'une variable définie via ivm_set. Renvoie
+ -- le contenu de la variable si elle existe, ou nil
+ -- dans le cas contraire.
+
+-- Voici un exemple de lecture/écriture qui sauvegarde une variable
+-- globale en dehors de la VM :
+function handle(r)
+ -- La première VM qui effectue l'appel suivant n'obtiendra aucune
+ -- valeur, et devra la créer
+ local foo = r:ivm_get("cached_data")
+ if not foo then
+ foo = do_some_calcs() -- simulation de valeurs de retour
+ r:ivm_set("cached_data", foo) -- définition globale de la variable
end
+ r:puts("La donnée en cache est : ", foo)
end</pre>
+<pre class="prettyprint lang-lua">r:htpassword(string [,algorithm [,cost]]) -- Génère un hash de mot de passe à partir d'une chaîne.
+ -- algorithm: 0 = APMD5 (défaut), 1 = SHA, 2 = BCRYPT, 3 = CRYPT.
+ -- cost: ne s'utilise qu'avec l'algorythme BCRYPT (défaut = 5).</pre>
- <div class="note"><h3>Contexte</h3><p>Cette directive ne peut être
- utilisée ni à l'intérieur d'une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, ni dans un fichier htaccess.</p></div>
- <div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
- "early" ou "late" permettent de contrôler le moment auquel ce script
- s'exécute par rapport aux autres modules.</p></div>
+<pre class="prettyprint lang-lua">r:mkdir(dir [,mode]) -- Crée un répertoire et définit son mode via le paramètre optionnel mode.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luahooktypechecker" id="luahooktypechecker">Directive</a> <a name="LuaHookTypeChecker" id="LuaHookTypeChecker">LuaHookTypeChecker</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la phase type_checker du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookTypeChecker /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>...</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luainherit" id="luainherit">Directive</a> <a name="LuaInherit" id="LuaInherit">LuaInherit</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contrôle la manière dont les sections de configuration
-parentes sont fusionnées dans les enfants</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaInherit none|parent-first|parent-last</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LuaInherit parent-first</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Versions 2.4.0 et supérieures</td></tr>
-</table><p>Par défaut, si des directives LuaHook* se trouvent dans
- des sections de configuration Directory ou Location qui se
- chevauchent, les scripts
- définis dans les sections les plus spécifiques s'exécutent
- <em>après</em> ceux définis dans les sections plus génériques
- (LuaInherit parent-first). Vous pouvez inverser cet ordre, ou faire
- en sorte que le contexte parent ne s'applique pas du tout.</p>
- <p>Jusqu'aux versions 2.3.x, le comportement par défaut consistait à
- ignorer les directives LuaHook* situées dans les sections de
- configuration parentes.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luainputfilter" id="luainputfilter">Directive</a> <a name="LuaInputFilter" id="LuaInputFilter">LuaInputFilter</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit une fonction Lua pour le filtrage en entrée</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaInputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.4.5 du serveur HTTP
-Apache</td></tr>
-</table>
-<p>Cette directive permet d'ajouter un filtre en entrée sous la forme
-d'une fonction Lua. A l'instar des filtres en sorties, les filtres en
-entrée fonctionnent comme des sous-routines, intervenant dans un premier
-temps avant l'envoi du contenu des tampons, puis chaque fois qu'un
-paquet de données doit être transmis à la chaîne, et éventuellement
-produisant toute donnée à ajouter aux données en entrée. La variable
-globale <code>bucket</code> contient les paquets de données tels qu'ils
-sont transmis au script Lua :
-</p>
+<pre class="prettyprint lang-lua">r:mkrdir(dir [,mode]) -- Crée des répertoires de manière récursive et définit
+ -- leur mode via le paramètre optionnel mode.</pre>
+
+
+<pre class="prettyprint lang-lua">r:rmdir(dir) -- Supprime un répertoire.</pre>
+
+
+<pre class="prettyprint lang-lua">r:touch(file [,mtime]) -- Définit la date de modification d'un fichier à la date courante ou à
+ -- la valeur optionnelle mtime en msec.</pre>
+
+
+<pre class="prettyprint lang-lua">r:get_direntries(dir) -- Renvoie une table contenant toutes les entrées de répertoires.
+
+-- Renvoie un chemin sous forme éclatée en chemin, fichier, extension
+function handle(r)
+ local dir = r.context_document_root
+ for _, f in ipairs(r:get_direntries(dir)) do
+ local info = r:stat(dir .. "/" .. f)
+ if info then
+ local mtime = os.date(fmt, info.mtime / 1000000)
+ local ftype = (info.filetype == 2) and "[dir] " or "[file]"
+ r:puts( ("%s %s %10i %s\n"):format(ftype, mtime, info.size, f) )
+ end
+ end
+end</pre>
+
+
+<pre class="prettyprint lang-lua">r.date_parse_rfc(string) -- Interprète une chaîne date/heure et renvoie l'équivalent en secondes depuis epoche.</pre>
-<pre class="prettyprint lang-config">LuaInputFilter myInputFilter /www/filter.lua input_filter
-<Files *.lua>
- SetInputFilter myInputFilter
-</Files></pre>
-<pre class="prettyprint lang-lua">--[[
- Exemple de filtre en entrée qui convertit toutes les données POST en
- majuscules.
-]]--
-function input_filter(r)
- print("luaInputFilter called") -- pour débogage
- coroutine.yield() -- attend des paquets de données
- while bucket do -- Pour chaque paquet, faire ...
- local output = string.upper(bucket) -- Convertit toutes les données POST en majuscules
- coroutine.yield(output) -- Envoie les données traitées à la chaîne de filtrage
- end
- -- plus aucune donnée à traiter.
- coroutine.yield("&filterSignature=1234") -- Ajoute une signature à la fin
+<pre class="prettyprint lang-lua">r:getcookie(key) -- Obtient un cookie HTTP</pre>
+
+
+<pre class="prettyprint lang-lua">r:setcookie(key, value, secure, expires) -- Définit un cookie HTTP, par exemple :
+r:setcookie("foo", "bar and stuff", false, os.time() + 86400)</pre>
+
+
+<pre class="prettyprint lang-lua">r:wsupgrade() -- Met à jour une connexion vers les WebSockets si possible (et si demandé) :
+if r:wsupgrade() then -- si la mise à jour est possible :
+ r:wswrite("Bienvenue dans les websockets!") -- écrit quelque chose à l'intention du client
+ r:wsclose() -- Au revoir !
end</pre>
-<p>
-Le filtre en entrée peut interdire ou sauter un filtre s'il est
-considéré comme indésirable :
-</p>
-<pre class="prettyprint lang-lua">function input_filter(r)
- if not good then
- return -- Empêche tout simplement le filtrage et transmet le contenu original
- end
- coroutine.yield() -- attend des paquets de données
- ... -- insert les filtres ici
+
+<pre class="prettyprint lang-lua">r:wsread() -- Lit un cadre de websocket depuis une connexion vers websocket mise à jour (voir ci-dessus) :
+
+local line, isFinal = r:wsread() -- isFinal indique s'il s'agit du cadre final.
+ -- dans le cas contraire, on peut lire les cadres suivants
+r:wswrite("Vous avez écrit : " .. line)</pre>
+
+
+<pre class="prettyprint lang-lua">r:wswrite(line) -- écrit un cadre vers un client WebSocket :
+r:wswrite("Bonjour le Monde !")</pre>
+
+
+<pre class="prettyprint lang-lua">r:wsclose() -- ferme une requête WebSocket et l'achève pour httpd :
+
+if r:wsupgrade() then
+ r:wswrite("Ecrire quelque chose : ")
+ local line = r:wsread() or "nothing"
+ r:wswrite("Vous avez écrit : " .. line);
+ r:wswrite("Au revoir !")
+ r:wsclose()
end</pre>
-<p>
-Voir "<a href="#modifying_buckets">Modification de contenu avec les
-filtres Lua</a>" pour plus de détails.
-</p>
+<pre class="prettyprint lang-lua">r:wspeek() -- Vérifie s'il y a des données à lire
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luamaphandler" id="luamaphandler">Directive</a> <a name="LuaMapHandler" id="LuaMapHandler">LuaMapHandler</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Met en correspondance un chemin avec un gestionnaire lua</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaMapHandler modele-uri /chemin/vers/lua/script.lua
-[nom-fonction]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Cette directive permet de faire correspondre un modèle d'uri avec
- une fonction de gestionnaire située dans un fichier spécifique. Elle
- utilise les expressions rationnelles PCRE pour mettre en
- correspondance l'uri, et supporte les groupes de correspondance
- d'interpolation dans le chemin du fichier et le nom de la fonction.
- Prenez garde aux problèmes de sécurité en écrivant vos expressions
- rationnelles.</p>
- <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2</pre>
-</div>
- <p>Cette directive va faire correspondre des uri comme
- /photos/show?id=9 au fichier /scripts/photos.lua, et invoquera la
- fonction de gestionnaire handle_show au niveau de la vm lua
- après chargement de ce fichier.</p>
+-- Se met en sommeil tant que rien ne nous est envoyé ...
+while r:wspeek() == false do
+ r.usleep(50000)
+end
+-- Il y a des données à lire !
+local line = r:wsread()</pre>
-<pre class="prettyprint lang-config">LuaMapHandler /bingo /scripts/wombat.lua</pre>
- <p>Cette directive invoquera la fonction "handle" qui est la
- valeur par défaut si aucun nom de fonction spécifique n'est
- spécifié.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luaoutputfilter" id="luaoutputfilter">Directive</a> <a name="LuaOutputFilter" id="LuaOutputFilter">LuaOutputFilter</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit une fonction Lua pour le filtrage de contenu en
-sortie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaOutputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.5 du serveur HTTP
-Apache</td></tr>
-</table>
-<p>>Cette directive permet d'ajouter un filtre en sortie sous la forme
-d'une fonction Lua. A l'instar des filtres en sorties, les filtres en
-entrée fonctionnent comme des sous-routines, intervenant dans un premier
-temps avant l'envoi du contenu des tampons, puis chaque fois qu'un
-paquet de données doit être transmis à la chaîne, et éventuellement
-produisant toute donnée à ajouter aux données en sortie. La variable
-globale <code>bucket</code> contient les paquets de données tels qu'ils
-sont transmis au script Lua :
-</p>
+<pre class="prettyprint lang-lua">r:config() -- Extrait une arborescence de l'ensemble de
+ -- la configuration de httpd pouvant être parcourue</pre>
-<pre class="prettyprint lang-config">LuaOutputFilter myOutputFilter /www/filter.lua output_filter
-<Files *.lua>
- SetOutputFilter myOutputFilter
-</Files></pre>
-<pre class="prettyprint lang-lua">--[[
- Exemple de filtre en sortie qui échappe toutes les entités HTML en
- sortie
-]]--
-function output_filter(r)
- coroutine.yield("(Handled by myOutputFilter)<br/>\n") -- Ajoute des données au début de la sortie,
- -- puis attend des paquets de données à traiter
- while bucket do -- Pour chaque paquet, faire ...
- local output = r:escape_html(bucket) -- Echappe les données en sortie
- coroutine.yield(output) -- Envoie les données traitées à la chaîne
+<pre class="prettyprint lang-lua">r:activeconfig() -- Extrait une arborescence de la configuration active
+ -- de httpd (pour le serveur virtuel sélectionné)</pre>
+
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logging" id="logging">Fonctions de journalisation</a></h2>
+
+<pre class="prettyprint lang-lua"> -- exemples de messages de journalisation
+ r:trace1("Ceci est un message de journalisation de niveau
+ trace") -- les niveaux valides vont de trace1 à trace8 <br />
+ r:debug("Ceci est un message de journalisation de niveau debug")<br />
+ r:info("Ceci est un message de journalisation de niveau info")<br />
+ r:notice("Ceci est un message de journalisation de niveau notice")<br />
+ r:warn("Ceci est un message de journalisation de niveau warn")<br />
+ r:err("Ceci est un message de journalisation de niveau err")<br />
+ r:alert("Ceci est un message de journalisation de niveau alert")<br />
+ r:crit("Ceci est un message de journalisation de niveau crit")<br />
+ r:emerg("Ceci est un message de journalisation de niveau emerg")<br />
+</pre>
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="apache2" id="apache2">Paquet apache2</a></h2>
+<p>Le paquet nommé <code>apache2</code> est fourni avec (au minimum) le
+contenu suivant :</p>
+<dl>
+ <dt>apache2.OK</dt>
+ <dd>Constante interne OK. Les gestionnaires renverront cette valeur
+ s'ils ont traité la requête.</dd>
+ <dt>apache2.DECLINED</dt>
+ <dd>Constante interne DECLINED. Les gestionnaires renverront cette
+ valeur s'ils n'ont pas l'intention de traiter la requête.</dd>
+ <dt>apache2.DONE</dt>
+ <dd>Constante interne DONE.</dd>
+ <dt>apache2.version</dt>
+ <dd>Chaîne contenant la version du serveur HTTP Apache</dd>
+ <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
+ <dd>Code d'état HTTP</dd>
+ <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
+ <dd>Constantes internes utilisées par <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
+ <dt>apache2.AUTHZ_DENIED, apache2.AUTHZ_GRANTED, apache2.AUTHZ_NEUTRAL, apache2.AUTHZ_GENERAL_ERROR, apache2.AUTHZ_DENIED_NO_USER</dt>
+ <dd>constantes internes utilisées par <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code></dd>
+
+</dl>
+<p>Les autres codes d'état HTTP ne sont pas encore implémentés.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="modifying_buckets" id="modifying_buckets">Modification de contenu avec les filtres lua</a></h2>
+
+ <p>
+ Les fonctions de filtrage implémentées via les directives <code class="directive"><a href="#luainputfilter">LuaInputFilter</a></code> ou <code class="directive"><a href="#luaoutputfilter">LuaOutputFilter</a></code> sont conçues comme des
+ fonctions de 3ème phase non blocantes utilisant des sous-routines
+ pour suspendre et reprendre l'exécution d'une fonction lorsque des
+ paquets de données sont envoyés à la chaîne de filtrage. La
+ structure de base d'une telle fonction est :
+ </p>
+ <pre class="prettyprint lang-lua">function filter(r)
+ -- Nous indiquons tout d'abord que nous sommes prêts à recevoir des
+ -- blocs de données.
+ -- Avant ceci, nous pouvons définir notre environnement, tester
+ -- certaines conditions, et, si nous le jugeons nécessaire, refuser le
+ -- filtrage d'une requête :
+ if something_bad then
+ return -- Le filtrage est sauté
end
- -- plus aucune donnée à traiter.
+ -- Sans se préoccuper des données que nous devons éventuellement ajouter, un arrêt est réalisé ici.
+ -- Noter que les filtres de sortie sont les seuls capables d'ajouter des éléments au début des données.
+ -- Les filtres en entrée peuvent ajouter des éléments à la fin des données au stade final.
+
+ coroutine.yield([optional header to be prepended to the content])
+
+ -- Après cet arrêt, nous allons recevoir d'autres blocs de données, un par un ;
+ -- nous pouvons les traiter comme il nous plaît et procéder à la réponse.
+ -- Ces blocs sont conservés dans la variable globale 'bucket', nous réalisons donc
+ -- une boucle pour vérifier que 'bucket' n'est pas vide :
+ while bucket ~= nil do
+ local output = mangle(bucket) -- Do some stuff to the content
+ coroutine.yield(output) -- Return our new content to the filter chain
+ end
+
+ -- Une fois les blocs de données épuisés, 'bucket' est positionné à une valeur vide ('nil'),
+ -- ce qui va nous faire sortir de cette boucle et nous amener à l'étape suivante.
+ -- On peut ajouter ce qu'on veut à la fin des données à cette étape, qui constitue le dernier
+ -- arrêt. Les filtres d'entrée comme de sortie peuvent servir à ajouter des éléments à la fin
+ -- des données à cette étape.
+ coroutine.yield([optional footer to be appended to the content])
end</pre>
-<p>
-Comme les filres en entrée, le filtre en sortie peut interdire ou sauter un filtre s'il est
-considéré comme indésirable :
-</p>
-<pre class="prettyprint lang-lua">function output_filter(r)
- if not r.content_type:match("text/html") then
- return -- Empêche tout simplement le filtrage et transmet le contenu original
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="databases" id="databases">Connectivité aux bases de données</a></h2>
+
+ <p>Mod_lua implémente une fonctionnalité basique de connexion aux
+bases de données permettant d'envoyer des requêtes ou d'exécuter des
+commandes auprès des moteurs de base de données les plus courants
+(mySQL, PostgreSQL, FreeTDS, ODBC, SQLite, Oracle), ainsi que mod_dbd.
+ </p>
+ <p>L'exemple suivant montre comment se connecter à une base de
+données et extraire des informations d'une table :</p>
+ <pre class="prettyprint lang-lua">function handle(r)
+ -- connexion à la base de données
+ local database, err = r:dbacquire("mysql", "server=localhost,user=someuser,pass=somepass,dbname=mydb")
+ if not err then
+ -- Sélection de certaines informations
+ local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1")
+ if not err then
+ local rows = results(0) -- extrait tous les enregistrements en mode synchrone
+ for k, row in pairs(rows) do
+ r:puts( string.format("Name: %s, Age: %s<br/>", row[1], row[2]) )
+ end
+ else
+ r:puts("Database query error: " .. err)
+ end
+ database:close()
+ else
+ r:puts("Connexion à la base de données impossible : " .. err)
end
- coroutine.yield() -- attend des paquets de données
- ... -- insert les filtres ici
end</pre>
-<div class="note"><h3>Les filtres Lua avec <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></h3>
-<p>Lorsqu'on utilise un filtre Lua comme fournisseur sous-jacent via la
-directive <code class="directive"><a href="../mod/mod_filter.html#filterprovider">FilterProvider</a></code>, le
-filtrage ne fonctionnera que si <var>filter-name</var> est identique à
-<var>provider-name</var>.
-</p> </div>
+ <p>
+ Pour utiliser <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>, spécifiez
+<code>mod_dbd</code> comme type de base de données, ou laissez le champ
+vide :
+ </p>
+ <pre class="prettyprint lang-lua">local database = r:dbacquire("mod_dbd")</pre>
-<p>
-Voir "<a href="#modifying_buckets">Modification de contenu avec les
-filtres Lua</a>" pour plus de détails.
-</p>
+ <h3><a name="database_object" id="database_object">L'objet database et ses méthodes</a></h3>
+
+ <p>L'objet database renvoyé par <code>dbacquire</code> possède
+les méthodes suivantes :</p>
+ <p><strong>Sélection normale et requête vers une base de données
+:</strong></p>
+ <pre class="prettyprint lang-lua">-- Exécution d'une requête et renvoie du nombre d'enregistrements
+affectés :
+local affected, errmsg = database:query(r, "DELETE FROM `tbl` WHERE 1")
+-- Exécution d'une requête et renvoie du résultat qui peut être utilisé
+en mode synchrone ou asynchrone :
+local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1")</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luapackagecpath" id="luapackagecpath">Directive</a> <a name="LuaPackageCPath" id="LuaPackageCPath">LuaPackageCPath</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un répertoire au package.cpath de lua</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaPackageCPath /chemin/vers/include/?.soa</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Cette directive permet d'ajouter un chemin à la liste des chemins
- de recherche des bibliothèques partagées de lua. Ceci modifie le
- package.cpath dans les vms lua.</p>
+ <p><strong>Utilisation de requêtes préparées (recommandé) :</strong></p>
+ <pre class="prettyprint lang-lua">-- Création et exécution d'une requête préparée :
+local statement, errmsg = database:prepare(r, "DELETE FROM `tbl` WHERE `age` > %u")
+if not errmsg then
+ local result, errmsg = statement:query(20) -- exécute la requête pour age > 20
+end
+-- Extrait une requête préparée depuis une directive DBDPrepareSQL :
+local statement, errmsg = database:prepared(r, "someTag")
+if not errmsg then
+ local result, errmsg = statement:select("John Doe", 123) -- injecte les valeurs "John Doe" et 123 dans la requête
+end</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luapackagepath" id="luapackagepath">Directive</a> <a name="LuaPackagePath" id="LuaPackagePath">LuaPackagePath</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un répertoire au package.path de lua</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaPackagePath /chemin/vers/include/?.lua</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table><p>Cette directive permet d'ajouter un chemin à la liste des
- chemins de recherche du module lua. Elle suit les mêmes conventions
- que lua. Ceci modifie le package.path dans les vms lua.</p>
+ <p><strong>Echappement de valeurs, fermeture de la base données,
+etc...</strong></p>
+ <pre class="prettyprint lang-lua">-- Echappe une valeur pour pouvoir l'utiliser dans une requête :
+local escaped = database:escape(r, [["'|blabla]])
- <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaPackagePath /scripts/lib/?.lua
-LuaPackagePath /scripts/lib/?/init.lua</pre>
-</div>
+-- Ferme une base de données et libère les liens vers cette dernière :
+database:close()
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luaquickhandler" id="luaquickhandler">Directive</a> <a name="LuaQuickHandler" id="LuaQuickHandler">LuaQuickHandler</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entrée pour la gestion rapide du
-traitement de la requête</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaQuickHandler /path/to/script.lua hook_function_name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Cette phase s'exécute juste après l'attribution de la requête à
- un serveur virtuel, et permet d'effectuer certains traitements avant
- le déroulement des autres phases, ou de servir une requête sans
- avoir à la traduire, l'associer à un espace de stockage, etc...
- Comme cette phase s'exécute avant toute autre, les directives telles
- que <code class="directive"><a href="../mod/core.html#location"><Location></a></code> ou
- <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ne
- sont pas encore prises en compte, car Les URI n'ont pas encore été
- entièrement interprétés.
+-- Vérifie si une connexion à une base de données est en service et
+opérationnelle :
+local connected = database:active()</pre>
+
+
+ <h3><a name="result_sets" id="result_sets">Travail avec les jeux d'enregistrements renvoyés par les requêtes</a></h3>
+
+ <p>Les jeux d'enregistrements renvoyés par <code>db:select</code> ou par des
+requêtes préparées créées par <code>db:prepare</code> permettent de
+sélectionner des enregistrements en mode synchrone ou
+asynchrone, selon le nombre d'enregistrements spécifié :<br />
+ <code>result(0)</code> sélectionne tous les enregistrements en mode
+synchrone en renvoyant une table d'enregistrements.<br />
+ <code>result(-1)</code> sélectionne le prochain enregistrement disponible en
+mode asynchrone.<br />
+ <code>result(N)</code> sélectionne l'enregistrement numéro
+<code>N</code> en mode asynchrone.
</p>
- <div class="note"><h3>Contexte</h3><p>Cette directive ne peut être
- utilisée ni à l'intérieur d'une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, ni dans un fichier htaccess.</p></div>
+ <pre class="prettyprint lang-lua">-- extrait un jeu d'enregistrements via une requête régulière :
+local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1")
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luaroot" id="luaroot">Directive</a> <a name="LuaRoot" id="LuaRoot">LuaRoot</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie le chemin de base pour la résolution des chemins
-relatifs dans les directives de mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaRoot /chemin/vers/un/répertoire</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Cette directive permet de spécifier le chemin de base qui sera
- utilisé pour évaluer tous les chemins relatifs dans mod_lua. En
- l'absence de cette directive, les chemins relatifs sont résolus par
- rapport au répertoire de travail courant, ce qui ne sera pas
- toujours approprié pour un serveur.</p>
+local rows = result(0) -- sélectionne tous les enregistrements en mode synchrone
+local row = result(-1) -- sélectionne le prochain enregistrement disponible en mode asynchrone
+local row = result(1234) -- sélectionne l'enregistrement 1234 en mode asynchrone
+local row = result(-1, true) -- Lit l'enregistrement suivant en utilisant les noms d'enregistrements comme index.</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="luascope" id="luascope">Directive</a> <a name="LuaScope" id="LuaScope">LuaScope</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Une valeur parmi once, request, conn, thread -- la valeur par défaut est once</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaScope once|request|conn|thread|server [min] [max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>LuaScope once</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-</table>
- <p>Cette directive permet de spécifier la durée de vie de
- l'interpréteur Lua qui sera utilisé dans ce "répertoire". La valeur
- par défaut est "once".</p>
+ <p>Il est possible de construire une fonction qui renvoie une
+fonction itérative permettant de traiter tous les enregistrement en mode
+synchrone ou asynchrone selon la valeur de l'argument async :
+ </p>
+ <pre class="prettyprint lang-lua">function rows(resultset, async)
+ local a = 0
+ local function getnext()
+ a = a + 1
+ local row = resultset(-1)
+ return row and a or nil, row
+ end
+ if not async then
+ return pairs(resultset(0))
+ else
+ return getnext, self
+ end
+end
- <dl>
- <dt>once:</dt> <dd>utilise l'interpréteur une fois.</dd>
+local statement, err = db:prepare(r, "SELECT * FROM `tbl` WHERE `age` > %u")
+if not err then
+ -- sélectionne des enregistrements en mode asynchrone :
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, true) do
+ ....
+ end
+ end
- <dt>request:</dt> <dd>utilise l'interpréteur pour traiter tout ce
- qui est basé sur le même fichier dans la requête, et qui se trouve
- aussi dans la portée de la requête.</dd>
+ -- sélectionne des enregistrements en mode synchrone :
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, false) do
+ ....
+ end
+ end
+end</pre>
- <dt>conn:</dt> <dd>idem request, mais attaché à connection_rec</dd>
+
+ <h3><a name="closing_databases" id="closing_databases">Fermeture d'une connexion à une base de données</a></h3>
+
- <dt>thread:</dt> <dd>Utilise l'interpréteur pendant toute la durée
- de vie du thread qui traite la requête (disponible seulement avec
- les MPMs threadés).</dd>
+ <p>Lorsqu'elles ne sont plus utilisées, les connexions aux bases de
+données doivent être fermées avec <code>database:close()</code>. Si vous
+ne les fermez pas manuellement, mod_lua les fermera peut-être en tant
+que résidus collectés, mais si ce n'est pas le cas, vous pouvez finir
+pas avoir trop de connexions vers la base de données inutilisées. Les
+deux mesures suivantes sont pratiquement identiques :
+ </p>
+ <pre class="prettyprint lang-lua">-- Méthode 1 : fermeture manuelle de la connexion
+local database = r:dbacquire("mod_dbd")
+database:close() -- c'est tout
- <dt>server:</dt> <dd>Le comportement est ici différent, car la
- portée du serveur présente une durée de vie assez longue, et
- plusieurs threads vont partager le même server_rec. Pour gérer tout
- ceci, les états lua du serveur sont stockés dans une liste de ressources
- apr. Les arguments <code>min</code> et <code>max</code> permettent
- de spécifier les nombres minimaux et maximaux d'états lua à stocker
- dans la liste.</dd>
- </dl>
- <p>En général, les portées <code>thread</code> et <code>server</code>
- sont 2 à 3 fois plus rapides que les autres, car elles n'ont pas besoin
- de régénérer de nouveaux états Lua à chaque requête (comme c'est le
- cas avec le MPM event, où même les connexions persistantes utilisent un
- nouveau thread pour chaque requête). Si vous pensez que vos scripts
- n'auront pas de problème s'il réutilisent un état, alors les portées
- <code>thread</code> ou <code>server</code> doivent être utilisées car
- elles présenteront de meilleures performances. Alors que la portée
- <code>thread</code> fournira les réponses les plus rapides, la portée
- <code>server</code> utilisera moins de mémoire car les états sont
- rassemblés dans des jeux, permettant par exemple à 1000 threads de
- partager 100 états Lua, ne nécessitant ainsi que 10% de la mémoire
- requise par la portée <code>thread</code>.
+-- Méthode 2 : on laisse le collecteur de résidus la fermer
+local database = r:dbacquire("mod_dbd")
+database = nil -- on coupe le lien
+collectgarbage() -- fermeture de la connexion par le collecteur de résidus</pre>
+
+
+ <h3><a name="database_caveat" id="database_caveat">Précautions à prendre lorsque l'on travaille avec les bases
+de données</a></h3>
+
+ <p>Bien que les fonctions <code>query</code> et <code>run</code>
+soient toujours disponibles, il est recommandé d'utiliser des requêtes
+préparées chaque fois que possible, afin d'une part d'optimiser les
+performances (si votre connexion reste longtemps en vie), et d'autre part
+minimiser le risque d'attaques par injection SQL. Les fonctions
+<code>run</code> et <code>query</code> ne doivent être utilisées que
+lorsque la requête ne contient pas de variables (requête statique). Dans
+le cas des requêtes dynamiques, utilisez <code>db:prepare</code> ou
+<code>db:prepared</code>.
</p>
+
</div>
</div>
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Macro" id="Macro"><Macro></a> <a name="macro" id="macro">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define a configuration file macro</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>
+<Macro <var>name</var> [<var>par1</var> .. <var>parN</var>]>
+... </Macro></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
+</table>
+ <p>The <code class="directive">Macro</code> directive controls the definition of
+ a macro within the server runtime configuration files.
+ The first argument is the name of the macro.
+ Other arguments are parameters to the macro. It is good practice to prefix
+ parameter names with any of '<code>$%@</code>', and not macro names
+ with such characters.
+ </p>
+
+ <pre class="prettyprint lang-config"><Macro LocalAccessPolicy>
+ Require ip 10.2.16.0/24
+</Macro>
+
+<Macro RestrictedAccessPolicy $ipnumbers>
+ Require ip $ipnumbers
+</Macro></pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="UndefMacro" id="UndefMacro">UndefMacro</a> <a name="undefmacro" id="undefmacro">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Undefine a macro</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UndefMacro <var>name</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
+</table>
+ <p>The <code class="directive">UndefMacro</code> directive undefines a macro
+ which has been defined before hand.</p>
+
+ <pre class="prettyprint lang-config">UndefMacro LocalAccessPolicy
+UndefMacro RestrictedAccessPolicy</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Use" id="Use">Use</a> <a name="use" id="use">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use a macro</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Use <var>name</var> [<var>value1</var> ... <var>valueN</var>]
+</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
+</table>
+ <p>The <code class="directive">Use</code> directive controls the use of a macro.
+ The specified macro is expanded. It must be given the same number of
+ arguments as in the macro definition. The provided values are
+ associated to their corresponding initial parameters and are substituted
+ before processing.</p>
+
+ <pre class="prettyprint lang-config">Use LocalAccessPolicy
+...
+Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"</pre>
+
+
+ <p>is equivalent, with the macros defined above, to:</p>
+
+ <pre class="prettyprint lang-config">Require ip 10.2.16.0/24
+...
+Require ip 192.54.172.0/24 192.54.148.0/24</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">Usage</a></h2>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Macro" id="Macro"><Macro></a> <a name="macro" id="macro">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define a configuration file macro</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>
-<Macro <var>name</var> [<var>par1</var> .. <var>parN</var>]>
-... </Macro></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
-</table>
- <p>The <code class="directive">Macro</code> directive controls the definition of
- a macro within the server runtime configuration files.
- The first argument is the name of the macro.
- Other arguments are parameters to the macro. It is good practice to prefix
- parameter names with any of '<code>$%@</code>', and not macro names
- with such characters.
- </p>
-
- <pre class="prettyprint lang-config"><Macro LocalAccessPolicy>
- Require ip 10.2.16.0/24
-</Macro>
-
-<Macro RestrictedAccessPolicy $ipnumbers>
- Require ip $ipnumbers
-</Macro></pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UndefMacro" id="UndefMacro">UndefMacro</a> <a name="undefmacro" id="undefmacro">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Undefine a macro</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UndefMacro <var>name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
-</table>
- <p>The <code class="directive">UndefMacro</code> directive undefines a macro
- which has been defined before hand.</p>
-
- <pre class="prettyprint lang-config">UndefMacro LocalAccessPolicy
-UndefMacro RestrictedAccessPolicy</pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Use" id="Use">Use</a> <a name="use" id="use">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use a macro</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Use <var>name</var> [<var>value1</var> ... <var>valueN</var>]
-</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
-</table>
- <p>The <code class="directive">Use</code> directive controls the use of a macro.
- The specified macro is expanded. It must be given the same number of
- arguments as in the macro definition. The provided values are
- associated to their corresponding initial parameters and are substituted
- before processing.</p>
-
- <pre class="prettyprint lang-config">Use LocalAccessPolicy
-...
-Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"</pre>
-
-
- <p>is equivalent, with the macros defined above, to:</p>
-
- <pre class="prettyprint lang-config">Require ip 10.2.16.0/24
-...
-Require ip 192.54.172.0/24 192.54.148.0/24</pre>
-
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Exemples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="macro" id="macro">Directive</a> <a name="Macro" id="Macro"><Macro></a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définition d'une macro dans un fichier de configuration</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>
+<Macro <var>nom</var> [<var>par1</var> .. <var>parN</var>]>
+... </Macro></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
+</table>
+ <p>La directive <code class="directive">Macro</code> permet de définir une macro
+ dans un fichier de configuration Apache. Le premier argument est le nom
+ de la macro, et les arguments suivants sont les paramètres. Il
+ est de bon aloi de préfixer les noms des paramètres d'une macro
+ avec un caractère parmi '<code>$%@</code>', et d'éviter d'en faire
+ de même avec les noms de macros.
+ </p>
+
+ <pre class="prettyprint lang-config"><Macro LocalAccessPolicy>
+ Require ip 10.2.16.0/24
+</Macro>
+
+<Macro RestrictedAccessPolicy $ipnumbers>
+ Require ip $ipnumbers
+</Macro></pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="undefmacro" id="undefmacro">Directive</a> <a name="UndefMacro" id="UndefMacro">UndefMacro</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Undefine a macro</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>UndefMacro <var>name</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
+</table><p>La documentation de cette directive
+ n'a pas encore t traduite. Veuillez vous reporter la version
+ en langue anglaise.</p></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="use" id="use">Directive</a> <a name="Use" id="Use">Use</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilisation d'une macro</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Use <var>nom</var> [<var>valeur1</var> ... <var>valeurN</var>]
+</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
+</table>
+ <p> La directive <code class="directive">Use</code> permet d'utiliser une macro.
+ La macro considérée est expansée. Son nombre d'arguments doit être égal au
+ nombre de paramètres précisés dans sa définition. Les valeurs passées en
+ argument sont attribuées aux paramètres correspondants et
+ substituées avant l'interprétation du texte de la macro.</p>
+
+ <pre class="prettyprint lang-config">Use LocalAccessPolicy
+...
+Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"</pre>
+
+
+ <p>est équivalent, avec les macros définies ci-dessus à :</p>
+
+ <pre class="prettyprint lang-config">Require ip 10.2.16.0/24
+...
+Require ip 192.54.172.0/24 192.54.148.0/24</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">Utilisation</a></h2>
<p>On définit une macro à l'aide des blocs <code class="directive"><Macro></code> qui contiennent la portion de votre
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="macro" id="macro">Directive</a> <a name="Macro" id="Macro"><Macro></a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définition d'une macro dans un fichier de configuration</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>
-<Macro <var>nom</var> [<var>par1</var> .. <var>parN</var>]>
-... </Macro></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
-</table>
- <p>La directive <code class="directive">Macro</code> permet de définir une macro
- dans un fichier de configuration Apache. Le premier argument est le nom
- de la macro, et les arguments suivants sont les paramètres. Il
- est de bon aloi de préfixer les noms des paramètres d'une macro
- avec un caractère parmi '<code>$%@</code>', et d'éviter d'en faire
- de même avec les noms de macros.
- </p>
-
- <pre class="prettyprint lang-config"><Macro LocalAccessPolicy>
- Require ip 10.2.16.0/24
-</Macro>
-
-<Macro RestrictedAccessPolicy $ipnumbers>
- Require ip $ipnumbers
-</Macro></pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="undefmacro" id="undefmacro">Directive</a> <a name="UndefMacro" id="UndefMacro">UndefMacro</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Undefine a macro</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>UndefMacro <var>name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
-</table><p>La documentation de cette directive
- n'a pas encore t traduite. Veuillez vous reporter la version
- en langue anglaise.</p></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="use" id="use">Directive</a> <a name="Use" id="Use">Use</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilisation d'une macro</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Use <var>nom</var> [<var>valeur1</var> ... <var>valeurN</var>]
-</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
-</table>
- <p> La directive <code class="directive">Use</code> permet d'utiliser une macro.
- La macro considérée est expansée. Son nombre d'arguments doit être égal au
- nombre de paramètres précisés dans sa définition. Les valeurs passées en
- argument sont attribuées aux paramètres correspondants et
- substituées avant l'interprétation du texte de la macro.</p>
-
- <pre class="prettyprint lang-config">Use LocalAccessPolicy
-...
-Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"</pre>
-
-
- <p>est équivalent, avec les macros définies ci-dessus à :</p>
-
- <pre class="prettyprint lang-config">Require ip 10.2.16.0/24
-...
-Require ip 192.54.172.0/24 192.54.148.0/24</pre>
-
-
</div>
</div>
<div class="bottomlang">
<li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multipleext" id="multipleext">Files with Multiple Extensions</a></h2>
- <p>Files can have more than one extension; the order of the
- extensions is <em>normally</em> irrelevant. For example, if the
- file <code>welcome.html.fr</code> maps onto content type
- <code>text/html</code> and language French then the file
- <code>welcome.fr.html</code> will map onto exactly the same
- information. If more than one extension is given that maps onto
- the same type of metadata, then the one to the right will
- be used, except for languages and content encodings. For example,
- if <code>.gif</code> maps to the <a class="glossarylink" href="../glossary.html#media-type" title="see glossary">media-type</a>
- <code>image/gif</code> and <code>.html</code> maps to the
- media-type <code>text/html</code>, then the file
- <code>welcome.gif.html</code> will be associated with the
- media-type <code>text/html</code>.</p>
-
- <p><a href="#charset-lang">Languages</a> and <a href="#contentencoding">content encodings</a> are treated accumulative, because one can assign
- more than one language or encoding to a particular resource. For example,
- the file <code>welcome.html.en.de</code> will be delivered with
- <code>Content-Language: en, de</code> and <code>Content-Type:
- text/html</code>.</p>
-
- <p>Care should be taken when a file with multiple extensions
- gets associated with both a <a class="glossarylink" href="../glossary.html#media-type" title="see glossary">media-type</a>
- and a handler. This will
- usually result in the request being handled by the module associated
- with the handler. For example, if the <code>.imap</code>
- extension is mapped to the handler <code>imap-file</code> (from
- <code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code>) and the <code>.html</code> extension is
- mapped to the media-type <code>text/html</code>, then the file
- <code>world.imap.html</code> will be associated with both the
- <code>imap-file</code> handler and <code>text/html</code> media-type.
- When it is processed, the <code>imap-file</code> handler will be used,
- and so it will be treated as a <code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code> imagemap
- file.</p>
-
- <p>If you would prefer only the last dot-separated part of the
- filename to be mapped to a particular piece of meta-data, then do
- not use the <code>Add*</code> directives. For example, if you wish
- to have the file <code>foo.html.cgi</code> processed as a CGI
- script, but not the file <code>bar.cgi.html</code>, then instead
- of using <code>AddHandler cgi-script .cgi</code>, use</p>
-
- <div class="example"><h3>Configure handler based on final extension only</h3><pre class="prettyprint lang-config"><FilesMatch \.cgi$>
- SetHandler cgi-script
-</FilesMatch></pre>
-</div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="contentencoding" id="contentencoding">Content encoding</a></h2>
- <p>A file of a particular <a class="glossarylink" href="../glossary.html#media-type" title="see glossary">media-type</a> can additionally be encoded a
- particular way to simplify transmission over the Internet.
- While this usually will refer to compression, such as
- <code>gzip</code>, it can also refer to encryption, such a
- <code>pgp</code> or to an encoding such as UUencoding, which is
- designed for transmitting a binary file in an ASCII (text)
- format.</p>
-
- <p>The <a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1
- RFC</a>, section 14.11 puts it this way:</p>
-
- <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
- <p>The Content-Encoding entity-header field is used as a modifier to
- the media-type. When present, its value indicates what additional
- content codings have been applied to the entity-body, and thus what
- decoding mechanisms must be applied in order to obtain the media-type
- referenced by the Content-Type header field. Content-Encoding is
- primarily used to allow a document to be compressed without losing
- the identity of its underlying media type.</p>
- </blockquote>
-
- <p>By using more than one file extension (see <a href="#multipleext">section above about multiple file
- extensions</a>), you can indicate that a file is of a
- particular <em>type</em>, and also has a particular
- <em>encoding</em>. </p>
-
- <p>For example, you may have a file which is a Microsoft Word
- document, which is pkzipped to reduce its size. If the
- <code>.doc</code> extension is associated with the Microsoft
- Word file type, and the <code>.zip</code> extension is
- associated with the pkzip file encoding, then the file
- <code>Resume.doc.zip</code> would be known to be a pkzip'ed Word
- document.</p>
-
- <p>Apache sends a <code>Content-encoding</code> header with the
- resource, in order to tell the client browser about the
- encoding method.</p>
-
- <pre class="prettyprint lang-config">Content-encoding: pkzip</pre>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="charset-lang" id="charset-lang">Character sets and languages</a></h2>
- <p>In addition to file type and the file encoding,
- another important piece of information is what language a
- particular document is in, and in what character set the file
- should be displayed. For example, the document might be written
- in the Vietnamese alphabet, or in Cyrillic, and should be
- displayed as such. This information, also, is transmitted in
- HTTP headers.</p>
-
- <p>The character set, language, encoding and mime type are all
- used in the process of content negotiation (See
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code>) to determine
- which document to give to the client, when there are
- alternative documents in more than one character set, language,
- encoding or mime type. All filename extensions associations
- created with <code class="directive"><a href="#addcharset">AddCharset</a></code>,
- <code class="directive"><a href="#addencoding">AddEncoding</a></code>, <code class="directive"><a href="#addlanguage">AddLanguage</a></code> and <code class="directive"><a href="#addtype">AddType</a></code> directives
- (and extensions listed in the <code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code>) participate in this select process.
- Filename extensions that are only associated using the <code class="directive"><a href="#addhandler">AddHandler</a></code>, <code class="directive"><a href="#addinputfilter">AddInputFilter</a></code> or <code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code> directives may be included or excluded
- from matching by using the <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> directive.</p>
-
- <h3><a name="charset" id="charset">Charset</a></h3>
- <p>To convey this further information, Apache optionally sends
- a <code>Content-Language</code> header, to specify the language
- that the document is in, and can append additional information
- onto the <code>Content-Type</code> header to indicate the
- particular character set that should be used to correctly
- render the information.</p>
-
- <div class="example"><p><code>
-Content-Language: en, fr
-Content-Type: text/plain; charset=ISO-8859-1
- </code></p></div>
-
- <p>The language specification is the two-letter abbreviation
- for the language. The <code>charset</code> is the name of the
- particular character set which should be used.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddCharset" id="AddCharset">AddCharset</a> <a name="addcharset" id="addcharset">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps the given filename extensions to the specified content
<ul>
<li><code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="multipleext" id="multipleext">Files with Multiple Extensions</a></h2>
+ <p>Files can have more than one extension; the order of the
+ extensions is <em>normally</em> irrelevant. For example, if the
+ file <code>welcome.html.fr</code> maps onto content type
+ <code>text/html</code> and language French then the file
+ <code>welcome.fr.html</code> will map onto exactly the same
+ information. If more than one extension is given that maps onto
+ the same type of metadata, then the one to the right will
+ be used, except for languages and content encodings. For example,
+ if <code>.gif</code> maps to the <a class="glossarylink" href="../glossary.html#media-type" title="see glossary">media-type</a>
+ <code>image/gif</code> and <code>.html</code> maps to the
+ media-type <code>text/html</code>, then the file
+ <code>welcome.gif.html</code> will be associated with the
+ media-type <code>text/html</code>.</p>
+
+ <p><a href="#charset-lang">Languages</a> and <a href="#contentencoding">content encodings</a> are treated accumulative, because one can assign
+ more than one language or encoding to a particular resource. For example,
+ the file <code>welcome.html.en.de</code> will be delivered with
+ <code>Content-Language: en, de</code> and <code>Content-Type:
+ text/html</code>.</p>
+
+ <p>Care should be taken when a file with multiple extensions
+ gets associated with both a <a class="glossarylink" href="../glossary.html#media-type" title="see glossary">media-type</a>
+ and a handler. This will
+ usually result in the request being handled by the module associated
+ with the handler. For example, if the <code>.imap</code>
+ extension is mapped to the handler <code>imap-file</code> (from
+ <code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code>) and the <code>.html</code> extension is
+ mapped to the media-type <code>text/html</code>, then the file
+ <code>world.imap.html</code> will be associated with both the
+ <code>imap-file</code> handler and <code>text/html</code> media-type.
+ When it is processed, the <code>imap-file</code> handler will be used,
+ and so it will be treated as a <code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code> imagemap
+ file.</p>
+
+ <p>If you would prefer only the last dot-separated part of the
+ filename to be mapped to a particular piece of meta-data, then do
+ not use the <code>Add*</code> directives. For example, if you wish
+ to have the file <code>foo.html.cgi</code> processed as a CGI
+ script, but not the file <code>bar.cgi.html</code>, then instead
+ of using <code>AddHandler cgi-script .cgi</code>, use</p>
+
+ <div class="example"><h3>Configure handler based on final extension only</h3><pre class="prettyprint lang-config"><FilesMatch \.cgi$>
+ SetHandler cgi-script
+</FilesMatch></pre>
+</div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="contentencoding" id="contentencoding">Content encoding</a></h2>
+ <p>A file of a particular <a class="glossarylink" href="../glossary.html#media-type" title="see glossary">media-type</a> can additionally be encoded a
+ particular way to simplify transmission over the Internet.
+ While this usually will refer to compression, such as
+ <code>gzip</code>, it can also refer to encryption, such a
+ <code>pgp</code> or to an encoding such as UUencoding, which is
+ designed for transmitting a binary file in an ASCII (text)
+ format.</p>
+
+ <p>The <a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1
+ RFC</a>, section 14.11 puts it this way:</p>
+
+ <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
+ <p>The Content-Encoding entity-header field is used as a modifier to
+ the media-type. When present, its value indicates what additional
+ content codings have been applied to the entity-body, and thus what
+ decoding mechanisms must be applied in order to obtain the media-type
+ referenced by the Content-Type header field. Content-Encoding is
+ primarily used to allow a document to be compressed without losing
+ the identity of its underlying media type.</p>
+ </blockquote>
+
+ <p>By using more than one file extension (see <a href="#multipleext">section above about multiple file
+ extensions</a>), you can indicate that a file is of a
+ particular <em>type</em>, and also has a particular
+ <em>encoding</em>. </p>
+
+ <p>For example, you may have a file which is a Microsoft Word
+ document, which is pkzipped to reduce its size. If the
+ <code>.doc</code> extension is associated with the Microsoft
+ Word file type, and the <code>.zip</code> extension is
+ associated with the pkzip file encoding, then the file
+ <code>Resume.doc.zip</code> would be known to be a pkzip'ed Word
+ document.</p>
+
+ <p>Apache sends a <code>Content-encoding</code> header with the
+ resource, in order to tell the client browser about the
+ encoding method.</p>
+
+ <pre class="prettyprint lang-config">Content-encoding: pkzip</pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="charset-lang" id="charset-lang">Character sets and languages</a></h2>
+ <p>In addition to file type and the file encoding,
+ another important piece of information is what language a
+ particular document is in, and in what character set the file
+ should be displayed. For example, the document might be written
+ in the Vietnamese alphabet, or in Cyrillic, and should be
+ displayed as such. This information, also, is transmitted in
+ HTTP headers.</p>
+
+ <p>The character set, language, encoding and mime type are all
+ used in the process of content negotiation (See
+ <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code>) to determine
+ which document to give to the client, when there are
+ alternative documents in more than one character set, language,
+ encoding or mime type. All filename extensions associations
+ created with <code class="directive"><a href="#addcharset">AddCharset</a></code>,
+ <code class="directive"><a href="#addencoding">AddEncoding</a></code>, <code class="directive"><a href="#addlanguage">AddLanguage</a></code> and <code class="directive"><a href="#addtype">AddType</a></code> directives
+ (and extensions listed in the <code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code>) participate in this select process.
+ Filename extensions that are only associated using the <code class="directive"><a href="#addhandler">AddHandler</a></code>, <code class="directive"><a href="#addinputfilter">AddInputFilter</a></code> or <code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code> directives may be included or excluded
+ from matching by using the <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> directive.</p>
+
+ <h3><a name="charset" id="charset">Charset</a></h3>
+ <p>To convey this further information, Apache optionally sends
+ a <code>Content-Language</code> header, to specify the language
+ that the document is in, and can append additional information
+ onto the <code>Content-Type</code> header to indicate the
+ particular character set that should be used to correctly
+ render the information.</p>
+
+ <div class="example"><p><code>
+Content-Language: en, fr
+Content-Type: text/plain; charset=ISO-8859-1
+ </code></p></div>
+
+ <p>The language specification is the two-letter abbreviation
+ for the language. The <code>charset</code> is the name of the
+ particular character set which should be used.</p>
+
</div>
</div>
<div class="bottomlang">
<li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multipleext" id="multipleext">複数の拡張子のあるファイル</a></h2>
- <p>ファイルは複数の拡張子を持つことができ、拡張子の順番は<em>通常は</em>関係ありません。例えば、ファイル <code>welcome.html.fr</code>
- がコンテントタイプは <code>text/html</code>
- に、言語はフランス語にマップされる場合、<code>welcome.fr.html</code>
- もまったく同じ情報にマップされます。
- 同じメタ情報にマップされる拡張子が複数あるときには、言語と
- コンテントエンコーディングを除いて、
- 右側にあるものが使用されます。たとえば、<code>.gif</code> が <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a> <code>image/gif</code> にマップされ、<code>.html</code>
- が MIME タイプ <code>text/html</code>
- にマップされる場合は、ファイル <code>welcome.gif.html</code> は
- MIME タイプ <code>text/html</code> に関連付けられます。</p>
-
- <p>リソースに複数の言語やエンコーディングを関連付けること
- ができるため、
- <a href="#charset-lang">言語</a>と<a href="#contentencoding">コンテントエンコーディング</a>は前のものに追加されていきます。
- たとえば、ファイル <code>welcome.html.en.de</code> は
- <code>Content-Language: en, de</code> と <code>Content-Type:
- text/html</code> として送信されます。</p>
-
- <p>複数の拡張子のあるファイルが <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME
- タイプ</a>とハンドラの両方に関連付けられているときは注意する必要があります。
- その場合、普通はリクエストがハンドラに関連付けられた
- モジュールによって扱われることになります。たとえば、拡張子
- <code>.imap</code> が (<code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code> の) <code>imap-file</code>
- にマップされていて、<code>.html</code> が MIME タイプ <code>text/html</code>
- にマップされているときは、ファイル <code>world.imap.html</code> は
- <code>imap-file</code> ハンドラと <code>text/html</code> MIME
- タイプに関連付けられます。ファイルが処理されるときは <code>imap-file</code>
- ハンドラが使用されますので、そのファイルは <code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code>
- のイメージマップファイルとして扱われることになります。</p>
-
- <p>ファイル名のドット区切りでの最後の部分を使って、
- 特定の部分のメタデータにマッピングしたい場合は、
- <code>Add*</code> ディレクティブは使わないでください。
- たとえば <code>foo.html.cgi</code> を CGI スクリプトとして処理したいけれども、
- <code>bar.cgi.html</code> は CGI スクリプトとしては処理したくない場合、
- <code>AddHandler cgi-script .cgi</code> とする代わりに
- 次のようにしてください</p>
-
- <div class="example"><h3>Configure handler based on final extension only</h3><p><code>
- <FilesMatch \.cgi$>
- <span class="indent">
- SetHandler cgi-script
- </span>
- </FilesMatch>
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="contentencoding" id="contentencoding">コンテントエンコーディング</a></h2>
- <p>特定の <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a>
- のファイルはインターネットでの転送を簡単にするために、
- さらに符号化することができます。これは通常は <code>gzip</code> の
- ような圧縮のことを指しますが、<code>pgp</code> のような暗号化や、
- バイナリファイルを ASCII (テキスト) 形式で送るために考案された
- UUencoding のことを指すこともあります。</p>
-
- <p><a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1 RFC</a>
- 14.11 節では次のように記述されています。</p>
-
- <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
- <p>Content-Encoding エンティティヘッダフィールドはメディアタイプの
- 修飾子として使われます。それが存在していれば、値はエンティティボディに
- どの追加の符号化が適用されたかを示し、Content-Type ヘッダフィールドに
- 書かれているメディアタイプを得るためにどの復号機構を適用すべきか、も
- 示していることになります。Content-Encoding は主に、元のメディアタイプの
- 同一性を失うことなくドキュメントを圧縮することを可能にするために
- 使用されます。</p>
- </blockquote>
-
- <p>複数のファイル拡張子 (複数の拡張子については <a href="#multipleext">上の節</a> を参照) 使うことで、
- ファイルの<em>タイプ</em>や<em>エンコーディング</em>を指定することが
- できます。</p>
-
- <p>たとえば、Microsoft Word のドキュメントがあり、サイズを小さくするために
- pkzip されているとします。<code>.doc</code> 拡張子が Microsoft Word の
- ファイルタイプと関連付けられていて、<code>.zip</code> 拡張子が
- pkzip ファイルエンコーディングと関連付けられていると、ファイル
- <code>Resume.doc.zip</code> は pkzip された Word ドキュメントである
- ということがわかります。</p>
-
- <p>クライアントのブラウザにエンコーディング方法を知らせるために、
- Apache はリソースと共に <code>Content-Encoding</code> ヘッダを
- 送ります。</p>
-
- <div class="example"><p><code>Content-encoding: pkzip</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="charset-lang" id="charset-lang">文字セットと言語</a></h2>
- <p>ファイルタイプとファイルエンコーディングの他に重要な情報は
- ドキュメントの書かれている言語と、どの文字セットでファイルが表示
- されるべきか、というものです。たとえば、ドキュメントはベトナムの
- アルファベットやキリル文字で書かれていて、そのように表示される
- 必要があるかもしれません。この情報もまた、HTTP ヘッダで
- 送信されます。</p>
-
- <p>文字セット、言語、エンコーディング、mime タイプはすべて
- コンテントネゴシエーション (<code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> 参照)
- の最中に、複数の文字セット、言語、エンコーディング、MIME タイプからなる
- 代替物があるときにどのドキュメントをクライアントに送るのかを
- 決定するときに使われます。<code class="directive"><a href="#addcharset">AddCharset</a></code>,
- <code class="directive"><a href="#addencoding">AddEncoding</a></code>, <code class="directive"><a href="#addlanguage">AddLanguage</a></code>,
- <code class="directive"><a href="#addtype">AddType</a></code> の各ディレクティブで作成された
- 拡張子の関連付け (と <code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code> でリストされている
- 拡張子) がこの選択に参加します。<code class="directive"><a href="#addhandler">AddHandler</a></code>,
- <code class="directive"><a href="#addinputfilter">AddInputFilter</a></code>,
- <code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code> の
- 各ディレクティブでのみ関連付けられている拡張子は
- <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> ディレクティブを
- 使うことでマッチの
- 処理に含めることも外すこともできます。</p>
-
- <h3><a name="charset" id="charset">Charset</a></h3>
- <p>さらに情報を伝えるために、Apache は文書の言語を
- <code>Content-Language</code> ヘッダで送ることもあります。
- また、情報を正しく表示するために使用すべき文字セットを示すために
- <code>Conten-Type</code> ヘッダに情報を追加することもあります。</p>
-
- <div class="example"><p><code>
- Content-Language: en, fr<br />
- Content-Type: text/plain; charset=ISO-8859-1
- </code></p></div>
-
- <p>言語の指定は二文字の短縮形で行なわれます。<code>charset</code> が
- 使用すべき文字セットの名前です。</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddCharset" id="AddCharset">AddCharset</a> <a name="addcharset" id="addcharset">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>ファイル名の拡張子を指定された文字セットにマップする</td></tr>
<ul>
<li><code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="multipleext" id="multipleext">複数の拡張子のあるファイル</a></h2>
+ <p>ファイルは複数の拡張子を持つことができ、拡張子の順番は<em>通常は</em>関係ありません。例えば、ファイル <code>welcome.html.fr</code>
+ がコンテントタイプは <code>text/html</code>
+ に、言語はフランス語にマップされる場合、<code>welcome.fr.html</code>
+ もまったく同じ情報にマップされます。
+ 同じメタ情報にマップされる拡張子が複数あるときには、言語と
+ コンテントエンコーディングを除いて、
+ 右側にあるものが使用されます。たとえば、<code>.gif</code> が <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a> <code>image/gif</code> にマップされ、<code>.html</code>
+ が MIME タイプ <code>text/html</code>
+ にマップされる場合は、ファイル <code>welcome.gif.html</code> は
+ MIME タイプ <code>text/html</code> に関連付けられます。</p>
+
+ <p>リソースに複数の言語やエンコーディングを関連付けること
+ ができるため、
+ <a href="#charset-lang">言語</a>と<a href="#contentencoding">コンテントエンコーディング</a>は前のものに追加されていきます。
+ たとえば、ファイル <code>welcome.html.en.de</code> は
+ <code>Content-Language: en, de</code> と <code>Content-Type:
+ text/html</code> として送信されます。</p>
+
+ <p>複数の拡張子のあるファイルが <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME
+ タイプ</a>とハンドラの両方に関連付けられているときは注意する必要があります。
+ その場合、普通はリクエストがハンドラに関連付けられた
+ モジュールによって扱われることになります。たとえば、拡張子
+ <code>.imap</code> が (<code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code> の) <code>imap-file</code>
+ にマップされていて、<code>.html</code> が MIME タイプ <code>text/html</code>
+ にマップされているときは、ファイル <code>world.imap.html</code> は
+ <code>imap-file</code> ハンドラと <code>text/html</code> MIME
+ タイプに関連付けられます。ファイルが処理されるときは <code>imap-file</code>
+ ハンドラが使用されますので、そのファイルは <code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code>
+ のイメージマップファイルとして扱われることになります。</p>
+
+ <p>ファイル名のドット区切りでの最後の部分を使って、
+ 特定の部分のメタデータにマッピングしたい場合は、
+ <code>Add*</code> ディレクティブは使わないでください。
+ たとえば <code>foo.html.cgi</code> を CGI スクリプトとして処理したいけれども、
+ <code>bar.cgi.html</code> は CGI スクリプトとしては処理したくない場合、
+ <code>AddHandler cgi-script .cgi</code> とする代わりに
+ 次のようにしてください</p>
+
+ <div class="example"><h3>Configure handler based on final extension only</h3><p><code>
+ <FilesMatch \.cgi$>
+ <span class="indent">
+ SetHandler cgi-script
+ </span>
+ </FilesMatch>
+ </code></p></div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="contentencoding" id="contentencoding">コンテントエンコーディング</a></h2>
+ <p>特定の <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a>
+ のファイルはインターネットでの転送を簡単にするために、
+ さらに符号化することができます。これは通常は <code>gzip</code> の
+ ような圧縮のことを指しますが、<code>pgp</code> のような暗号化や、
+ バイナリファイルを ASCII (テキスト) 形式で送るために考案された
+ UUencoding のことを指すこともあります。</p>
+
+ <p><a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1 RFC</a>
+ 14.11 節では次のように記述されています。</p>
+
+ <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
+ <p>Content-Encoding エンティティヘッダフィールドはメディアタイプの
+ 修飾子として使われます。それが存在していれば、値はエンティティボディに
+ どの追加の符号化が適用されたかを示し、Content-Type ヘッダフィールドに
+ 書かれているメディアタイプを得るためにどの復号機構を適用すべきか、も
+ 示していることになります。Content-Encoding は主に、元のメディアタイプの
+ 同一性を失うことなくドキュメントを圧縮することを可能にするために
+ 使用されます。</p>
+ </blockquote>
+
+ <p>複数のファイル拡張子 (複数の拡張子については <a href="#multipleext">上の節</a> を参照) 使うことで、
+ ファイルの<em>タイプ</em>や<em>エンコーディング</em>を指定することが
+ できます。</p>
+
+ <p>たとえば、Microsoft Word のドキュメントがあり、サイズを小さくするために
+ pkzip されているとします。<code>.doc</code> 拡張子が Microsoft Word の
+ ファイルタイプと関連付けられていて、<code>.zip</code> 拡張子が
+ pkzip ファイルエンコーディングと関連付けられていると、ファイル
+ <code>Resume.doc.zip</code> は pkzip された Word ドキュメントである
+ ということがわかります。</p>
+
+ <p>クライアントのブラウザにエンコーディング方法を知らせるために、
+ Apache はリソースと共に <code>Content-Encoding</code> ヘッダを
+ 送ります。</p>
+
+ <div class="example"><p><code>Content-encoding: pkzip</code></p></div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="charset-lang" id="charset-lang">文字セットと言語</a></h2>
+ <p>ファイルタイプとファイルエンコーディングの他に重要な情報は
+ ドキュメントの書かれている言語と、どの文字セットでファイルが表示
+ されるべきか、というものです。たとえば、ドキュメントはベトナムの
+ アルファベットやキリル文字で書かれていて、そのように表示される
+ 必要があるかもしれません。この情報もまた、HTTP ヘッダで
+ 送信されます。</p>
+
+ <p>文字セット、言語、エンコーディング、mime タイプはすべて
+ コンテントネゴシエーション (<code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> 参照)
+ の最中に、複数の文字セット、言語、エンコーディング、MIME タイプからなる
+ 代替物があるときにどのドキュメントをクライアントに送るのかを
+ 決定するときに使われます。<code class="directive"><a href="#addcharset">AddCharset</a></code>,
+ <code class="directive"><a href="#addencoding">AddEncoding</a></code>, <code class="directive"><a href="#addlanguage">AddLanguage</a></code>,
+ <code class="directive"><a href="#addtype">AddType</a></code> の各ディレクティブで作成された
+ 拡張子の関連付け (と <code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code> でリストされている
+ 拡張子) がこの選択に参加します。<code class="directive"><a href="#addhandler">AddHandler</a></code>,
+ <code class="directive"><a href="#addinputfilter">AddInputFilter</a></code>,
+ <code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code> の
+ 各ディレクティブでのみ関連付けられている拡張子は
+ <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> ディレクティブを
+ 使うことでマッチの
+ 処理に含めることも外すこともできます。</p>
+
+ <h3><a name="charset" id="charset">Charset</a></h3>
+ <p>さらに情報を伝えるために、Apache は文書の言語を
+ <code>Content-Language</code> ヘッダで送ることもあります。
+ また、情報を正しく表示するために使用すべき文字セットを示すために
+ <code>Conten-Type</code> ヘッダに情報を追加することもあります。</p>
+
+ <div class="example"><p><code>
+ Content-Language: en, fr<br />
+ Content-Type: text/plain; charset=ISO-8859-1
+ </code></p></div>
+
+ <p>言語の指定は二文字の短縮形で行なわれます。<code>charset</code> が
+ 使用すべき文字セットの名前です。</p>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#notes">Notes</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="MimeMagicFile" id="MimeMagicFile">MimeMagicFile</a> <a name="mimemagicfile" id="mimemagicfile">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable MIME-type determination based on file contents
+using the specified magic file</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MimeMagicFile <var>file-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime_magic</td></tr>
+</table>
+ <p>The <code class="directive">MimeMagicFile</code> directive can be used to
+ enable this module, the default file is distributed at
+ <code>conf/magic</code>. Non-rooted paths are relative to the
+ <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. Virtual hosts will use
+ the same file as the main server unless a more specific setting is
+ used, in which case the more specific setting overrides the main
+ server's file.</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">MimeMagicFile conf/magic</pre>
+</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="format" id="format">Format of the Magic File</a></h2>
used here.</li>
</ul>
</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MimeMagicFile" id="MimeMagicFile">MimeMagicFile</a> <a name="mimemagicfile" id="mimemagicfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable MIME-type determination based on file contents
-using the specified magic file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MimeMagicFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime_magic</td></tr>
-</table>
- <p>The <code class="directive">MimeMagicFile</code> directive can be used to
- enable this module, the default file is distributed at
- <code>conf/magic</code>. Non-rooted paths are relative to the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. Virtual hosts will use
- the same file as the main server unless a more specific setting is
- used, in which case the more specific setting overrides the main
- server's file.</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">MimeMagicFile conf/magic</pre>
-</div>
-
</div>
</div>
<div class="bottomlang">
<li><a href="../env.html">Environment Variables</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="CacheNegotiatedDocs" id="CacheNegotiatedDocs">CacheNegotiatedDocs</a> <a name="cachenegotiateddocs" id="cachenegotiateddocs">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allows content-negotiated documents to be
+cached by proxy servers</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheNegotiatedDocs On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheNegotiatedDocs Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
+</table>
+ <p>If set, this directive allows content-negotiated documents
+ to be cached by proxy servers. This could mean that clients
+ behind those proxys could retrieve versions of the documents
+ that are not the best match for their abilities, but it will
+ make caching more efficient.</p>
+
+ <p>This directive only applies to requests which come from
+ HTTP/1.0 browsers. HTTP/1.1 provides much better control over
+ the caching of negotiated documents, and this directive has no
+ effect in responses to HTTP/1.1 requests.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ForceLanguagePriority" id="ForceLanguagePriority">ForceLanguagePriority</a> <a name="forcelanguagepriority" id="forcelanguagepriority">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action to take if a single acceptable document is not
+found</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ForceLanguagePriority Prefer</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
+</table>
+ <p>The <code class="directive">ForceLanguagePriority</code> directive uses
+ the given <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> to satisfy
+ negotiation where the server could otherwise not return a single
+ matching document.</p>
+
+ <p><code>ForceLanguagePriority Prefer</code> uses
+ <code>LanguagePriority</code> to serve a one valid result, rather
+ than returning an HTTP result 300 (MULTIPLE CHOICES) when there
+ are several equally valid choices. If the directives below were
+ given, and the user's <code>Accept-Language</code> header assigned
+ <code>en</code> and <code>de</code> each as quality <code>.500</code>
+ (equally acceptable) then the first matching variant, <code>en</code>,
+ will be served.</p>
+
+ <pre class="prettyprint lang-config">LanguagePriority en fr de
+ForceLanguagePriority Prefer</pre>
+
+
+ <p><code>ForceLanguagePriority Fallback</code> uses
+ <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> to
+ serve a valid result, rather than returning an HTTP result 406
+ (NOT ACCEPTABLE). If the directives below were given, and the user's
+ <code>Accept-Language</code> only permitted an <code>es</code>
+ language response, but such a variant isn't found, then the first
+ variant from the <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> list below will be served.</p>
+
+ <pre class="prettyprint lang-config">LanguagePriority en fr de
+ForceLanguagePriority Fallback</pre>
+
+
+ <p>Both options, <code>Prefer</code> and <code>Fallback</code>, may be
+ specified, so either the first matching variant from <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> will be served if
+ more than one variant is acceptable, or first available document will
+ be served if none of the variants matched the client's acceptable list
+ of languages.</p>
+
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LanguagePriority" id="LanguagePriority">LanguagePriority</a> <a name="languagepriority" id="languagepriority">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The precendence of language variants for cases where
+the client does not express a preference</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
+...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
+</table>
+ <p>The <code class="directive">LanguagePriority</code> sets the precedence
+ of language variants for the case where the client does not
+ express a preference, when handling a Multiviews request. The list
+ of <var>MIME-lang</var> are in order of decreasing preference.</p>
+
+ <pre class="prettyprint lang-config">LanguagePriority en fr de</pre>
+
+
+ <p>For a request for <code>foo.html</code>, where
+ <code>foo.html.fr</code> and <code>foo.html.de</code> both
+ existed, but the browser did not express a language preference,
+ then <code>foo.html.fr</code> would be returned.</p>
+
+ <p>Note that this directive only has an effect if a 'best'
+ language cannot be determined by any other means or the <code class="directive"><a href="#forcelanguagepriority">ForceLanguagePriority</a></code> directive
+ is not <code>None</code>. In general, the client determines the
+ language preference, not the server.</p>
+
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="typemaps" id="typemaps">Type maps</a></h2>
<p>A type map has a format similar to RFC822 mail headers. It
that do not have content negotiation meta-information assigned
to them when choosing files.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheNegotiatedDocs" id="CacheNegotiatedDocs">CacheNegotiatedDocs</a> <a name="cachenegotiateddocs" id="cachenegotiateddocs">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allows content-negotiated documents to be
-cached by proxy servers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheNegotiatedDocs On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheNegotiatedDocs Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p>If set, this directive allows content-negotiated documents
- to be cached by proxy servers. This could mean that clients
- behind those proxys could retrieve versions of the documents
- that are not the best match for their abilities, but it will
- make caching more efficient.</p>
-
- <p>This directive only applies to requests which come from
- HTTP/1.0 browsers. HTTP/1.1 provides much better control over
- the caching of negotiated documents, and this directive has no
- effect in responses to HTTP/1.1 requests.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForceLanguagePriority" id="ForceLanguagePriority">ForceLanguagePriority</a> <a name="forcelanguagepriority" id="forcelanguagepriority">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action to take if a single acceptable document is not
-found</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ForceLanguagePriority Prefer</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p>The <code class="directive">ForceLanguagePriority</code> directive uses
- the given <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> to satisfy
- negotiation where the server could otherwise not return a single
- matching document.</p>
-
- <p><code>ForceLanguagePriority Prefer</code> uses
- <code>LanguagePriority</code> to serve a one valid result, rather
- than returning an HTTP result 300 (MULTIPLE CHOICES) when there
- are several equally valid choices. If the directives below were
- given, and the user's <code>Accept-Language</code> header assigned
- <code>en</code> and <code>de</code> each as quality <code>.500</code>
- (equally acceptable) then the first matching variant, <code>en</code>,
- will be served.</p>
-
- <pre class="prettyprint lang-config">LanguagePriority en fr de
-ForceLanguagePriority Prefer</pre>
-
-
- <p><code>ForceLanguagePriority Fallback</code> uses
- <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> to
- serve a valid result, rather than returning an HTTP result 406
- (NOT ACCEPTABLE). If the directives below were given, and the user's
- <code>Accept-Language</code> only permitted an <code>es</code>
- language response, but such a variant isn't found, then the first
- variant from the <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> list below will be served.</p>
-
- <pre class="prettyprint lang-config">LanguagePriority en fr de
-ForceLanguagePriority Fallback</pre>
-
-
- <p>Both options, <code>Prefer</code> and <code>Fallback</code>, may be
- specified, so either the first matching variant from <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> will be served if
- more than one variant is acceptable, or first available document will
- be served if none of the variants matched the client's acceptable list
- of languages.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LanguagePriority" id="LanguagePriority">LanguagePriority</a> <a name="languagepriority" id="languagepriority">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The precendence of language variants for cases where
-the client does not express a preference</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p>The <code class="directive">LanguagePriority</code> sets the precedence
- of language variants for the case where the client does not
- express a preference, when handling a Multiviews request. The list
- of <var>MIME-lang</var> are in order of decreasing preference.</p>
-
- <pre class="prettyprint lang-config">LanguagePriority en fr de</pre>
-
-
- <p>For a request for <code>foo.html</code>, where
- <code>foo.html.fr</code> and <code>foo.html.de</code> both
- existed, but the browser did not express a language preference,
- then <code>foo.html.fr</code> would be returned.</p>
-
- <p>Note that this directive only has an effect if a 'best'
- language cannot be determined by any other means or the <code class="directive"><a href="#forcelanguagepriority">ForceLanguagePriority</a></code> directive
- is not <code>None</code>. In general, the client determines the
- language preference, not the server.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_negotiation.html" title="English"> en </a> |
<li><a href="../env.html">Variables d'environnement</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="cachenegotiateddocs" id="cachenegotiateddocs">Directive</a> <a name="CacheNegotiatedDocs" id="CacheNegotiatedDocs">CacheNegotiatedDocs</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Permet la mise en cache au niveau des serveurs mandataires
+des documents dont le contenu a été négocié</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheNegotiatedDocs On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>CacheNegotiatedDocs Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
+</table>
+ <p>Si elle est définie à "on", cette directive permet la mise en
+ cache au niveau des serveurs mandataires des documents dont le
+ contenu a été négocié. Le processus de mise en cache sera alors plus
+ efficace, mais des clients se trouvant derrière le mandataire
+ seront alors susceptibles de se voir servir des versions de
+ documents qui ne correspondent pas forcément à leurs attentes.</p>
+
+ <p>Cette directive ne s'applique qu'aux requêtes en provenance de
+ navigateurs HTTP/1.0. HTTP/1.1 fournit un bien meilleur contrôle de
+ la mise en cache des documents au contenu négocié, et cette
+ directive n'a aucun effet sur les réponses aux requêtes
+ HTTP/1.1.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="forcelanguagepriority" id="forcelanguagepriority">Directive</a> <a name="ForceLanguagePriority" id="ForceLanguagePriority">ForceLanguagePriority</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action à entreprendre si un document acceptable unique
+n'est pas trouvé</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ForceLanguagePriority Prefer</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
+</table>
+ <p>La directive <code class="directive">ForceLanguagePriority</code> utilise
+ le langage défini par la directive <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> pour terminer
+ la négociation lorsque le serveur n'est pas en mesure de trouver une
+ solution satisfaisante unique.</p>
+
+ <p><code>ForceLanguagePriority Prefer</code> utilise la directive
+ <code>LanguagePriority</code> pour servir le résultat d'un choix
+ unique, au lieu de renvoyer un résultat HTTP 300 (MULTIPLE CHOICES),
+ lorsque que plusieurs choix équivalents sont disponibles. Par
+ exemple, avec les deux directives ci-dessous, si l'en-tête
+ <code>Accept-Language</code> de l'utilisateur assigne à
+ <code>en</code> et <code>de</code> une qualité de <code>.500</code>
+ (les deux langages sont également acceptables), alors c'est la
+ première variante acceptable de langue <code>en</code> qui sera
+ servie.</p>
+
+ <pre class="prettyprint lang-config">LanguagePriority en fr de
+ForceLanguagePriority Prefer</pre>
+
+
+ <p><code>ForceLanguagePriority Fallback</code> utilise la directive
+ <code class="directive"><a href="#languagepriority">LanguagePriority</a></code>
+ pour servir un résultat valide, au lieu de renvoyer un résultat HTTP
+ 406 (NOT ACCEPTABLE). Avec les deux directives ci-dessous, si
+ l'en-tête <code>Accept-Language</code> de l'utilisateur ne mentionne
+ que les réponses de langage <code>es</code>, et si aucune variante
+ dans cette langue n'est trouvée, c'est la première variante de la
+ liste définie par la directive <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> qui sera servie.</p>
+
+ <pre class="prettyprint lang-config">LanguagePriority en fr de
+ForceLanguagePriority Fallback</pre>
+
+
+ <p>Les deux options, <code>Prefer</code> et <code>Fallback</code>,
+ peuvent être spécifiées, de façon à ce que la variante servie soit
+ la première variante qui convient définie par la directive
+ <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> si
+ plusieurs variantes sont également acceptables, ou le premier
+ document disponible si aucune variante ne convient à la liste de
+ langages acceptables fournie par le client.</p>
+
+<h3>Voir aussi</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="languagepriority" id="languagepriority">Directive</a> <a name="LanguagePriority" id="LanguagePriority">LanguagePriority</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'ordre de priorité des variantes de langages pour les
+cas où le client n'a pas formulé de préférences</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LanguagePriority <var>langage-MIME</var> [<var>langage-MIME</var>]
+...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
+</table>
+ <p>La directive <code class="directive">LanguagePriority</code> permet de
+ définir, au cours du traitement d'une requête Multivues, l'ordre de
+ priorité des variantes de langages pour les cas
+ où le client n'a pas formulé de préférences. La liste énumère les
+ <var>langages-MIME</var> dans un ordre de préférences
+ décroissantes.</p>
+
+ <pre class="prettyprint lang-config">LanguagePriority en fr de</pre>
+
+
+ <p>Dans le cas d'une requête pour <code>foo.html</code>, si
+ <code>foo.html.fr</code> et <code>foo.html.de</code> existent, et si
+ le client n'a pas formulé de préférences, c'est le fichier
+ <code>foo.html.fr</code> qui sera renvoyé.</p>
+
+ <p>Notez que cette directive n'a d'effet que si le 'meilleur'
+ langage n'a pas pu être déterminé d'une autre manière ou si la
+ valeur de la directive <code class="directive"><a href="#forcelanguagepriority">ForceLanguagePriority</a></code> est
+ différente de <code>None</code>. En général, c'est le client qui
+ détermine le langage préféré, non le serveur.</p>
+
+<h3>Voir aussi</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="typemaps" id="typemaps">Tables de correspondances de types</a></h2>
<p>Une table de correspondances de types possède un format similaire
prendre en compte les fichiers qui ne comportent pas de métadonnées
de négociation de contenu lors du choix du fichier à servir.</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="cachenegotiateddocs" id="cachenegotiateddocs">Directive</a> <a name="CacheNegotiatedDocs" id="CacheNegotiatedDocs">CacheNegotiatedDocs</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Permet la mise en cache au niveau des serveurs mandataires
-des documents dont le contenu a été négocié</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheNegotiatedDocs On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>CacheNegotiatedDocs Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p>Si elle est définie à "on", cette directive permet la mise en
- cache au niveau des serveurs mandataires des documents dont le
- contenu a été négocié. Le processus de mise en cache sera alors plus
- efficace, mais des clients se trouvant derrière le mandataire
- seront alors susceptibles de se voir servir des versions de
- documents qui ne correspondent pas forcément à leurs attentes.</p>
-
- <p>Cette directive ne s'applique qu'aux requêtes en provenance de
- navigateurs HTTP/1.0. HTTP/1.1 fournit un bien meilleur contrôle de
- la mise en cache des documents au contenu négocié, et cette
- directive n'a aucun effet sur les réponses aux requêtes
- HTTP/1.1.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="forcelanguagepriority" id="forcelanguagepriority">Directive</a> <a name="ForceLanguagePriority" id="ForceLanguagePriority">ForceLanguagePriority</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action à entreprendre si un document acceptable unique
-n'est pas trouvé</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ForceLanguagePriority Prefer</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p>La directive <code class="directive">ForceLanguagePriority</code> utilise
- le langage défini par la directive <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> pour terminer
- la négociation lorsque le serveur n'est pas en mesure de trouver une
- solution satisfaisante unique.</p>
-
- <p><code>ForceLanguagePriority Prefer</code> utilise la directive
- <code>LanguagePriority</code> pour servir le résultat d'un choix
- unique, au lieu de renvoyer un résultat HTTP 300 (MULTIPLE CHOICES),
- lorsque que plusieurs choix équivalents sont disponibles. Par
- exemple, avec les deux directives ci-dessous, si l'en-tête
- <code>Accept-Language</code> de l'utilisateur assigne à
- <code>en</code> et <code>de</code> une qualité de <code>.500</code>
- (les deux langages sont également acceptables), alors c'est la
- première variante acceptable de langue <code>en</code> qui sera
- servie.</p>
-
- <pre class="prettyprint lang-config">LanguagePriority en fr de
-ForceLanguagePriority Prefer</pre>
-
-
- <p><code>ForceLanguagePriority Fallback</code> utilise la directive
- <code class="directive"><a href="#languagepriority">LanguagePriority</a></code>
- pour servir un résultat valide, au lieu de renvoyer un résultat HTTP
- 406 (NOT ACCEPTABLE). Avec les deux directives ci-dessous, si
- l'en-tête <code>Accept-Language</code> de l'utilisateur ne mentionne
- que les réponses de langage <code>es</code>, et si aucune variante
- dans cette langue n'est trouvée, c'est la première variante de la
- liste définie par la directive <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> qui sera servie.</p>
-
- <pre class="prettyprint lang-config">LanguagePriority en fr de
-ForceLanguagePriority Fallback</pre>
-
-
- <p>Les deux options, <code>Prefer</code> et <code>Fallback</code>,
- peuvent être spécifiées, de façon à ce que la variante servie soit
- la première variante qui convient définie par la directive
- <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> si
- plusieurs variantes sont également acceptables, ou le premier
- document disponible si aucune variante ne convient à la liste de
- langages acceptables fournie par le client.</p>
-
-<h3>Voir aussi</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="languagepriority" id="languagepriority">Directive</a> <a name="LanguagePriority" id="LanguagePriority">LanguagePriority</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>L'ordre de priorité des variantes de langages pour les
-cas où le client n'a pas formulé de préférences</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LanguagePriority <var>langage-MIME</var> [<var>langage-MIME</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p>La directive <code class="directive">LanguagePriority</code> permet de
- définir, au cours du traitement d'une requête Multivues, l'ordre de
- priorité des variantes de langages pour les cas
- où le client n'a pas formulé de préférences. La liste énumère les
- <var>langages-MIME</var> dans un ordre de préférences
- décroissantes.</p>
-
- <pre class="prettyprint lang-config">LanguagePriority en fr de</pre>
-
-
- <p>Dans le cas d'une requête pour <code>foo.html</code>, si
- <code>foo.html.fr</code> et <code>foo.html.de</code> existent, et si
- le client n'a pas formulé de préférences, c'est le fichier
- <code>foo.html.fr</code> qui sera renvoyé.</p>
-
- <p>Notez que cette directive n'a d'effet que si le 'meilleur'
- langage n'a pas pu être déterminé d'une autre manière ou si la
- valeur de la directive <code class="directive"><a href="#forcelanguagepriority">ForceLanguagePriority</a></code> est
- différente de <code>None</code>. En général, c'est le client qui
- détermine le langage préféré, non le serveur.</p>
-
-<h3>Voir aussi</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../env.html">環境変数</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="typemaps" id="typemaps">タイプマップ</a></h2>
- <p>タイプマップは RFC 822 のメールヘッダに類似した書式です。
- ドキュメントの記述が空行で分離されて書かれていて、ハッシュ文字
- ('#') で始まる行はコメントとして扱われます。
- ドキュメントの説明は複数のヘッダレコードから構成されます。
- レコードは、続きの行が空白で始まっていると複数の行にまたがります。
- 最初の空白が消去されて、前の行とつなげて 1 行として扱われます。
- ヘッダレコードはキーワード名の後に値が続くという形式で、
- キーワード名は常にコロンで終わります。空白はヘッダ名と値の間、
- 値のトークンの間に入れることができます。
- 使用可能なヘッダは以下のとおりです:</p>
-
- <dl>
- <dt><code>Content-Encoding:</code></dt>
- <dd>ファイルのエンコーディング。Apache は <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> ディレクティブ
- で定義されたエンコーディングだけを認識します。通常 compress
- されたファイルのための <code>x-compress</code> と gzip
- されたファイルのための <code>x-gzip</code> を含みます。
- エンコーディングの比較をするときは、接頭辞 <code>x-</code>
- は無視されます。</dd>
-
- <dt><code>Content-Language:</code></dt>
- <dd>インターネット標準の言語タグ
- (<a href="http://www.ietf.org/rfc/rfc1766.txt">RFC 1766</a>)
- で定義されている言語の種類。例えば、<code>en</code>
- は英語を表します。
- 複数の言語が格納される場合はコンマで区切られます。</dd>
-
- <dt><code>Content-Length:</code></dt>
- <dd>ファイルの長さ (バイト数)。
- このヘッダがない場合、ファイルの実際の長さが使用されます。</dd>
-
- <dt><code>Content-Type:</code></dt>
- <dd>ドキュメントの <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME
- メディアタイプ</a>、オプショナルなパラメータ付き。パラメータの構文は
- <code>name=value</code>
- で、メディアタイプや他のパラメータとはセミコロンで分離されます。
- 共通のパラメータは以下のとおり:
-
- <dl>
- <dt><code>level</code></dt>
- <dd>メディアタイプのバージョンを示す整数。
- <code>text/html</code> では 2 がデフォルトで、その他の場合は
- 0 がデフォルトです。</dd>
-
- <dt><code>qs</code></dt>
- <dd>クライアントの能力に関係なく、variant
- を他と比較したときの相対的な「品質」で、0.0 から 1.0
- の範囲の浮動点小数。
- 例えば、写真を表現しようとしているときは普通は JPEG
- ファイルの方が ASCII ファイルよりも高い品質になります。
- しかし、リソースが ASCII アートで表現されているときは、ASCII
- ファイルの方が JPEG
- ファイルよりも高い品質になります。このように、<code>qs</code>
- はリソース毎に特有の値を取ります。
- </dd>
- </dl>
-
- <div class="example"><h3>例</h3><p><code>
- Content-Type: image/jpeg; qs=0.8
- </code></p></div>
- </dd>
-
- <dt><code>URI:</code></dt>
- <dd>(指定のメディアタイプ、コンテントエンコーディングの) variant の
- ファイルの uri. これは、マップファイルからの相対 URL として
- 解釈されます。同じサーバに存在しなければならず、クライアントが
- 直接リクエストしたときにアクセスを許可されるものでなければなりません。</dd>
-
- <dt><code>Body:</code></dt>
- <dd>Apache 2.0 で新設されたこの Body ヘッダを使って、
- リソースの実際の内容をタイプマップファイルに書くことができます。
- このヘッダは本文の内容の区切りとなる文字列で始まる必要があります。
- タイプマップファイルの続く行は、区切り文字列が見つかるまで、
- リソースの本文になります。
-
- <div class="example"><h3>Example:</h3><p><code>
- Body:----xyz----<br />
- <html><br />
- <body><br />
- <p>Content of the page.</p><br />
- </body><br />
- </html><br />
- ----xyz----
- </code></p></div>
- </dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multiviews" id="multiviews">MultiViews</a></h2>
- <p>MultiViews 探索は、<code>Multiviews</code> <code class="directive"><a href="../mod/core.html#options">Options</a></code> ディレクティブにより有効になります。
- サーバが <code>/some/dir/foo</code>
- へのリクエストを受け取り、<code>/some/dir/foo</code> が存在
- <em>しない</em>場合、サーバはディレクトリを読んで、
- <code>foo.*</code> にあてはまる全てのファイルを探し、
- 事実上それらのファイルをマップするタイプマップを作ります。
- そのとき、メディアタイプとコンテントエンコーディングは、
- そのファイル名を直接指定したときと同じものが割り当てられます。
- それからクライアントの要求に一番合うものを選び、
- そのドキュメントを返します。</p>
-
- <p>ファイルを選択する際に、関連するコンテントネゴシエーションの
- メタ情報を持たないファイルについて、判定を行うかどうかを
- <code class="directive"><a href="../mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>
- ディレクティブで設定します。</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CacheNegotiatedDocs" id="CacheNegotiatedDocs">CacheNegotiatedDocs</a> <a name="cachenegotiateddocs" id="cachenegotiateddocs">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>コンテントネゴシエーションされたドキュメントをプロキシサーバが
<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="typemaps" id="typemaps">タイプマップ</a></h2>
+ <p>タイプマップは RFC 822 のメールヘッダに類似した書式です。
+ ドキュメントの記述が空行で分離されて書かれていて、ハッシュ文字
+ ('#') で始まる行はコメントとして扱われます。
+ ドキュメントの説明は複数のヘッダレコードから構成されます。
+ レコードは、続きの行が空白で始まっていると複数の行にまたがります。
+ 最初の空白が消去されて、前の行とつなげて 1 行として扱われます。
+ ヘッダレコードはキーワード名の後に値が続くという形式で、
+ キーワード名は常にコロンで終わります。空白はヘッダ名と値の間、
+ 値のトークンの間に入れることができます。
+ 使用可能なヘッダは以下のとおりです:</p>
+
+ <dl>
+ <dt><code>Content-Encoding:</code></dt>
+ <dd>ファイルのエンコーディング。Apache は <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> ディレクティブ
+ で定義されたエンコーディングだけを認識します。通常 compress
+ されたファイルのための <code>x-compress</code> と gzip
+ されたファイルのための <code>x-gzip</code> を含みます。
+ エンコーディングの比較をするときは、接頭辞 <code>x-</code>
+ は無視されます。</dd>
+
+ <dt><code>Content-Language:</code></dt>
+ <dd>インターネット標準の言語タグ
+ (<a href="http://www.ietf.org/rfc/rfc1766.txt">RFC 1766</a>)
+ で定義されている言語の種類。例えば、<code>en</code>
+ は英語を表します。
+ 複数の言語が格納される場合はコンマで区切られます。</dd>
+
+ <dt><code>Content-Length:</code></dt>
+ <dd>ファイルの長さ (バイト数)。
+ このヘッダがない場合、ファイルの実際の長さが使用されます。</dd>
+
+ <dt><code>Content-Type:</code></dt>
+ <dd>ドキュメントの <a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME
+ メディアタイプ</a>、オプショナルなパラメータ付き。パラメータの構文は
+ <code>name=value</code>
+ で、メディアタイプや他のパラメータとはセミコロンで分離されます。
+ 共通のパラメータは以下のとおり:
+
+ <dl>
+ <dt><code>level</code></dt>
+ <dd>メディアタイプのバージョンを示す整数。
+ <code>text/html</code> では 2 がデフォルトで、その他の場合は
+ 0 がデフォルトです。</dd>
+
+ <dt><code>qs</code></dt>
+ <dd>クライアントの能力に関係なく、variant
+ を他と比較したときの相対的な「品質」で、0.0 から 1.0
+ の範囲の浮動点小数。
+ 例えば、写真を表現しようとしているときは普通は JPEG
+ ファイルの方が ASCII ファイルよりも高い品質になります。
+ しかし、リソースが ASCII アートで表現されているときは、ASCII
+ ファイルの方が JPEG
+ ファイルよりも高い品質になります。このように、<code>qs</code>
+ はリソース毎に特有の値を取ります。
+ </dd>
+ </dl>
+
+ <div class="example"><h3>例</h3><p><code>
+ Content-Type: image/jpeg; qs=0.8
+ </code></p></div>
+ </dd>
+
+ <dt><code>URI:</code></dt>
+ <dd>(指定のメディアタイプ、コンテントエンコーディングの) variant の
+ ファイルの uri. これは、マップファイルからの相対 URL として
+ 解釈されます。同じサーバに存在しなければならず、クライアントが
+ 直接リクエストしたときにアクセスを許可されるものでなければなりません。</dd>
+
+ <dt><code>Body:</code></dt>
+ <dd>Apache 2.0 で新設されたこの Body ヘッダを使って、
+ リソースの実際の内容をタイプマップファイルに書くことができます。
+ このヘッダは本文の内容の区切りとなる文字列で始まる必要があります。
+ タイプマップファイルの続く行は、区切り文字列が見つかるまで、
+ リソースの本文になります。
+
+ <div class="example"><h3>Example:</h3><p><code>
+ Body:----xyz----<br />
+ <html><br />
+ <body><br />
+ <p>Content of the page.</p><br />
+ </body><br />
+ </html><br />
+ ----xyz----
+ </code></p></div>
+ </dd>
+ </dl>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="multiviews" id="multiviews">MultiViews</a></h2>
+ <p>MultiViews 探索は、<code>Multiviews</code> <code class="directive"><a href="../mod/core.html#options">Options</a></code> ディレクティブにより有効になります。
+ サーバが <code>/some/dir/foo</code>
+ へのリクエストを受け取り、<code>/some/dir/foo</code> が存在
+ <em>しない</em>場合、サーバはディレクトリを読んで、
+ <code>foo.*</code> にあてはまる全てのファイルを探し、
+ 事実上それらのファイルをマップするタイプマップを作ります。
+ そのとき、メディアタイプとコンテントエンコーディングは、
+ そのファイル名を直接指定したときと同じものが割り当てられます。
+ それからクライアントの要求に一番合うものを選び、
+ そのドキュメントを返します。</p>
+
+ <p>ファイルを選択する際に、関連するコンテントネゴシエーションの
+ メタ情報を持たないファイルについて、判定を行うかどうかを
+ <code class="directive"><a href="../mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>
+ ディレクティブで設定します。</p>
+</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#securelisten">SecureListen</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="NWSSLTrustedCerts" id="NWSSLTrustedCerts">NWSSLTrustedCerts</a> <a name="nwssltrustedcerts" id="nwssltrustedcerts">Directive</a></h2>
<table class="directive">
parameter also enables mutual authentication.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_nw_ssl.html" title="English"> en </a></p>
<li><a href="../compliance.html">HTTP Protocol Compliance</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="actions" id="actions">Actions</a></h2>
-
-
- <p>If a policy is violated, one of the following actions can be
- taken:</p>
-
- <dl>
- <dt><strong>ignore</strong></dt>
- <dd>The policy check will be ignored for the given URL space, even
- if the filter is present.</dd>
-
- <dt><strong>log</strong></dt>
- <dd>The policy check will be executed, and if a violation is detected
- a warning will be logged to the server error_log, and a
- <code>Warning</code> header added to the response for the benefit of
- the client.</dd>
-
- <dt><strong>enforce</strong></dt>
- <dd>The policy check will be executed, and if a violation is detected
- an error will be logged to the server error_log, a
- <code>Warning</code> header added to the response, and a <code>502
- Bad Gateway</code> will be returned to the client. Optional links to
- explanatory documentation can be added to each error message,
- detailing the origin of each policy.</dd>
-
- </dl>
-
- <p>It is also possible to selectively disable all policies for a
- given URL space, should the need arise, using the
- <code class="directive"><a href="#policyfilter">PolicyFilter</a></code> directive.</p>
-
- <p>Alternatively, the
- <code class="directive"><a href="#policyenvironment">PolicyEnvironment</a></code>
- directive can be used to specify an environment variable, which if
- present, will cause the policies to be selectively downgraded or
- bypassed.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="tests" id="tests">Policy Tests</a></h2>
-
-
- <p>The following policy filters are available:</p>
-
- <dl>
- <dt><strong><a href="../compliance.html#policytype">POLICY_TYPE</a>
- </strong>: Enforce valid content types</dt>
- <dd>Content types that are syntactically invalid or blank can be detected
- and the request rejected. Types can be restricted to a specific list
- containing optional wildcards ? and *.</dd>
-
- <dt><strong><a href="../compliance.html#policylength">POLICY_LENGTH</a>
- </strong>: Enforce the presence of a Content-Length</dt>
- <dd>The length of responses can be specified in one of three ways, by
- specifying an explicit length in advance, using chunked encoding to set
- the length, or by setting no length at all and terminating the request
- when complete. The absence of a specific content length can affect the
- cacheability of the response, and prevents the use of keepalive during
- HTTP/1.0 requests. This policy enforces the presence of an explicit
- content length on the response.</dd>
-
- <dt><strong><a href="../compliance.html#policykeepalive">POLICY_KEEPALIVE
- </a></strong>: Enforce the option to keepalive</dt>
- <dd>Less restrictive than the POLICY_LENGTH test, this policy enforces the
- possibility that the response can be kept alive. If the response doesn't
- have a protocol defined zero length, and the response isn't already an
- error, and the response has neither a Content-Length or is declared
- HTTP/1.1 and lacks Content-Encoding: chunked, then this response will be
- rejected.</dd>
-
- <dt><strong><a href="../compliance.html#policyvary">POLICY_VARY</a>
- </strong>: Enforce the absence of certain headers within Vary headers</dt>
- <dd>If the Vary header contains any of the headers specified, this policy
- will reject the request. The typical case is the presence of the User-Agent
- within Vary, which is likely to cause a denial of service condition to a
- cache.</dd>
-
- <dt><strong><a href="../compliance.html#policyvalidation">
- POLICY_VALIDATION</a></strong>: Enforce the presence of Etag and/or
- Last-Modified</dt>
- <dd>The ability for a cache to determine whether a cached entity can be
- refreshed is dependent on whether a valid Etag and/or Last-Modified header
- is present to revalidate against. The absence of both headers, or the
- invalid syntax of a header will cause this policy to be rejected.</dd>
-
- <dt><strong><a href="../compliance.html#policyconditional">
- POLICY_CONDITIONAL</a></strong>: Enforce correct operation of conditional
- requests</dt>
- <dd>When conditional headers are present in the request, a server should
- respond with a <code>304 Not Modified</code> or <code>412 Precondition
- Failed</code> response where appropriate. A server may ignore conditional
- headers, and this affects the efficiency of the HTTP caching mechanism.
- This policy rejects requests where a conditional header is present, and
- a 304 or 412 response code was expected, but a 2xx response was seen
- instead.</dd>
-
- <dt><strong><a href="../compliance.html#policynocache">POLICY_NOCACHE</a>
- </strong>: Enforce cacheable responses</dt>
- <dd>When a response is encountered that declares itself explicitly
- uncacheable, the request is rejected. A response is considered
- uncacheable if it specifies any of the following:
- <ul><li><code>Cache-Control: no-cache</code></li>
- <li><code>Pragma: no-cache</code></li>
- <li><code>Cache-Control: no-store</code></li>
- <li><code>Cache-Control: private</code></li>
- </ul></dd>
-
- <dt><strong><a href="../compliance.html#policymaxage">POLICY_MAXAGE</a>
- </strong>: Enforce a minimum maxage</dt>
- <dd>When a response is encountered where the freshness lifetime is less
- than the given value, or the freshness lifetime is heuristic, the request
- is rejected. A response is checked in the following order:
- <ul><li>If <code>s-maxage</code> is present but too small; or</li>
- <li>If <code>max-age</code> is present but too small; or</li>
- <li>If <code>Expires</code> is present and invalid; or</li>
- <li><code>Date</code> is present and invalid; or</li>
- <li><code>Expires</code> minus Date is too small; or</li>
- <li>No <code>s-maxage</code>, <code>maxage</code>, or
- <code>Expires</code>/<code>Date</code> declared at all</li>
- </ul></dd>
-
- <dt><strong><a href="../compliance.html#policyversion">POLICY_VERSION</a>
- </strong>: Enforce a minimum HTTP version within a request</dt>
- <dd>When a request is encountered with an HTTP version number less than
- the required minimum version, the request is rejected. The following
- version numbers are recognised:
- <ul><li><code>HTTP/1.1</code></li>
- <li><code>HTTP/1.0</code></li>
- <li><code>HTTP/0.9</code></li>
- </ul></dd>
-
- </dl>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Example Configuration</a></h2>
-
-
- <p>A typical configuration protecting a server serving static content
- might be as follows:</p>
-
- <pre class="prettyprint lang-config"><Location />
- SetOutputFilter POLICY_TYPE;POLICY_LENGTH;POLICY_KEEPALIVE;POLICY_VARY;POLICY_VALIDATION; \
- POLICY_CONDITIONAL;POLICY_NOCACHE;POLICY_MAXAGE;POLICY_VERSION
-
- # content type must be present and valid, but can be anything
- PolicyType enforce */*
-
- # reject if no explicitly declared content length
- PolicyLength enforce
-
- # covered by the policy length filter
- PolicyKeepalive ignore
-
- # reject if User-Agent appears within Vary headers
- PolicyVary enforce User-Agent
-
- # we want to enforce validation
- PolicyValidation enforce
-
- # non-functional conditional responses should be rejected
- PolicyConditional enforce
-
- # no-cache responses should be rejected
- PolicyNocache enforce
-
- # maxage must be at least a day
- PolicyMaxage enforce 86400
-
- # request version can be anything
- PolicyVersion ignore HTTP/1.1
-</Location>
-
-# suppress policy protection for server-status
-<Location /server-status>
- PolicyFilter off
-</Location></pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="PolicyConditional" id="PolicyConditional">PolicyConditional</a> <a name="policyconditional" id="policyconditional">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable the conditional request policy.</td></tr>
<p>Specify the URL of the documentation describing the minimum request
HTTP version policy, to appear within error messages.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="actions" id="actions">Actions</a></h2>
+
+
+ <p>If a policy is violated, one of the following actions can be
+ taken:</p>
+
+ <dl>
+ <dt><strong>ignore</strong></dt>
+ <dd>The policy check will be ignored for the given URL space, even
+ if the filter is present.</dd>
+
+ <dt><strong>log</strong></dt>
+ <dd>The policy check will be executed, and if a violation is detected
+ a warning will be logged to the server error_log, and a
+ <code>Warning</code> header added to the response for the benefit of
+ the client.</dd>
+
+ <dt><strong>enforce</strong></dt>
+ <dd>The policy check will be executed, and if a violation is detected
+ an error will be logged to the server error_log, a
+ <code>Warning</code> header added to the response, and a <code>502
+ Bad Gateway</code> will be returned to the client. Optional links to
+ explanatory documentation can be added to each error message,
+ detailing the origin of each policy.</dd>
+
+ </dl>
+
+ <p>It is also possible to selectively disable all policies for a
+ given URL space, should the need arise, using the
+ <code class="directive"><a href="#policyfilter">PolicyFilter</a></code> directive.</p>
+
+ <p>Alternatively, the
+ <code class="directive"><a href="#policyenvironment">PolicyEnvironment</a></code>
+ directive can be used to specify an environment variable, which if
+ present, will cause the policies to be selectively downgraded or
+ bypassed.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="tests" id="tests">Policy Tests</a></h2>
+
+
+ <p>The following policy filters are available:</p>
+
+ <dl>
+ <dt><strong><a href="../compliance.html#policytype">POLICY_TYPE</a>
+ </strong>: Enforce valid content types</dt>
+ <dd>Content types that are syntactically invalid or blank can be detected
+ and the request rejected. Types can be restricted to a specific list
+ containing optional wildcards ? and *.</dd>
+
+ <dt><strong><a href="../compliance.html#policylength">POLICY_LENGTH</a>
+ </strong>: Enforce the presence of a Content-Length</dt>
+ <dd>The length of responses can be specified in one of three ways, by
+ specifying an explicit length in advance, using chunked encoding to set
+ the length, or by setting no length at all and terminating the request
+ when complete. The absence of a specific content length can affect the
+ cacheability of the response, and prevents the use of keepalive during
+ HTTP/1.0 requests. This policy enforces the presence of an explicit
+ content length on the response.</dd>
+
+ <dt><strong><a href="../compliance.html#policykeepalive">POLICY_KEEPALIVE
+ </a></strong>: Enforce the option to keepalive</dt>
+ <dd>Less restrictive than the POLICY_LENGTH test, this policy enforces the
+ possibility that the response can be kept alive. If the response doesn't
+ have a protocol defined zero length, and the response isn't already an
+ error, and the response has neither a Content-Length or is declared
+ HTTP/1.1 and lacks Content-Encoding: chunked, then this response will be
+ rejected.</dd>
+
+ <dt><strong><a href="../compliance.html#policyvary">POLICY_VARY</a>
+ </strong>: Enforce the absence of certain headers within Vary headers</dt>
+ <dd>If the Vary header contains any of the headers specified, this policy
+ will reject the request. The typical case is the presence of the User-Agent
+ within Vary, which is likely to cause a denial of service condition to a
+ cache.</dd>
+
+ <dt><strong><a href="../compliance.html#policyvalidation">
+ POLICY_VALIDATION</a></strong>: Enforce the presence of Etag and/or
+ Last-Modified</dt>
+ <dd>The ability for a cache to determine whether a cached entity can be
+ refreshed is dependent on whether a valid Etag and/or Last-Modified header
+ is present to revalidate against. The absence of both headers, or the
+ invalid syntax of a header will cause this policy to be rejected.</dd>
+
+ <dt><strong><a href="../compliance.html#policyconditional">
+ POLICY_CONDITIONAL</a></strong>: Enforce correct operation of conditional
+ requests</dt>
+ <dd>When conditional headers are present in the request, a server should
+ respond with a <code>304 Not Modified</code> or <code>412 Precondition
+ Failed</code> response where appropriate. A server may ignore conditional
+ headers, and this affects the efficiency of the HTTP caching mechanism.
+ This policy rejects requests where a conditional header is present, and
+ a 304 or 412 response code was expected, but a 2xx response was seen
+ instead.</dd>
+
+ <dt><strong><a href="../compliance.html#policynocache">POLICY_NOCACHE</a>
+ </strong>: Enforce cacheable responses</dt>
+ <dd>When a response is encountered that declares itself explicitly
+ uncacheable, the request is rejected. A response is considered
+ uncacheable if it specifies any of the following:
+ <ul><li><code>Cache-Control: no-cache</code></li>
+ <li><code>Pragma: no-cache</code></li>
+ <li><code>Cache-Control: no-store</code></li>
+ <li><code>Cache-Control: private</code></li>
+ </ul></dd>
+
+ <dt><strong><a href="../compliance.html#policymaxage">POLICY_MAXAGE</a>
+ </strong>: Enforce a minimum maxage</dt>
+ <dd>When a response is encountered where the freshness lifetime is less
+ than the given value, or the freshness lifetime is heuristic, the request
+ is rejected. A response is checked in the following order:
+ <ul><li>If <code>s-maxage</code> is present but too small; or</li>
+ <li>If <code>max-age</code> is present but too small; or</li>
+ <li>If <code>Expires</code> is present and invalid; or</li>
+ <li><code>Date</code> is present and invalid; or</li>
+ <li><code>Expires</code> minus Date is too small; or</li>
+ <li>No <code>s-maxage</code>, <code>maxage</code>, or
+ <code>Expires</code>/<code>Date</code> declared at all</li>
+ </ul></dd>
+
+ <dt><strong><a href="../compliance.html#policyversion">POLICY_VERSION</a>
+ </strong>: Enforce a minimum HTTP version within a request</dt>
+ <dd>When a request is encountered with an HTTP version number less than
+ the required minimum version, the request is rejected. The following
+ version numbers are recognised:
+ <ul><li><code>HTTP/1.1</code></li>
+ <li><code>HTTP/1.0</code></li>
+ <li><code>HTTP/0.9</code></li>
+ </ul></dd>
+
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="example" id="example">Example Configuration</a></h2>
+
+
+ <p>A typical configuration protecting a server serving static content
+ might be as follows:</p>
+
+ <pre class="prettyprint lang-config"><Location />
+ SetOutputFilter POLICY_TYPE;POLICY_LENGTH;POLICY_KEEPALIVE;POLICY_VARY;POLICY_VALIDATION; \
+ POLICY_CONDITIONAL;POLICY_NOCACHE;POLICY_MAXAGE;POLICY_VERSION
+
+ # content type must be present and valid, but can be anything
+ PolicyType enforce */*
+
+ # reject if no explicitly declared content length
+ PolicyLength enforce
+
+ # covered by the policy length filter
+ PolicyKeepalive ignore
+
+ # reject if User-Agent appears within Vary headers
+ PolicyVary enforce User-Agent
+
+ # we want to enforce validation
+ PolicyValidation enforce
+
+ # non-functional conditional responses should be rejected
+ PolicyConditional enforce
+
+ # no-cache responses should be rejected
+ PolicyNocache enforce
+
+ # maxage must be at least a day
+ PolicyMaxage enforce 86400
+
+ # request version can be anything
+ PolicyVersion ignore HTTP/1.1
+</Location>
+
+# suppress policy protection for server-status
+<Location /server-status>
+ PolicyFilter off
+</Location></pre>
+
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#security">Security Considerations</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">Security Considerations</a></h2>
-
-<p><code class="module"><a href="../mod/mod_privileges.html">mod_privileges</a></code> introduces new security concerns
-in situations where <strong>untrusted code</strong> may be run
-<strong>within the webserver process</strong>. This applies to
-untrusted modules, and scripts running under modules such as
-mod_php or mod_perl. Scripts running externally (e.g. as CGI
-or in an appserver behind mod_proxy or mod_jk) are NOT affected.</p>
-
-<p>The basic security concerns with mod_privileges are:</p>
-<ul><li>Running as a system user introduces the same security issues
- as mod_suexec, and near-equivalents such as cgiwrap and suphp.</li>
-<li>A privileges-aware malicious user extension (module or script)
- could escalate its privileges to anything available to the
- httpd process in any virtual host. This introduces new risks
- if (and only if) mod_privileges is compiled with the
- <var>BIG_SECURITY_HOLE</var> option.</li>
-<li>A privileges-aware malicious user extension (module or script)
- could escalate privileges to set its user ID to another system
- user (and/or group).</li>
-</ul>
-
-<p>The <code class="directive">PrivilegesMode</code> directive allows you to
-select either <var>FAST</var> or <var>SECURE</var> mode. You can
-mix modes, using <var>FAST</var> mode for trusted users and
-fully-audited code paths, while imposing SECURE mode where an
-untrusted user has scope to introduce code.</p>
-<p>Before describing the modes, we should also introduce the target
-use cases: Benign vs Hostile. In a benign situation, you want to
-separate users for their convenience, and protect them and the server
-against the risks posed by honest mistakes, but you trust your users
-are not deliberately subverting system security. In a hostile
-situation - e.g. commercial hosting - you may have users deliberately
-attacking the system or each other.</p>
-<dl>
-<dt>FAST mode</dt>
-<dd>In <var>FAST</var> mode, requests are run in-process with the
-selected uid/gid and privileges, so the overhead is negligible.
-This is suitable for benign situations, but is not secure against an
-attacker escalating privileges with an in-process module or script.</dd>
-<dt>SECURE mode</dt>
-<dd>A request in <var>SECURE</var> mode forks a subprocess, which
-then drops privileges. This is a very similar case to running CGI
-with suexec, but for the entire request cycle, and with the benefit
-of fine-grained control of privileges.</dd>
-</dl>
-<p>You can select different <code class="directive">PrivilegesMode</code>s for
-each virtual host, and even in a directory context within a virtual
-host. <var>FAST</var> mode is appropriate where the user(s) are
-trusted and/or have no privilege to load in-process code.
-<var>SECURE</var> mode is appropriate to cases where untrusted code
-might be run in-process. However, even in <var>SECURE</var> mode,
-there is no protection against a malicious user who is able to
-introduce privileges-aware code running <em>before the start of the
-request-processing cycle.</em></p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DTracePrivileges" id="DTracePrivileges">DTracePrivileges</a> <a name="dtraceprivileges" id="dtraceprivileges">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines whether the privileges required by dtrace are enabled.</td></tr>
<li><code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code></li>
<li><code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code></li>
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="security" id="security">Security Considerations</a></h2>
+
+<p><code class="module"><a href="../mod/mod_privileges.html">mod_privileges</a></code> introduces new security concerns
+in situations where <strong>untrusted code</strong> may be run
+<strong>within the webserver process</strong>. This applies to
+untrusted modules, and scripts running under modules such as
+mod_php or mod_perl. Scripts running externally (e.g. as CGI
+or in an appserver behind mod_proxy or mod_jk) are NOT affected.</p>
+
+<p>The basic security concerns with mod_privileges are:</p>
+<ul><li>Running as a system user introduces the same security issues
+ as mod_suexec, and near-equivalents such as cgiwrap and suphp.</li>
+<li>A privileges-aware malicious user extension (module or script)
+ could escalate its privileges to anything available to the
+ httpd process in any virtual host. This introduces new risks
+ if (and only if) mod_privileges is compiled with the
+ <var>BIG_SECURITY_HOLE</var> option.</li>
+<li>A privileges-aware malicious user extension (module or script)
+ could escalate privileges to set its user ID to another system
+ user (and/or group).</li>
+</ul>
+
+<p>The <code class="directive">PrivilegesMode</code> directive allows you to
+select either <var>FAST</var> or <var>SECURE</var> mode. You can
+mix modes, using <var>FAST</var> mode for trusted users and
+fully-audited code paths, while imposing SECURE mode where an
+untrusted user has scope to introduce code.</p>
+<p>Before describing the modes, we should also introduce the target
+use cases: Benign vs Hostile. In a benign situation, you want to
+separate users for their convenience, and protect them and the server
+against the risks posed by honest mistakes, but you trust your users
+are not deliberately subverting system security. In a hostile
+situation - e.g. commercial hosting - you may have users deliberately
+attacking the system or each other.</p>
+<dl>
+<dt>FAST mode</dt>
+<dd>In <var>FAST</var> mode, requests are run in-process with the
+selected uid/gid and privileges, so the overhead is negligible.
+This is suitable for benign situations, but is not secure against an
+attacker escalating privileges with an in-process module or script.</dd>
+<dt>SECURE mode</dt>
+<dd>A request in <var>SECURE</var> mode forks a subprocess, which
+then drops privileges. This is a very similar case to running CGI
+with suexec, but for the entire request cycle, and with the benefit
+of fine-grained control of privileges.</dd>
+</dl>
+<p>You can select different <code class="directive">PrivilegesMode</code>s for
+each virtual host, and even in a directory context within a virtual
+host. <var>FAST</var> mode is appropriate where the user(s) are
+trusted and/or have no privilege to load in-process code.
+<var>SECURE</var> mode is appropriate to cases where untrusted code
+might be run in-process. However, even in <var>SECURE</var> mode,
+there is no protection against a malicious user who is able to
+introduce privileges-aware code running <em>before the start of the
+request-processing cycle.</em></p>
+
</div>
</div>
<div class="bottomlang">
<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="forwardreverse" id="forwardreverse">Forward Proxies and Reverse
- Proxies/Gateways</a></h2>
- <p>Apache HTTP Server can be configured in both a <dfn>forward</dfn> and
- <dfn>reverse</dfn> proxy (also known as <dfn>gateway</dfn>) mode.</p>
-
- <p>An ordinary <dfn>forward proxy</dfn> is an intermediate
- server that sits between the client and the <em>origin
- server</em>. In order to get content from the origin server,
- the client sends a request to the proxy naming the origin server
- as the target and the proxy then requests the content from the
- origin server and returns it to the client. The client must be
- specially configured to use the forward proxy to access other
- sites.</p>
-
- <p>A typical usage of a forward proxy is to provide Internet
- access to internal clients that are otherwise restricted by a
- firewall. The forward proxy can also use caching (as provided
- by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) to reduce network usage.</p>
-
- <p>The forward proxy is activated using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive. Because
- forward proxies allow clients to access arbitrary sites through
- your server and to hide their true origin, it is essential that
- you <a href="#access">secure your server</a> so that only
- authorized clients can access the proxy before activating a
- forward proxy.</p>
-
- <p>A <dfn>reverse proxy</dfn> (or <dfn>gateway</dfn>), by
- contrast, appears to the client just like an ordinary web
- server. No special configuration on the client is necessary.
- The client makes ordinary requests for content in the name-space
- of the reverse proxy. The reverse proxy then decides where to
- send those requests, and returns the content as if it was itself
- the origin.</p>
-
- <p>A typical usage of a reverse proxy is to provide Internet
- users access to a server that is behind a firewall. Reverse
- proxies can also be used to balance load among several back-end
- servers, or to provide caching for a slower back-end server.
- In addition, reverse proxies can be used simply to bring
- several servers into the same URL space.</p>
-
- <p>A reverse proxy is activated using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive or the
- <code>[P]</code> flag to the <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive. It is
- <strong>not</strong> necessary to turn <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> on in order to
- configure a reverse proxy.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Basic Examples</a></h2>
-
- <p>The examples below are only a very basic idea to help you
- get started. Please read the documentation on the individual
- directives.</p>
-
- <p>In addition, if you wish to have caching enabled, consult
- the documentation from <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
+<div class="directive-section"><h2><a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a> <a name="balancergrowth" id="balancergrowth">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of additional Balancers that can be added Post-configuration</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerGrowth <var>#</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerGrowth 5</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerGrowth is only available in Apache HTTP Server 2.3.13
+ and later.</td></tr>
+</table>
+ <p>This directive allows for growth potential in the number of
+ Balancers available for a virtualhost in addition to the
+ number pre-configured. It only takes effect if there is at
+ least 1 pre-configured Balancer.</p>
- <div class="example"><h3>Reverse Proxy</h3><pre class="prettyprint lang-config">ProxyPass /foo http://foo.example.com/bar
-ProxyPassReverse /foo http://foo.example.com/bar</pre>
</div>
-
- <div class="example"><h3>Forward Proxy</h3><pre class="prettyprint lang-config">ProxyRequests On
-ProxyVia On
-
-<Proxy *>
- Require host internal.example.com
-</Proxy></pre>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="BalancerInherit" id="BalancerInherit">BalancerInherit</a> <a name="balancerinherit" id="balancerinherit">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Inherit proxy Balancers/Workers defined from the main server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerInherit On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerInherit On</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.4.5 and later.</td></tr>
+</table>
+ <p>This directive will cause the current server/vhost to "inherit"
+ Balancers and Workers defined in the main server. This can cause issues and
+ inconsistent behavior if using the Balancer Manager for dynamic changes
+ and so should be disabled if using that feature.</p>
+ <p>The setting in the global server defines the default for all vhosts.</p>
+ <p>Disabling <code class="directive"><a href="#proxypassinherit">ProxyPassInherit</a></code> also disables BalancerInherit.</p>
+
</div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="handler" id="handler">Access via Handler</a></h2>
-
- <p>You can also force a request to be handled as a reverse-proxy
- request, by creating a suitable Handler pass-through. The example
- configuration below will pass all requests for PHP scripts to the
- specified FastCGI server using reverse proxy:
- </p>
-
- <div class="example"><h3>Reverse Proxy PHP scripts</h3><pre class="prettyprint lang-config"><FilesMatch \.php$>
- SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/"
-</FilesMatch></pre>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="BalancerMember" id="BalancerMember">BalancerMember</a> <a name="balancermember" id="balancermember">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a member to a load balancing group</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerMember [<var>balancerurl</var>] <var>url</var> [<var>key=value [key=value ...]]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>This directive adds a member to a load balancing group. It could be used
+ within a <code><Proxy <var>balancer://</var>...></code> container
+ directive, and can take any of the key value pair parameters available to
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p>
+ <p>One additional parameter is available only to <code class="directive">BalancerMember</code> directives:
+ <var>loadfactor</var>. This is the member load factor - a number between 1
+ (default) and 100, which defines the weighted load to be applied to the
+ member in question.</p>
+ <p>The <var>balancerurl</var> is only needed when not in <code><Proxy <var>balancer://</var>...></code>
+ container directive. It corresponds to the url of a balancer defined in
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
+ <p>The path component of the balancer URL in any
+ <code><Proxy <var>balancer://</var>...></code> container directive
+ is ignored.</p>
+ <p>Trailing slashes should typically be removed from the URL of a
+ <code class="directive">BalancerMember</code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="BalancerPersist" id="BalancerPersist">BalancerPersist</a> <a name="balancerpersist" id="balancerpersist">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Attempt to persist changes made by the Balancer Manager across restarts.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerPersist On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerPersist Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.</td></tr>
+</table>
+ <p>This directive will cause the shared memory storage associated
+ with the balancers and balancer members to be persisted across
+ restarts. This allows these local changes to not be lost during the
+ normal restart/graceful state transitions.</p>
+
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="NoProxy" id="NoProxy">NoProxy</a> <a name="noproxy" id="noproxy">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Hosts, domains, or networks that will be connected to
+directly</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NoProxy <var>host</var> [<var>host</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>This directive is only useful for Apache httpd proxy servers within
+ intranets. The <code class="directive">NoProxy</code> directive specifies a
+ list of subnets, IP addresses, hosts and/or domains, separated by
+ spaces. A request to a host which matches one or more of these is
+ always served directly, without forwarding to the configured
+ <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> proxy server(s).</p>
- <p>This feature is available in Apache HTTP Server 2.4.10 and later.</p>
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyRemote * http://firewall.example.com:81
+NoProxy .example.com 192.168.112.0/21</pre>
+</div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="workers" id="workers">Workers</a></h2>
- <p>The proxy manages the configuration of origin servers and their
- communication parameters in objects called <dfn>workers</dfn>.
- There are two built-in workers, the default forward proxy worker and the
- default reverse proxy worker. Additional workers can be configured
- explicitly.</p>
+ <p>The <var>host</var> arguments to the <code class="directive">NoProxy</code>
+ directive are one of the following type list:</p>
- <p>The two default workers have a fixed configuration
- and will be used if no other worker matches the request.
- They do not use HTTP Keep-Alive or connection pooling.
- The TCP connections to the origin server will instead be
- opened and closed for each request.</p>
+ <dl>
+
+ <dt><var><a name="domain" id="domain">Domain</a></var></dt>
+ <dd>
+ <p>A <dfn>Domain</dfn> is a partially qualified DNS domain name, preceded
+ by a period. It represents a list of hosts which logically belong to the
+ same DNS domain or zone (<em>i.e.</em>, the suffixes of the hostnames are
+ all ending in <var>Domain</var>).</p>
- <p>Explicitly configured workers are identified by their URL.
- They are usually created and configured using
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> or
- <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> when used
- for a reverse proxy:</p>
+ <div class="example"><h3>Examples</h3><p><code>
+ .com .example.org.
+ </code></p></div>
- <pre class="prettyprint lang-config">ProxyPass /example http://backend.example.com connectiontimeout=5 timeout=30</pre>
+ <p>To distinguish <var>Domain</var>s from <var><a href="#hostname">Hostname</a></var>s (both syntactically and semantically; a DNS domain can
+ have a DNS A record, too!), <var>Domain</var>s are always written with a
+ leading period.</p>
+ <div class="note"><h3>Note</h3>
+ <p>Domain name comparisons are done without regard to the case, and
+ <var>Domain</var>s are always assumed to be anchored in the root of the
+ DNS tree, therefore two domains <code>.ExAmple.com</code> and
+ <code>.example.com.</code> (note the trailing period) are considered
+ equal. Since a domain comparison does not involve a DNS lookup, it is much
+ more efficient than subnet comparison.</p>
+ </div></dd>
- <p>This will create a worker associated with the origin server URL
- <code>http://backend.example.com</code> and using the given timeout
- values. When used in a forward proxy, workers are usually defined
- via the <code class="directive"><a href="#proxyset">ProxySet</a></code> directive:</p>
+
+ <dt><var><a name="subnet" id="subnet">SubNet</a></var></dt>
+ <dd>
+ <p>A <dfn>SubNet</dfn> is a partially qualified internet address in
+ numeric (dotted quad) form, optionally followed by a slash and the netmask,
+ specified as the number of significant bits in the <var>SubNet</var>. It is
+ used to represent a subnet of hosts which can be reached over a common
+ network interface. In the absence of the explicit net mask it is assumed
+ that omitted (or zero valued) trailing digits specify the mask. (In this
+ case, the netmask can only be multiples of 8 bits wide.) Examples:</p>
- <pre class="prettyprint lang-config">ProxySet http://backend.example.com connectiontimeout=5 timeout=30</pre>
+ <dl>
+ <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
+ <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
+ (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
+ <dt><code>192.168.112.0/21</code></dt>
+ <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
+ valid bits (also used in the form <code>255.255.248.0</code>)</dd>
+ </dl>
+ <p>As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
+ equivalent to an <var><a href="#ipaddr">IPAddr</a></var>, while a <var>SubNet</var> with zero
+ valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
+ <var>_Default_</var>, matching any IP address.</p></dd>
- <p>or alternatively using <code class="directive"><a href="#proxy">Proxy</a></code>
- and <code class="directive"><a href="#proxyset">ProxySet</a></code>:</p>
+
+ <dt><var><a name="ipaddr" id="ipaddr">IPAddr</a></var></dt>
+ <dd>
+ <p>A <dfn>IPAddr</dfn> represents a fully qualified internet address in
+ numeric (dotted quad) form. Usually, this address represents a host, but
+ there need not necessarily be a DNS domain name connected with the
+ address.</p>
+ <div class="example"><h3>Example</h3><p><code>
+ 192.168.123.7
+ </code></p></div>
- <pre class="prettyprint lang-config"><Proxy http://backend.example.com>
- ProxySet connectiontimeout=5 timeout=30
-</Proxy></pre>
+ <div class="note"><h3>Note</h3>
+ <p>An <var>IPAddr</var> does not need to be resolved by the DNS system, so
+ it can result in more effective apache performance.</p>
+ </div></dd>
+
+ <dt><var><a name="hostname" id="hostname">Hostname</a></var></dt>
+ <dd>
+ <p>A <dfn>Hostname</dfn> is a fully qualified DNS domain name which can
+ be resolved to one or more <var><a href="#ipaddr">IPAddrs</a></var> via the
+ DNS domain name service. It represents a logical host (in contrast to
+ <var><a href="#domain">Domain</a></var>s, see above) and must be resolvable
+ to at least one <var><a href="#ipaddr">IPAddr</a></var> (or often to a list
+ of hosts with different <var><a href="#ipaddr">IPAddr</a></var>s).</p>
- <p>Using explicitly configured workers in the forward mode is
- not very common, because forward proxies usually communicate with many
- different origin servers. Creating explicit workers for some of the
- origin servers can still be useful, if they are used very often.
- Explicitly configured workers have no concept of forward or reverse
- proxying by themselves. They encapsulate a common concept of
- communication with origin servers. A worker created by
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> for use in a
- reverse proxy will be also used for forward proxy requests whenever
- the URL to the origin server matches the worker URL and vice versa.</p>
+ <div class="example"><h3>Examples</h3><p><code>
+ prep.ai.example.edu<br />
+ www.example.org
+ </code></p></div>
- <p>The URL identifying a direct worker is the URL of its
- origin server including any path components given:</p>
+ <div class="note"><h3>Note</h3>
+ <p>In many situations, it is more effective to specify an <var><a href="#ipaddr">IPAddr</a></var> in place of a <var>Hostname</var> since a
+ DNS lookup can be avoided. Name resolution in Apache httpd can take a remarkable
+ deal of time when the connection to the name server uses a slow PPP
+ link.</p>
+ <p><var>Hostname</var> comparisons are done without regard to the case,
+ and <var>Hostname</var>s are always assumed to be anchored in the root
+ of the DNS tree, therefore two hosts <code>WWW.ExAmple.com</code>
+ and <code>www.example.com.</code> (note the trailing period) are
+ considered equal.</p>
+ </div></dd>
+ </dl>
- <pre class="prettyprint lang-config">ProxyPass /examples http://backend.example.com/examples
-ProxyPass /docs http://backend.example.com/docs</pre>
+<h3>See also</h3>
+<ul>
+<li><a href="../dns-caveats.html">DNS Issues</a></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Proxy" id="Proxy"><Proxy></a> <a name="proxy" id="proxy">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to proxied resources</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code><Proxy <var>wildcard-url</var>> ...</Proxy></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>Directives placed in <code class="directive"><Proxy></code>
+ sections apply only to matching proxied content. Shell-style wildcards are
+ allowed.</p>
+ <p>For example, the following will allow only hosts in
+ <code>yournetwork.example.com</code> to access content via your proxy
+ server:</p>
- <p>This example defines two different workers, each using a separate
- connection pool and configuration.</p>
+ <pre class="prettyprint lang-config"><Proxy *>
+ Require host yournetwork.example.com
+</Proxy></pre>
- <div class="warning"><h3>Worker Sharing</h3>
- <p>Worker sharing happens if the worker URLs overlap, which occurs when
- the URL of some worker is a leading substring of the URL of another
- worker defined later in the configuration file. In the following example</p>
- <pre class="prettyprint lang-config">ProxyPass /apps http://backend.example.com/ timeout=60
-ProxyPass /examples http://backend.example.com/examples timeout=10</pre>
+ <p>The following example will process all files in the <code>foo</code>
+ directory of <code>example.com</code> through the <code>INCLUDES</code>
+ filter when they are sent through the proxy server:</p>
+ <pre class="prettyprint lang-config"><Proxy http://example.com/foo/*>
+ SetOutputFilter INCLUDES
+</Proxy></pre>
- <p>the second worker isn't actually created. Instead the first
- worker is used. The benefit is, that there is only one connection pool,
- so connections are more often reused. Note that all configuration attributes
- given explicitly for the later worker will be ignored. This will be logged
- as a warning. In the above example the resulting timeout value
- for the URL <code>/examples</code> will be <code>60</code> instead
- of <code>10</code>!</p>
- <p>If you want to avoid worker sharing, sort your worker definitions
- by URL length, starting with the longest worker URLs. If you want to maximize
- worker sharing use the reverse sort order. See also the related warning about
- ordering <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p>
+ <p>The next example will allow web clients from the specified IP
+ addresses to issue <code>CONNECT</code> requests to access the
+ <code>https://www.example.com/</code> SSL server, if
+ <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> is enabled.
+ </p>
- </div>
+ <pre class="prettyprint lang-config"><Proxy www.example.com:443>
+ Require ip 192.168.0.0/16
+</Proxy></pre>
- <p>Explicitly configured workers come in two flavors:
- <dfn>direct workers</dfn> and <dfn>(load) balancer workers</dfn>.
- They support many important configuration attributes which are
- described below in the <code class="directive"><a href="#proxypass">ProxyPass</a></code>
- directive. The same attributes can also be set using
- <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p>
- <p>The set of options available for a direct worker
- depends on the protocol, which is specified in the origin server URL.
- Available protocols include <code>ajp</code>, <code>fcgi</code>,
- <code>ftp</code>, <code>http</code> and <code>scgi</code>.</p>
+ <div class="note"><h3>Differences from the Location configuration section</h3>
+ <p>A backend URL matches the configuration section if it begins with the
+ the <var>wildcard-url</var> string, even if the last path segment in the
+ directive only matches a prefix of the backend URL. For example,
+ <Proxy http://example.com/foo> matches all of
+ http://example.com/foo, http://example.com/foo/bar, and
+ http://example.com/foobar. The matching of the final URL differs
+ from the behavior of the <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, which for purposes of this note
+ treats the final path component as if it ended in a slash.</p>
+ <p>For more control over the matching, see <code class="directive"><ProxyMatch></code>.</p>
+ </div>
- <p>Balancer workers are virtual workers that use direct workers known
- as their members to actually handle the requests. Each balancer can
- have multiple members. When it handles a request, it chooses a member
- based on the configured load balancing algorithm.</p>
- <p>A balancer worker is created if its worker URL uses
- <code>balancer</code> as the protocol scheme.
- The balancer URL uniquely identifies the balancer worker.
- Members are added to a balancer using
- <code class="directive"><a href="#balancermember">BalancerMember</a></code>.</p>
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#proxymatch"><ProxyMatch></a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyAddHeaders" id="ProxyAddHeaders">ProxyAddHeaders</a> <a name="proxyaddheaders" id="proxyaddheaders">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add proxy information in X-Forwarded-* headers</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyAddHeaders Off|On</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyAddHeaders On</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.10 and later</td></tr>
+</table>
+ <p>This directive determines whether or not proxy related information should be passed to the
+ backend server through X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server HTTP headers.</p>
+ <div class="note"><h3>Effectiveness</h3>
+ <p>This option is of use only for HTTP proxying, as handled by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p>
+ </div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="access" id="access">Controlling access to your proxy</a></h2>
- <p>You can control who can access your proxy via the <code class="directive"><a href="#proxy"><Proxy></a></code> control block as in
- the following example:</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyBadHeader" id="ProxyBadHeader">ProxyBadHeader</a> <a name="proxybadheader" id="proxybadheader">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines how to handle bad header lines in a
+response</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyBadHeader IsError</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>The <code class="directive">ProxyBadHeader</code> directive determines the
+ behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> if it receives syntactically invalid
+ response header lines (<em>i.e.</em> containing no colon) from the origin
+ server. The following arguments are possible:</p>
- <pre class="prettyprint lang-config"><Proxy *>
- Require ip 192.168.0
-</Proxy></pre>
+ <dl>
+ <dt><code>IsError</code></dt>
+ <dd>Abort the request and end up with a 502 (Bad Gateway) response. This is
+ the default behaviour.</dd>
+ <dt><code>Ignore</code></dt>
+ <dd>Treat bad header lines as if they weren't sent.</dd>
- <p>For more information on access control directives, see
- <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p>
+ <dt><code>StartBody</code></dt>
+ <dd>When receiving the first bad header line, finish reading the headers and
+ treat the remainder as body. This helps to work around buggy backend servers
+ which forget to insert an empty line between the headers and the body.</dd>
+ </dl>
- <p>Strictly limiting access is essential if you are using a
- forward proxy (using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive).
- Otherwise, your server can be used by any client to access
- arbitrary hosts while hiding his or her true identity. This is
- dangerous both for your network and for the Internet at large.
- When using a reverse proxy (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive with
- <code>ProxyRequests Off</code>), access control is less
- critical because clients can only contact the hosts that you
- have specifically configured.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyBlock" id="ProxyBlock">ProxyBlock</a> <a name="proxyblock" id="proxyblock">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Disallow proxy requests to certain hosts</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBlock *|<var>hostname</var>|<var>partial-hostname</var> [<var>hostname</var>|<var>partial-hostname</var>]...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>The <code class="directive">ProxyBlock</code> directive can be used to
+ block FTP or HTTP access to certain hosts via the proxy, based on
+ a full or partial hostname match, or, if applicable, an IP address
+ comparison.</p>
- <p><strong>See Also</strong> the <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a> environment variable.</p>
+ <p>Each of the arguments to the <code class="directive">ProxyBlock</code>
+ directive can be either <code>*</code> or a alphanumeric string.
+ At startup, the module will attempt to resolve every alphanumeric
+ string from a DNS name to a set of IP addresses, but any DNS errors
+ are ignored.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">Slow Startup</a></h2>
- <p>If you're using the <code class="directive"><a href="#proxyblock">ProxyBlock</a></code> directive, hostnames' IP addresses are looked up
- and cached during startup for later match test. This may take a few
- seconds (or more) depending on the speed with which the hostname lookups
- occur.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intranet" id="intranet">Intranet Proxy</a></h2>
- <p>An Apache httpd proxy server situated in an intranet needs to forward
- external requests through the company's firewall (for this, configure
- the <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive
- to forward the respective <var>scheme</var> to the firewall proxy).
- However, when it has to
- access resources within the intranet, it can bypass the firewall when
- accessing hosts. The <code class="directive"><a href="#noproxy">NoProxy</a></code>
- directive is useful for specifying which hosts belong to the intranet and
- should be accessed directly.</p>
+ <p>If an asterisk "<code>*</code>" argument is specified,
+ <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> will deny access to all FTP or HTTP
+ sites.</p>
- <p>Users within an intranet tend to omit the local domain name from their
- WWW requests, thus requesting "http://somehost/" instead of
- <code>http://somehost.example.com/</code>. Some commercial proxy servers
- let them get away with this and simply serve the request, implying a
- configured local domain. When the <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> directive is used and the server is <a href="#proxyrequests">configured for proxy service</a>, Apache httpd can return
- a redirect response and send the client to the correct, fully qualified,
- server address. This is the preferred method since the user's bookmark
- files will then contain fully qualified hosts.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="envsettings" id="envsettings">Protocol Adjustments</a></h2>
- <p>For circumstances where <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> is sending
- requests to an origin server that doesn't properly implement
- keepalives or HTTP/1.1, there are two <a href="../env.html">environment variables</a> that can force the
- request to use HTTP/1.0 with no keepalive. These are set via the
- <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> directive.</p>
-
- <p>These are the <code>force-proxy-request-1.0</code> and
- <code>proxy-nokeepalive</code> notes.</p>
-
- <pre class="prettyprint lang-config"><Location /buggyappserver/>
- ProxyPass http://buggyappserver:7001/foo/
- SetEnv force-proxy-request-1.0 1
- SetEnv proxy-nokeepalive 1
-</Location></pre>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="request-bodies" id="request-bodies">Request Bodies</a></h2>
-
- <p>Some request methods such as POST include a request body.
- The HTTP protocol requires that requests which include a body
- either use chunked transfer encoding or send a
- <code>Content-Length</code> request header. When passing these
- requests on to the origin server, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
- will always attempt to send the <code>Content-Length</code>. But
- if the body is large and the original request used chunked
- encoding, then chunked encoding may also be used in the upstream
- request. You can control this selection using <a href="../env.html">environment variables</a>. Setting
- <code>proxy-sendcl</code> ensures maximum compatibility with
- upstream servers by always sending the
- <code>Content-Length</code>, while setting
- <code>proxy-sendchunked</code> minimizes resource usage by using
- chunked encoding.</p>
+ <p>Otherwise, for any request for an HTTP or FTP resource via the
+ proxy, <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> will check the hostname of the
+ request URI against each specified string. If a partial string
+ match is found, access is denied. If no matches against hostnames
+ are found, and a remote (forward) proxy is configured using
+ <code class="directive">ProxyRemote</code> or
+ <code class="directive">ProxyRemoteMatch</code>, access is allowed. If no
+ remote (forward) proxy is configured, the IP address of the
+ hostname from the URI is compared against all resolved IP
+ addresses determined at startup. Access is denied if any match is
+ found.</p>
- <p>Under some circumstances, the server must spool request bodies
- to disk to satisfy the requested handling of request bodies. For
- example, this spooling will occur if the original body was sent with
- chunked encoding (and is large), but the administrator has
- asked for backend requests to be sent with Content-Length or as HTTP/1.0.
- This spooling can also occur if the request body already has a
- Content-Length header, but the server is configured to filter incoming
- request bodies.</p>
+ <p>Note that the DNS lookups may slow down the startup time of the
+ server.</p>
- <p><code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code> only applies to
- request bodies that the server will spool to disk</p>
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyBlock news.example.com auctions.example.com friends.example.com</pre>
+</div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="x-headers" id="x-headers">Reverse Proxy Request Headers</a></h2>
+ <p>Note that <code>example</code> would also be sufficient to match any
+ of these sites.</p>
- <p>When acting in a reverse-proxy mode (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive, for example),
- <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> adds several request headers in
- order to pass information to the origin server. These headers
- are:</p>
+ <p>Hosts would also be matched if referenced by IP address.</p>
- <dl>
- <dt><code>X-Forwarded-For</code></dt>
- <dd>The IP address of the client.</dd>
- <dt><code>X-Forwarded-Host</code></dt>
- <dd>The original host requested by the client in the <code>Host</code>
- HTTP request header.</dd>
- <dt><code>X-Forwarded-Server</code></dt>
- <dd>The hostname of the proxy server.</dd>
- </dl>
+ <p>Note also that</p>
- <p>Be careful when using these headers on the origin server, since
- they will contain more than one (comma-separated) value if the
- original request already contained one of these headers. For
- example, you can use <code>%{X-Forwarded-For}i</code> in the log
- format string of the origin server to log the original clients IP
- address, but you may get more than one address if the request
- passes through several proxies.</p>
+ <pre class="prettyprint lang-config">ProxyBlock *</pre>
- <p>See also the <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code> and <code class="directive"><a href="#proxyvia">ProxyVia</a></code> directives, which control
- other request headers.</p>
- <p>Note: If you need to specify custom request headers to be
- added to the forwarded request, use the
- <code class="directive"><a href="../mod/mod_headers.html#requestheader">RequestHeader</a></code>
- directive.</p>
+ <p>blocks connections to all sites.</p>
- </div>
+</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a> <a name="balancergrowth" id="balancergrowth">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyDomain" id="ProxyDomain">ProxyDomain</a> <a name="proxydomain" id="proxydomain">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of additional Balancers that can be added Post-configuration</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerGrowth <var>#</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerGrowth 5</code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default domain name for proxied requests</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyDomain <var>Domain</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerGrowth is only available in Apache HTTP Server 2.3.13
- and later.</td></tr>
</table>
- <p>This directive allows for growth potential in the number of
- Balancers available for a virtualhost in addition to the
- number pre-configured. It only takes effect if there is at
- least 1 pre-configured Balancer.</p>
+ <p>This directive is only useful for Apache httpd proxy servers within
+ intranets. The <code class="directive">ProxyDomain</code> directive specifies
+ the default domain which the apache proxy server will belong to. If a
+ request to a host without a domain name is encountered, a redirection
+ response to the same host with the configured <var>Domain</var> appended
+ will be generated.</p>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config"> ProxyRemote * http://firewall.example.com:81<br />
+ NoProxy .example.com 192.168.112.0/21<br />
+ ProxyDomain .example.com</pre>
+</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BalancerInherit" id="BalancerInherit">BalancerInherit</a> <a name="balancerinherit" id="balancerinherit">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyErrorOverride" id="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride" id="proxyerroroverride">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Inherit proxy Balancers/Workers defined from the main server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerInherit On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerInherit On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Override error pages for proxied content</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyErrorOverride On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyErrorOverride Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.4.5 and later.</td></tr>
</table>
- <p>This directive will cause the current server/vhost to "inherit"
- Balancers and Workers defined in the main server. This can cause issues and
- inconsistent behavior if using the Balancer Manager for dynamic changes
- and so should be disabled if using that feature.</p>
- <p>The setting in the global server defines the default for all vhosts.</p>
- <p>Disabling <code class="directive"><a href="#proxypassinherit">ProxyPassInherit</a></code> also disables BalancerInherit.</p>
-
+ <p>This directive is useful for reverse-proxy setups, where you want to
+ have a common look and feel on the error pages seen by the end user.
+ This also allows for included files (via
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>'s SSI) to get
+ the error code and act accordingly (default behavior would display
+ the error page of the proxied server, turning this on shows the SSI
+ Error message).</p>
+
+ <p>This directive does not affect the processing of informational (1xx),
+ normal success (2xx), or redirect (3xx) responses.</p>
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BalancerMember" id="BalancerMember">BalancerMember</a> <a name="balancermember" id="balancermember">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a> <a name="proxyiobuffersize" id="proxyiobuffersize">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a member to a load balancing group</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerMember [<var>balancerurl</var>] <var>url</var> [<var>key=value [key=value ...]]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine size of internal data throughput buffer</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyIOBufferSize <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>This directive adds a member to a load balancing group. It could be used
- within a <code><Proxy <var>balancer://</var>...></code> container
- directive, and can take any of the key value pair parameters available to
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p>
- <p>One additional parameter is available only to <code class="directive">BalancerMember</code> directives:
- <var>loadfactor</var>. This is the member load factor - a number between 1
- (default) and 100, which defines the weighted load to be applied to the
- member in question.</p>
- <p>The <var>balancerurl</var> is only needed when not in <code><Proxy <var>balancer://</var>...></code>
- container directive. It corresponds to the url of a balancer defined in
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
- <p>The path component of the balancer URL in any
- <code><Proxy <var>balancer://</var>...></code> container directive
- is ignored.</p>
- <p>Trailing slashes should typically be removed from the URL of a
- <code class="directive">BalancerMember</code>.</p>
-
+ <p>The <code class="directive">ProxyIOBufferSize</code> directive adjusts the size
+ of the internal buffer, which is used as a scratchpad for the data between
+ input and output. The size must be at least <code>512</code>.</p>
+
+ <p>In almost every case there's no reason to change that value.</p>
+
+ <p>If used with AJP this directive sets the maximum AJP packet size in
+ bytes. Values larger than 65536 are set to 65536. If you change it from
+ the default, you must also change the <code>packetSize</code> attribute of
+ your AJP connector on the Tomcat side! The attribute
+ <code>packetSize</code> is only available in Tomcat <code>5.5.20+</code>
+ and <code>6.0.2+</code></p>
+
+ <p>Normally it is not necessary to change the maximum packet size.
+ Problems with the default value have been reported when sending
+ certificates or certificate chains.</p>
+
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BalancerPersist" id="BalancerPersist">BalancerPersist</a> <a name="balancerpersist" id="balancerpersist">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyMatch" id="ProxyMatch"><ProxyMatch></a> <a name="proxymatch" id="proxymatch">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Attempt to persist changes made by the Balancer Manager across restarts.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerPersist On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerPersist Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to regular-expression-matched
+proxied resources</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code><ProxyMatch <var>regex</var>> ...</ProxyMatch></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.</td></tr>
</table>
- <p>This directive will cause the shared memory storage associated
- with the balancers and balancer members to be persisted across
- restarts. This allows these local changes to not be lost during the
- normal restart/graceful state transitions.</p>
-
+ <p>The <code class="directive"><ProxyMatch></code> directive is
+ identical to the <code class="directive"><a href="#proxy"><Proxy></a></code> directive, except it matches URLs
+ using <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expressions</a>.</p>
+
+ <p>From 2.4.8 onwards, named groups and backreferences are captured and
+ written to the environment with the corresponding name prefixed with
+ "MATCH_" and in upper case. This allows elements of URLs to be referenced
+ from within <a href="../expr.html">expressions</a> and modules like
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. In order to prevent confusion, numbered
+ (unnamed) backreferences are ignored. Use named groups instead.</p>
+
+<pre class="prettyprint lang-config"><ProxyMatch ^http://(?<sitename>[^/]+)>
+ require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
+</ProxyMatch></pre>
+
+
+<h3>See also</h3>
+<ul>
+<li><code class="directive"><a href="#proxy"><Proxy></a></code></li>
+</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NoProxy" id="NoProxy">NoProxy</a> <a name="noproxy" id="noproxy">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyMaxForwards" id="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards" id="proxymaxforwards">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Hosts, domains, or networks that will be connected to
-directly</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NoProxy <var>host</var> [<var>host</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximium number of proxies that a request can be forwarded
+through</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyMaxForwards <var>number</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyMaxForwards -1</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>This directive is only useful for Apache httpd proxy servers within
- intranets. The <code class="directive">NoProxy</code> directive specifies a
- list of subnets, IP addresses, hosts and/or domains, separated by
- spaces. A request to a host which matches one or more of these is
- always served directly, without forwarding to the configured
- <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> proxy server(s).</p>
+ <p>The <code class="directive">ProxyMaxForwards</code> directive specifies the
+ maximum number of proxies through which a request may pass, if there's no
+ <code>Max-Forwards</code> header supplied with the request. This may
+ be set to prevent infinite proxy loops, or a DoS attack.</p>
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyRemote * http://firewall.example.com:81
-NoProxy .example.com 192.168.112.0/21</pre>
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyMaxForwards 15</pre>
</div>
- <p>The <var>host</var> arguments to the <code class="directive">NoProxy</code>
- directive are one of the following type list:</p>
+ <p>Note that setting <code class="directive">ProxyMaxForwards</code> is a
+ violation of the HTTP/1.1 protocol (RFC2616), which forbids a Proxy
+ setting <code>Max-Forwards</code> if the Client didn't set it.
+ Earlier Apache httpd versions would always set it. A negative
+ <code class="directive">ProxyMaxForwards</code> value, including the
+ default -1, gives you protocol-compliant behaviour, but may
+ leave you open to loops.</p>
- <dl>
-
- <dt><var><a name="domain" id="domain">Domain</a></var></dt>
- <dd>
- <p>A <dfn>Domain</dfn> is a partially qualified DNS domain name, preceded
- by a period. It represents a list of hosts which logically belong to the
- same DNS domain or zone (<em>i.e.</em>, the suffixes of the hostnames are
- all ending in <var>Domain</var>).</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyPass" id="ProxyPass">ProxyPass</a> <a name="proxypass" id="proxypass">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var>
+ <var>[key=value</var> ...]] [nocanon] [interpolate] [noquery]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Unix Domain Socket (UDS) support added in 2.4.7</td></tr>
+</table>
+ <p>This directive allows remote servers to be mapped into the
+ space of the local server; the local server does not act as a
+ proxy in the conventional sense, but appears to be a mirror of the
+ remote server. The local server is often called a <dfn>reverse
+ proxy</dfn> or <dfn>gateway</dfn>. The <var>path</var> is the name of
+ a local virtual path; <var>url</var> is a partial URL for the
+ remote server and cannot include a query string.</p>
- <div class="example"><h3>Examples</h3><p><code>
- .com .example.org.
- </code></p></div>
+ <div class="note"><strong>Note: </strong>This directive cannot be used within a
+ <code><Directory></code> context.</div>
- <p>To distinguish <var>Domain</var>s from <var><a href="#hostname">Hostname</a></var>s (both syntactically and semantically; a DNS domain can
- have a DNS A record, too!), <var>Domain</var>s are always written with a
- leading period.</p>
+ <div class="warning">The <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive should
+ usually be set <strong>off</strong> when using
+ <code class="directive">ProxyPass</code>.</div>
- <div class="note"><h3>Note</h3>
- <p>Domain name comparisons are done without regard to the case, and
- <var>Domain</var>s are always assumed to be anchored in the root of the
- DNS tree, therefore two domains <code>.ExAmple.com</code> and
- <code>.example.com.</code> (note the trailing period) are considered
- equal. Since a domain comparison does not involve a DNS lookup, it is much
- more efficient than subnet comparison.</p>
- </div></dd>
+ <p>In 2.4.7 and later, support for using a Unix Domain Socket is available by using a target
+ which prepends <code>unix:/path/lis.sock|</code>. For example, to proxy
+ HTTP and target the UDS at /home/www/socket you would use
+ <code>unix:/home/www.socket|http://localhost/whatever/</code>. Since
+ the socket is local, the hostname used (in this case <code>localhost</code>)
+ is moot, but it is passed as the Host: header value of the request.</p>
-
- <dt><var><a name="subnet" id="subnet">SubNet</a></var></dt>
- <dd>
- <p>A <dfn>SubNet</dfn> is a partially qualified internet address in
- numeric (dotted quad) form, optionally followed by a slash and the netmask,
- specified as the number of significant bits in the <var>SubNet</var>. It is
- used to represent a subnet of hosts which can be reached over a common
- network interface. In the absence of the explicit net mask it is assumed
- that omitted (or zero valued) trailing digits specify the mask. (In this
- case, the netmask can only be multiples of 8 bits wide.) Examples:</p>
+ <div class="note"><strong>Note:</strong> The path associated with the <code>unix:</code>
+ URL is <code class="directive">DefaultRuntimeDir</code> aware.</div>
- <dl>
- <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
- <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
- (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
- <dt><code>192.168.112.0/21</code></dt>
- <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
- valid bits (also used in the form <code>255.255.248.0</code>)</dd>
- </dl>
+ <div class="note"><strong>Note:</strong> <code class="directive">RewriteRule</code> requires
+ the <code>[P,NE]</code> option to prevent the <code>'|'</code> character
+ from being escaped.</div>
- <p>As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
- equivalent to an <var><a href="#ipaddr">IPAddr</a></var>, while a <var>SubNet</var> with zero
- valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
- <var>_Default_</var>, matching any IP address.</p></dd>
+ <p>Suppose the local server has address <code>http://example.com/</code>;
+ then</p>
-
- <dt><var><a name="ipaddr" id="ipaddr">IPAddr</a></var></dt>
- <dd>
- <p>A <dfn>IPAddr</dfn> represents a fully qualified internet address in
- numeric (dotted quad) form. Usually, this address represents a host, but
- there need not necessarily be a DNS domain name connected with the
- address.</p>
- <div class="example"><h3>Example</h3><p><code>
- 192.168.123.7
- </code></p></div>
+ <pre class="prettyprint lang-config"><Location /mirror/foo/>
+ ProxyPass http://backend.example.com/
+</Location></pre>
- <div class="note"><h3>Note</h3>
- <p>An <var>IPAddr</var> does not need to be resolved by the DNS system, so
- it can result in more effective apache performance.</p>
- </div></dd>
-
- <dt><var><a name="hostname" id="hostname">Hostname</a></var></dt>
- <dd>
- <p>A <dfn>Hostname</dfn> is a fully qualified DNS domain name which can
- be resolved to one or more <var><a href="#ipaddr">IPAddrs</a></var> via the
- DNS domain name service. It represents a logical host (in contrast to
- <var><a href="#domain">Domain</a></var>s, see above) and must be resolvable
- to at least one <var><a href="#ipaddr">IPAddr</a></var> (or often to a list
- of hosts with different <var><a href="#ipaddr">IPAddr</a></var>s).</p>
+ <p>will cause a local request for
+ <code>http://example.com/mirror/foo/bar</code> to be internally converted
+ into a proxy request to <code>http://backend.example.com/bar</code>.</p>
- <div class="example"><h3>Examples</h3><p><code>
- prep.ai.example.edu<br />
- www.example.org
- </code></p></div>
+ <p>The following alternative syntax is possible, however it can carry a
+ performance penalty when present in very large numbers. The advantage of
+ the below syntax is that it allows for dynamic control via the
+ <a href="mod_proxy_balancer.html#balancer_manager">Balancer Manager</a> interface:</p>
- <div class="note"><h3>Note</h3>
- <p>In many situations, it is more effective to specify an <var><a href="#ipaddr">IPAddr</a></var> in place of a <var>Hostname</var> since a
- DNS lookup can be avoided. Name resolution in Apache httpd can take a remarkable
- deal of time when the connection to the name server uses a slow PPP
- link.</p>
- <p><var>Hostname</var> comparisons are done without regard to the case,
- and <var>Hostname</var>s are always assumed to be anchored in the root
- of the DNS tree, therefore two hosts <code>WWW.ExAmple.com</code>
- and <code>www.example.com.</code> (note the trailing period) are
- considered equal.</p>
- </div></dd>
- </dl>
+ <pre class="prettyprint lang-config">ProxyPass /mirror/foo/ http://backend.example.com/</pre>
-<h3>See also</h3>
-<ul>
-<li><a href="../dns-caveats.html">DNS Issues</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Proxy" id="Proxy"><Proxy></a> <a name="proxy" id="proxy">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to proxied resources</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code><Proxy <var>wildcard-url</var>> ...</Proxy></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Directives placed in <code class="directive"><Proxy></code>
- sections apply only to matching proxied content. Shell-style wildcards are
- allowed.</p>
- <p>For example, the following will allow only hosts in
- <code>yournetwork.example.com</code> to access content via your proxy
- server:</p>
+ <div class="warning">
+ <p>If the first argument ends with a trailing <strong>/</strong>, the second
+ argument should also end with a trailing <strong>/</strong> and vice
+ versa. Otherwise the resulting requests to the backend may miss some
+ needed slashes and do not deliver the expected results.
+ </p>
+ </div>
- <pre class="prettyprint lang-config"><Proxy *>
- Require host yournetwork.example.com
-</Proxy></pre>
+ <p>The <code>!</code> directive is useful in situations where you don't want
+ to reverse-proxy a subdirectory, <em>e.g.</em></p>
+ <pre class="prettyprint lang-config"><Location /mirror/foo/>
+ ProxyPass http://backend.example.com/
+</Location>
+<Location /mirror/foo/i>
+ ProxyPass !
+</Location></pre>
- <p>The following example will process all files in the <code>foo</code>
- directory of <code>example.com</code> through the <code>INCLUDES</code>
- filter when they are sent through the proxy server:</p>
- <pre class="prettyprint lang-config"><Proxy http://example.com/foo/*>
- SetOutputFilter INCLUDES
-</Proxy></pre>
+ <pre class="prettyprint lang-config">ProxyPass /mirror/foo/i !
+ProxyPass /mirror/foo http://backend.example.com</pre>
- <p>The next example will allow web clients from the specified IP
- addresses to issue <code>CONNECT</code> requests to access the
- <code>https://www.example.com/</code> SSL server, if
- <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> is enabled.
- </p>
+ <p>will proxy all requests to <code>/mirror/foo</code> to
+ <code>backend.example.com</code> <em>except</em> requests made to
+ <code>/mirror/foo/i</code>.</p>
- <pre class="prettyprint lang-config"><Proxy www.example.com:443>
- Require ip 192.168.0.0/16
-</Proxy></pre>
+ <div class="warning"><h3>Ordering ProxyPass Directives</h3>
+ <p>The configured <code class="directive"><a href="#proxypass">ProxyPass</a></code>
+ and <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code>
+ rules are checked in the order of configuration. The first rule that
+ matches wins. So usually you should sort conflicting
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> rules starting with the
+ longest URLs first. Otherwise later rules for longer URLS will be hidden
+ by any earlier rule which uses a leading substring of the URL. Note that
+ there is some relation with worker sharing. In contrast, only one
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive can be placed
+ in a <code class="directive"><a href="../mod/core.html#location">Location</a></code> block, and the most
+ specific location will take precedence.</p>
+ <p>For the same reasons exclusions must come <em>before</em> the
+ general <code class="directive">ProxyPass</code> directives.</p>
- <div class="note"><h3>Differences from the Location configuration section</h3>
- <p>A backend URL matches the configuration section if it begins with the
- the <var>wildcard-url</var> string, even if the last path segment in the
- directive only matches a prefix of the backend URL. For example,
- <Proxy http://example.com/foo> matches all of
- http://example.com/foo, http://example.com/foo/bar, and
- http://example.com/foobar. The matching of the final URL differs
- from the behavior of the <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, which for purposes of this note
- treats the final path component as if it ended in a slash.</p>
- <p>For more control over the matching, see <code class="directive"><ProxyMatch></code>.</p>
- </div>
+ </div>
+ <p>In Apache HTTP Server 2.1 and later, mod_proxy supports pooled
+ connections to a backend server. Connections created on demand
+ can be retained in a pool for future use. Limits on the pool size
+ and other settings can be coded on
+ the <code class="directive">ProxyPass</code> directive
+ using <code>key=value</code> parameters, described in the table
+ below.</p>
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#proxymatch"><ProxyMatch></a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyAddHeaders" id="ProxyAddHeaders">ProxyAddHeaders</a> <a name="proxyaddheaders" id="proxyaddheaders">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add proxy information in X-Forwarded-* headers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyAddHeaders Off|On</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyAddHeaders On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.10 and later</td></tr>
-</table>
- <p>This directive determines whether or not proxy related information should be passed to the
- backend server through X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server HTTP headers.</p>
- <div class="note"><h3>Effectiveness</h3>
- <p>This option is of use only for HTTP proxying, as handled by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p>
- </div>
+ <p>By default, mod_proxy will allow and retain the maximum number of
+ connections that could be used simultaneously by that web server child
+ process. Use the <code>max</code> parameter to reduce the number from
+ the default. Use the <code>ttl</code> parameter to set an optional
+ time to live; connections which have been unused for at least
+ <code>ttl</code> seconds will be closed. <code>ttl</code> can be used
+ to avoid using a connection which is subject to closing because of the
+ backend server's keep-alive timeout.</p>
+
+ <p>The pool of connections is maintained per web server child
+ process, and <code>max</code> and other settings are not coordinated
+ among all child processes, except when only one child process is allowed
+ by configuration or MPM design.</p>
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyPass /example http://backend.example.com max=20 ttl=120 retry=300</pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyBadHeader" id="ProxyBadHeader">ProxyBadHeader</a> <a name="proxybadheader" id="proxybadheader">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines how to handle bad header lines in a
-response</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyBadHeader IsError</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyBadHeader</code> directive determines the
- behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> if it receives syntactically invalid
- response header lines (<em>i.e.</em> containing no colon) from the origin
- server. The following arguments are possible:</p>
-
- <dl>
- <dt><code>IsError</code></dt>
- <dd>Abort the request and end up with a 502 (Bad Gateway) response. This is
- the default behaviour.</dd>
-
- <dt><code>Ignore</code></dt>
- <dd>Treat bad header lines as if they weren't sent.</dd>
-
- <dt><code>StartBody</code></dt>
- <dd>When receiving the first bad header line, finish reading the headers and
- treat the remainder as body. This helps to work around buggy backend servers
- which forget to insert an empty line between the headers and the body.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyBlock" id="ProxyBlock">ProxyBlock</a> <a name="proxyblock" id="proxyblock">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Disallow proxy requests to certain hosts</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBlock *|<var>hostname</var>|<var>partial-hostname</var> [<var>hostname</var>|<var>partial-hostname</var>]...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyBlock</code> directive can be used to
- block FTP or HTTP access to certain hosts via the proxy, based on
- a full or partial hostname match, or, if applicable, an IP address
- comparison.</p>
-
- <p>Each of the arguments to the <code class="directive">ProxyBlock</code>
- directive can be either <code>*</code> or a alphanumeric string.
- At startup, the module will attempt to resolve every alphanumeric
- string from a DNS name to a set of IP addresses, but any DNS errors
- are ignored.</p>
-
- <p>If an asterisk "<code>*</code>" argument is specified,
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> will deny access to all FTP or HTTP
- sites.</p>
-
- <p>Otherwise, for any request for an HTTP or FTP resource via the
- proxy, <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> will check the hostname of the
- request URI against each specified string. If a partial string
- match is found, access is denied. If no matches against hostnames
- are found, and a remote (forward) proxy is configured using
- <code class="directive">ProxyRemote</code> or
- <code class="directive">ProxyRemoteMatch</code>, access is allowed. If no
- remote (forward) proxy is configured, the IP address of the
- hostname from the URI is compared against all resolved IP
- addresses determined at startup. Access is denied if any match is
- found.</p>
- <p>Note that the DNS lookups may slow down the startup time of the
- server.</p>
+ <table class="bordered"><tr><th>BalancerMember parameters</th></tr></table>
+ <table>
+ <tr><th>Parameter</th>
+ <th>Default</th>
+ <th>Description</th></tr>
+ <tr><td>min</td>
+ <td>0</td>
+ <td>Minimum number of connection pool entries, unrelated to the
+ actual number of connections. This only needs to be modified from the
+ default for special circumstances where heap memory associated with the
+ backend connections should be preallocated or retained.</td></tr>
+ <tr><td>max</td>
+ <td>1...n</td>
+ <td>Maximum number of connections that will be allowed to the
+ backend server. The default for this limit is the number of threads
+ per process in the active MPM. In the Prefork MPM, this is always 1,
+ while with other MPMs it is controlled by the
+ <code class="directive">ThreadsPerChild</code> directive.</td></tr>
+ <tr><td>smax</td>
+ <td>max</td>
+ <td>Retained connection pool entries above this limit are freed
+ during certain operations if they have been unused for longer than
+ the time to live, controlled by the <code>ttl</code> parameter. If
+ the connection pool entry has an associated connection, it will be
+ closed. This only needs to be modified from the default for special
+ circumstances where connection pool entries and any associated
+ connections which have exceeded the time to live need to be freed or
+ closed more aggressively.</td></tr>
+ <tr><td>acquire</td>
+ <td>-</td>
+ <td>If set this will be the maximum time to wait for a free
+ connection in the connection pool, in milliseconds. If there are no free
+ connections in the pool the Apache httpd will return <code>SERVER_BUSY</code>
+ status to the client.
+ </td></tr>
+ <tr><td>connectiontimeout</td>
+ <td>timeout</td>
+ <td>Connect timeout in seconds.
+ The number of seconds Apache httpd waits for the creation of a connection to
+ the backend to complete. By adding a postfix of ms the timeout can be
+ also set in milliseconds.
+ </td></tr>
+ <tr><td>disablereuse</td>
+ <td>Off</td>
+ <td>This parameter should be used when you want to force mod_proxy
+ to immediately close a connection to the backend after being used, and
+ thus, disable its persistent connection and pool for that backend.
+ This helps in various situations where a firewall between Apache
+ httpd and
+ the backend server (regardless of protocol) tends to silently
+ drop connections or when backends themselves may be under round-
+ robin DNS. To disable connection pooling reuse,
+ set this property value to <code>On</code>.
+ </td></tr>
+ <tr><td>enablereuse</td>
+ <td>On</td>
+ <td>This is the inverse of 'disablereuse' above, provided as a
+ convenience for scheme handlers that require opt-in for connection
+ reuse (such as <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code>).
+ </td></tr>
+ <tr><td>flushpackets</td>
+ <td>off</td>
+ <td>Determines whether the proxy module will auto-flush the output
+ brigade after each "chunk" of data. 'off' means that it will flush
+ only when needed, 'on' means after each chunk is sent and
+ 'auto' means poll/wait for a period of time and flush if
+ no input has been received for 'flushwait' milliseconds.
+ Currently this is in effect only for AJP.
+ </td></tr>
+ <tr><td>flushwait</td>
+ <td>10</td>
+ <td>The time to wait for additional input, in milliseconds, before
+ flushing the output brigade if 'flushpackets' is 'auto'.
+ </td></tr>
+ <tr><td>iobuffersize</td>
+ <td>8192</td>
+ <td>Adjusts the size of the internal scratchpad IO buffer. This allows you
+ to override the <code class="directive">ProxyIOBufferSize</code> for a specific worker.
+ This must be at least 512 or set to 0 for the system default of 8192.
+ </td></tr>
+ <tr><td>keepalive</td>
+ <td>Off</td>
+ <td><p>This parameter should be used when you have a firewall between your
+ Apache httpd and the backend server, who tend to drop inactive connections.
+ This flag will tell the Operating System to send <code>KEEP_ALIVE</code>
+ messages on inactive connections and thus prevent the firewall to drop the connection.
+ To enable keepalive set this property value to <code>On</code>. </p>
+ <p>The frequency of initial and subsequent TCP keepalive probes
+ depends on global OS settings, and may be as high as 2 hours. To be useful,
+ the frequency configured in the OS must be smaller than the threshold used
+ by the firewall.</p>
+ </td></tr>
+ <tr><td>lbset</td>
+ <td>0</td>
+ <td>Sets the load balancer cluster set that the worker is a member
+ of. The load balancer will try all members of a lower numbered
+ lbset before trying higher numbered ones.
+ </td></tr>
+ <tr><td>ping</td>
+ <td>0</td>
+ <td>Ping property tells the webserver to "test" the connection to
+ the backend before forwarding the request. For negative values
+ the test is a simple socket check, for positive values it's
+ a more functional check, dependent upon the protocol. For AJP, it causes
+ <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>to send a <code>CPING</code>
+ request on the ajp13 connection (implemented on Tomcat 3.3.2+, 4.1.28+
+ and 5.0.13+). For HTTP, it causes <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
+ to send a <code>100-Continue</code> to the backend (only valid for
+ HTTP/1.1 - for non HTTP/1.1 backends, this property has no
+ effect). In both cases the parameter is the delay in seconds to wait
+ for the reply.
+ This feature has been added to avoid problems with hung and
+ busy backends.
+ This will increase the network traffic during the normal operation
+ which could be an issue, but it will lower the
+ traffic in case some of the cluster nodes are down or busy.
+ By adding a postfix of ms the delay can be also set in
+ milliseconds.
+ </td></tr>
+ <tr><td>receivebuffersize</td>
+ <td>0</td>
+ <td>Adjusts the size of the explicit (TCP/IP) network buffer size for
+ proxied connections. This allows you to override the
+ <code class="directive">ProxyReceiveBufferSize</code> for a specific worker.
+ This must be at least 512 or set to 0 for the system default.
+ </td></tr>
+ <tr><td>redirect</td>
+ <td>-</td>
+ <td>Redirection Route of the worker. This value is usually
+ set dynamically to enable safe removal of the node from
+ the cluster. If set all requests without session id will be
+ redirected to the BalancerMember that has route parameter
+ equal as this value.
+ </td></tr>
+ <tr><td>retry</td>
+ <td>60</td>
+ <td>Connection pool worker retry timeout in seconds.
+ If the connection pool worker to the backend server is in the error state,
+ Apache httpd will not forward any requests to that server until the timeout
+ expires. This enables to shut down the backend server for maintenance,
+ and bring it back online later. A value of 0 means always retry workers
+ in an error state with no timeout.
+ </td></tr>
+ <tr><td>route</td>
+ <td>-</td>
+ <td>Route of the worker when used inside load balancer.
+ The route is a value appended to session id.
+ </td></tr>
+ <tr><td>status</td>
+ <td>-</td>
+ <td>Single letter value defining the initial status of
+ this worker.
+ <table>
+ <tr><td>D: Worker is disabled and will not accept any requests.</td></tr>
+ <tr><td>S: Worker is administratively stopped.</td></tr>
+ <tr><td>I: Worker is in ignore-errors mode, and will always be considered available.</td></tr>
+ <tr><td>H: Worker is in hot-standby mode and will only be used if no other
+ viable workers are available.</td></tr>
+ <tr><td>E: Worker is in an error state.</td></tr>
+ <tr><td>N: Worker is in drain mode, and will only accept existing sticky sessions
+ destined for itself and ignore all other requests.</td></tr>
+ </table>Status
+ can be set (which is the default) by prepending with '+' or
+ cleared by prepending with '-'.
+ Thus, a setting of 'S-E' sets this worker to Stopped and
+ clears the in-error flag.
+ </td></tr>
+ <tr><td>timeout</td>
+ <td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td>
+ <td>Connection timeout in seconds.
+ The number of seconds Apache httpd waits for data sent by / to the backend.
+ </td></tr>
+ <tr><td>ttl</td>
+ <td>-</td>
+ <td>Time to live for inactive connections and associated connection
+ pool entries, in seconds. Once reaching this limit, a
+ connection will not be used again; it will be closed at some
+ later time.
+ </td></tr>
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyBlock news.example.com auctions.example.com friends.example.com</pre>
-</div>
+ </table>
- <p>Note that <code>example</code> would also be sufficient to match any
- of these sites.</p>
+ <p>If the Proxy directive scheme starts with the
+ <code>balancer://</code> (eg: <code>balancer://cluster</code>,
+ any path information is ignored) then a virtual worker that does not really
+ communicate with the backend server will be created. Instead it is responsible
+ for the management of several "real" workers. In that case the special set of
+ parameters can be add to this virtual worker. See <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code>
+ for more information about how the balancer works.
+ </p>
+ <table class="bordered"><tr><th>Balancer parameters</th></tr></table>
+ <table>
+ <tr><th>Parameter</th>
+ <th>Default</th>
+ <th>Description</th></tr>
+ <tr><td>lbmethod</td>
+ <td>byrequests</td>
+ <td>Balancer load-balance method. Select the load-balancing scheduler
+ method to use. Either <code>byrequests</code>, to perform weighted
+ request counting, <code>bytraffic</code>, to perform weighted
+ traffic byte count balancing, or <code>bybusyness</code>, to perform
+ pending request balancing. Default is <code>byrequests</code>.
+ </td></tr>
+ <tr><td>maxattempts</td>
+ <td>One less than the number of workers, or 1 with a single worker.</td>
+ <td>Maximum number of failover attempts before giving up.
+ </td></tr>
+ <tr><td>nofailover</td>
+ <td>Off</td>
+ <td>If set to <code>On</code> the session will break if the worker is in
+ error state or disabled. Set this value to On if backend servers do not
+ support session replication.
+ </td></tr>
+ <tr><td>stickysession</td>
+ <td>-</td>
+ <td>Balancer sticky session name. The value is usually set to something
+ like <code>JSESSIONID</code> or <code>PHPSESSIONID</code>,
+ and it depends on the backend application server that support sessions.
+ If the backend application server uses different name for cookies
+ and url encoded id (like servlet containers) use | to to separate them.
+ The first part is for the cookie the second for the path.<br />
+ Available in Apache HTTP Server 2.4.4 and later.
+ </td></tr>
+ <tr><td>stickysessionsep</td>
+ <td>"."</td>
+ <td>Sets the separation symbol in the session cookie. Some backend application servers
+ do not use the '.' as the symbol. For example the Oracle Weblogic server uses
+ '!'. The correct symbol can be set using this option. The setting of 'Off'
+ signifies that no symbol is used.
+ </td></tr>
+ <tr><td>scolonpathdelim</td>
+ <td>Off</td>
+ <td>If set to <code>On</code> the semi-colon character ';' will be
+ used as an additional sticky session path delimiter/separator. This
+ is mainly used to emulate mod_jk's behavior when dealing with paths such
+ as <code>JSESSIONID=6736bcf34;foo=aabfa</code>
+ </td></tr>
+ <tr><td>timeout</td>
+ <td>0</td>
+ <td>Balancer timeout in seconds. If set this will be the maximum time
+ to wait for a free worker. Default is not to wait.
+ </td></tr>
+ <tr><td>failonstatus</td>
+ <td>-</td>
+ <td>A single or comma-separated list of HTTP status codes. If set this will
+ force the worker into error state when the backend returns any status code
+ in the list. Worker recovery behaves the same as other worker errors.
+ </td></tr>
+ <tr><td>failontimeout</td>
+ <td>Off</td>
+ <td>If set, an IO read timeout after a request is sent to the backend will
+ force the worker into error state. Worker recovery behaves the same as other
+ worker errors.<br />
+ Available in Apache HTTP Server 2.4.5 and later.
+ </td></tr>
+ <tr><td>nonce</td>
+ <td><auto></td>
+ <td>The protective nonce used in the <code>balancer-manager</code> application page.
+ The default is to use an automatically determined UUID-based
+ nonce, to provide for further protection for the page. If set,
+ then the nonce is set to that value. A setting of <code>None</code>
+ disables all nonce checking.
+ <div class="note"><h3>Note</h3>
+ <p>In addition to the nonce, the <code>balancer-manager</code> page
+ should be protected via an ACL.</p>
+ </div>
+ </td></tr>
+ <tr><td>growth</td>
+ <td>0</td>
+ <td>Number of additional BalancerMembers to allow to be added
+ to this balancer in addition to those defined at configuration.
+ </td></tr>
+ <tr><td>forcerecovery</td>
+ <td>On</td>
+ <td>Force the immediate recovery of all workers without considering the
+ retry parameter of the workers if all workers of a balancer are
+ in error state. There might be cases where an already overloaded backend
+ can get into deeper trouble if the recovery of all workers is enforced
+ without considering the retry parameter of each worker. In this case
+ set to <code>Off</code>.<br />
+ Available in Apache HTTP Server 2.4.2 and later.
+ </td></tr>
- <p>Hosts would also be matched if referenced by IP address.</p>
+ </table>
+ <p>A sample balancer setup</p>
+ <pre class="prettyprint lang-config">ProxyPass /special-area http://special.example.com smax=5 max=10
+ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On
+<Proxy balancer://mycluster>
+ BalancerMember ajp://1.2.3.4:8009
+ BalancerMember ajp://1.2.3.5:8009 loadfactor=20
+ # Less powerful server, don't send as many requests there,
+ BalancerMember ajp://1.2.3.6:8009 loadfactor=5
+</Proxy></pre>
- <p>Note also that</p>
- <pre class="prettyprint lang-config">ProxyBlock *</pre>
+ <p>Setting up a hot-standby, that will only be used if no other
+ members are available</p>
+ <pre class="prettyprint lang-config">ProxyPass / balancer://hotcluster/
+<Proxy balancer://hotcluster>
+ BalancerMember ajp://1.2.3.4:8009 loadfactor=1
+ BalancerMember ajp://1.2.3.5:8009 loadfactor=2
+ # The server below is on hot standby
+ BalancerMember ajp://1.2.3.6:8009 status=+H
+ ProxySet lbmethod=bytraffic
+</Proxy></pre>
- <p>blocks connections to all sites.</p>
+ <p>Normally, mod_proxy will canonicalise ProxyPassed URLs.
+ But this may be incompatible with some backends, particularly those
+ that make use of <var>PATH_INFO</var>. The optional <var>nocanon</var>
+ keyword suppresses this, and passes the URL path "raw" to the
+ backend. Note that may affect the security of your backend, as it
+ removes the normal limited protection against URL-based attacks
+ provided by the proxy.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyDomain" id="ProxyDomain">ProxyDomain</a> <a name="proxydomain" id="proxydomain">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default domain name for proxied requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyDomain <var>Domain</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive is only useful for Apache httpd proxy servers within
- intranets. The <code class="directive">ProxyDomain</code> directive specifies
- the default domain which the apache proxy server will belong to. If a
- request to a host without a domain name is encountered, a redirection
- response to the same host with the configured <var>Domain</var> appended
- will be generated.</p>
+ <p>Normally, mod_proxy will include the query string when
+ generating the <var>SCRIPT_FILENAME</var> environment variable.
+ The optional <var>noquery</var> keyword (available in
+ httpd 2.4.1 and later) prevents this.</p>
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config"> ProxyRemote * http://firewall.example.com:81<br />
- NoProxy .example.com 192.168.112.0/21<br />
- ProxyDomain .example.com</pre>
-</div>
+ <p>When used inside a <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, the first argument is omitted and the local
+ directory is obtained from the <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. The same will occur inside a
+ <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section,
+ however ProxyPass does not interpret the regexp as such, so it is necessary
+ to use <code class="directive">ProxyPassMatch</code> in this situation instead.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyErrorOverride" id="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride" id="proxyerroroverride">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Override error pages for proxied content</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyErrorOverride On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyErrorOverride Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive is useful for reverse-proxy setups, where you want to
- have a common look and feel on the error pages seen by the end user.
- This also allows for included files (via
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>'s SSI) to get
- the error code and act accordingly (default behavior would display
- the error page of the proxied server, turning this on shows the SSI
- Error message).</p>
+ <p>This directive is not supported in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or <code class="directive"><a href="../mod/core.html#files"><Files></a></code> sections.</p>
- <p>This directive does not affect the processing of informational (1xx),
- normal success (2xx), or redirect (3xx) responses.</p>
+ <p>If you require a more flexible reverse-proxy configuration, see the
+ <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the
+ <code>[P]</code> flag.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a> <a name="proxyiobuffersize" id="proxyiobuffersize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine size of internal data throughput buffer</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyIOBufferSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyIOBufferSize</code> directive adjusts the size
- of the internal buffer, which is used as a scratchpad for the data between
- input and output. The size must be at least <code>512</code>.</p>
+ <p>The optional <var>interpolate</var> keyword, in combination with
+ <code class="directive">ProxyPassInterpolateEnv</code> causes the ProxyPass
+ to interpolate environment variables, using the syntax
+ <var>${VARNAME}</var>. Note that many of the standard CGI-derived
+ environment variables will not exist when this interpolation happens,
+ so you may still have to resort to <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
+ for complex rules. Also note that interpolation is not supported
+ within the scheme portion of a URL. Dynamic determination of the
+ scheme can be accomplished with <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> as in the
+ following example.</p>
- <p>In almost every case there's no reason to change that value.</p>
+ <pre class="prettyprint lang-config">RewriteEngine On
- <p>If used with AJP this directive sets the maximum AJP packet size in
- bytes. Values larger than 65536 are set to 65536. If you change it from
- the default, you must also change the <code>packetSize</code> attribute of
- your AJP connector on the Tomcat side! The attribute
- <code>packetSize</code> is only available in Tomcat <code>5.5.20+</code>
- and <code>6.0.2+</code></p>
+RewriteCond %{HTTPS} =off
+RewriteRule . - [E=protocol:http]
+RewriteCond %{HTTPS} =on
+RewriteRule . - [E=protocol:https]
- <p>Normally it is not necessary to change the maximum packet size.
- Problems with the default value have been reported when sending
- certificates or certificate chains.</p>
+RewriteRule ^/mirror/foo/(.*) %{ENV:protocol}://backend.example.com/$1 [P]
+ProxyPassReverse /mirror/foo/ http://backend.example.com/
+ProxyPassReverse /mirror/foo/ https://backend.example.com/</pre>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyMatch" id="ProxyMatch"><ProxyMatch></a> <a name="proxymatch" id="proxymatch">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyPassInherit" id="ProxyPassInherit">ProxyPassInherit</a> <a name="proxypassinherit" id="proxypassinherit">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to regular-expression-matched
-proxied resources</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code><ProxyMatch <var>regex</var>> ...</ProxyMatch></code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Inherit ProxyPass directives defined from the main server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPassInherit On</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.4.5 and later.
+ and later.</td></tr>
</table>
- <p>The <code class="directive"><ProxyMatch></code> directive is
- identical to the <code class="directive"><a href="#proxy"><Proxy></a></code> directive, except it matches URLs
- using <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expressions</a>.</p>
-
- <p>From 2.4.8 onwards, named groups and backreferences are captured and
- written to the environment with the corresponding name prefixed with
- "MATCH_" and in upper case. This allows elements of URLs to be referenced
- from within <a href="../expr.html">expressions</a> and modules like
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. In order to prevent confusion, numbered
- (unnamed) backreferences are ignored. Use named groups instead.</p>
-
-<pre class="prettyprint lang-config"><ProxyMatch ^http://(?<sitename>[^/]+)>
- require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
-</ProxyMatch></pre>
-
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#proxy"><Proxy></a></code></li>
-</ul>
+ <p>This directive will cause the current server/vhost to "inherit"
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code>
+ directives defined in the main server. This can cause issues and
+ inconsistent behavior if using the Balancer Manager for dynamic changes
+ and so should be disabled if using that feature.</p>
+ <p>The setting in the global server defines the default for all vhosts.</p>
+ <p>Disabling ProxyPassInherit also disables <code class="directive"><a href="#balancerinherit">BalancerInherit</a></code>.</p>
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyMaxForwards" id="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards" id="proxymaxforwards">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a> <a name="proxypassinterpolateenv" id="proxypassinterpolateenv">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximium number of proxies that a request can be forwarded
-through</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyMaxForwards <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyMaxForwards -1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable Environment Variable interpolation in Reverse Proxy configurations</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>The <code class="directive">ProxyMaxForwards</code> directive specifies the
- maximum number of proxies through which a request may pass, if there's no
- <code>Max-Forwards</code> header supplied with the request. This may
- be set to prevent infinite proxy loops, or a DoS attack.</p>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyMaxForwards 15</pre>
-</div>
-
- <p>Note that setting <code class="directive">ProxyMaxForwards</code> is a
- violation of the HTTP/1.1 protocol (RFC2616), which forbids a Proxy
- setting <code>Max-Forwards</code> if the Client didn't set it.
- Earlier Apache httpd versions would always set it. A negative
- <code class="directive">ProxyMaxForwards</code> value, including the
- default -1, gives you protocol-compliant behaviour, but may
- leave you open to loops.</p>
+ <p>This directive, together with the <var>interpolate</var> argument to
+ <code class="directive">ProxyPass</code>, <code class="directive">ProxyPassReverse</code>,
+ <code class="directive">ProxyPassReverseCookieDomain</code> and
+ <code class="directive">ProxyPassReverseCookiePath</code>
+ enables reverse proxies to be dynamically
+ configured using environment variables, which may be set by
+ another module such as <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
+ It affects the <code class="directive">ProxyPass</code>,
+ <code class="directive">ProxyPassReverse</code>,
+ <code class="directive">ProxyPassReverseCookieDomain</code>, and
+ <code class="directive">ProxyPassReverseCookiePath</code> directives,
+ and causes them to substitute the value of an environment
+ variable <code>varname</code> for the string <code>${varname}</code>
+ in configuration directives (if the <var>interpolate</var> option is set).</p>
+ <p>Keep this turned off (for server performance) unless you need it!</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPass" id="ProxyPass">ProxyPass</a> <a name="proxypass" id="proxypass">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a> <a name="proxypassmatch" id="proxypassmatch">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var>
- <var>[key=value</var> ...]] [nocanon] [interpolate] [noquery]</code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space using regular expressions</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
+ <var>[key=value</var> ...]]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Unix Domain Socket (UDS) support added in 2.4.7</td></tr>
</table>
- <p>This directive allows remote servers to be mapped into the
- space of the local server; the local server does not act as a
- proxy in the conventional sense, but appears to be a mirror of the
- remote server. The local server is often called a <dfn>reverse
- proxy</dfn> or <dfn>gateway</dfn>. The <var>path</var> is the name of
- a local virtual path; <var>url</var> is a partial URL for the
- remote server and cannot include a query string.</p>
+ <p>This directive is equivalent to <code class="directive"><a href="#proxypass">ProxyPass</a></code>,
+ but makes use of regular expressions, instead of simple prefix matching. The
+ supplied regular expression is matched against the <var>url</var>, and if it
+ matches, the server will substitute any parenthesized matches into the given
+ string and use it as a new <var>url</var>.</p>
<div class="note"><strong>Note: </strong>This directive cannot be used within a
<code><Directory></code> context.</div>
-
- <div class="warning">The <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive should
- usually be set <strong>off</strong> when using
- <code class="directive">ProxyPass</code>.</div>
-
- <p>In 2.4.7 and later, support for using a Unix Domain Socket is available by using a target
- which prepends <code>unix:/path/lis.sock|</code>. For example, to proxy
- HTTP and target the UDS at /home/www/socket you would use
- <code>unix:/home/www.socket|http://localhost/whatever/</code>. Since
- the socket is local, the hostname used (in this case <code>localhost</code>)
- is moot, but it is passed as the Host: header value of the request.</p>
-
- <div class="note"><strong>Note:</strong> The path associated with the <code>unix:</code>
- URL is <code class="directive">DefaultRuntimeDir</code> aware.</div>
-
- <div class="note"><strong>Note:</strong> <code class="directive">RewriteRule</code> requires
- the <code>[P,NE]</code> option to prevent the <code>'|'</code> character
- from being escaped.</div>
-
+
<p>Suppose the local server has address <code>http://example.com/</code>;
then</p>
- <pre class="prettyprint lang-config"><Location /mirror/foo/>
- ProxyPass http://backend.example.com/
-</Location></pre>
+ <pre class="prettyprint lang-config">ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com/$1</pre>
<p>will cause a local request for
- <code>http://example.com/mirror/foo/bar</code> to be internally converted
- into a proxy request to <code>http://backend.example.com/bar</code>.</p>
+ <code>http://example.com/foo/bar.gif</code> to be internally converted
+ into a proxy request to <code>http://backend.example.com/foo/bar.gif</code>.</p>
+ <div class="note"><h3>Note</h3>
+ <p>The URL argument must be parsable as a URL <em>before</em> regexp
+ substitutions (as well as after). This limits the matches you can use.
+ For instance, if we had used</p>
+ <pre class="prettyprint lang-config">ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com:8000$1</pre>
- <p>The following alternative syntax is possible, however it can carry a
- performance penalty when present in very large numbers. The advantage of
- the below syntax is that it allows for dynamic control via the
- <a href="mod_proxy_balancer.html#balancer_manager">Balancer Manager</a> interface:</p>
+ <p>in our previous example, it would fail with a syntax error
+ at server startup. This is a bug (PR 46665 in the ASF bugzilla),
+ and the workaround is to reformulate the match:</p>
+ <pre class="prettyprint lang-config">ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com:8000/$1</pre>
- <pre class="prettyprint lang-config">ProxyPass /mirror/foo/ http://backend.example.com/</pre>
+ </div>
+ <p>The <code>!</code> directive is useful in situations where you don't want
+ to reverse-proxy a subdirectory.</p>
+
+ <p>When used inside a <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section, the first argument is omitted and the
+ regexp is obtained from the <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>.</p>
+
+ <p>If you require a more flexible reverse-proxy configuration, see the
+ <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the
+ <code>[P]</code> flag.</p>
+ <div class="note">
+ <h3>Default Substitution</h3>
+ <p>When the URL parameter doesn't use any backreferences into the regular
+ expression, the original URL will be appended to the URL parameter.
+ </p>
+ </div>
<div class="warning">
- <p>If the first argument ends with a trailing <strong>/</strong>, the second
- argument should also end with a trailing <strong>/</strong> and vice
- versa. Otherwise the resulting requests to the backend may miss some
- needed slashes and do not deliver the expected results.
- </p>
+ <h3>Security Warning</h3>
+ <p>Take care when constructing the target URL of the rule, considering
+ the security impact from allowing the client influence over the set of
+ URLs to which your server will act as a proxy. Ensure that the scheme
+ and hostname part of the URL is either fixed, or does not allow the
+ client undue influence.</p>
</div>
- <p>The <code>!</code> directive is useful in situations where you don't want
- to reverse-proxy a subdirectory, <em>e.g.</em></p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse" id="proxypassreverse">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the URL in HTTP response headers sent from a reverse
+proxied server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverse [<var>path</var>] <var>url</var>
+[<var>interpolate</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>This directive lets Apache httpd adjust the URL in the <code>Location</code>,
+ <code>Content-Location</code> and <code>URI</code> headers on HTTP
+ redirect responses. This is essential when Apache httpd is used as a
+ reverse proxy (or gateway) to avoid by-passing the reverse proxy
+ because of HTTP redirects on the backend servers which stay behind
+ the reverse proxy.</p>
- <pre class="prettyprint lang-config"><Location /mirror/foo/>
- ProxyPass http://backend.example.com/
-</Location>
-<Location /mirror/foo/i>
- ProxyPass !
-</Location></pre>
+ <p>Only the HTTP response headers specifically mentioned above
+ will be rewritten. Apache httpd will not rewrite other response
+ headers, nor will it by default rewrite URL references inside HTML pages.
+ This means that if the proxied content contains absolute URL
+ references, they will by-pass the proxy. To rewrite HTML content to
+ match the proxy, you must load and enable <code class="module"><a href="../mod/mod_proxy_html.html">mod_proxy_html</a></code>.
+ </p>
+ <p><var>path</var> is the name of a local virtual path. <var>url</var> is a
+ partial URL for the remote server - the same way they are used for the
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
- <pre class="prettyprint lang-config">ProxyPass /mirror/foo/i !
-ProxyPass /mirror/foo http://backend.example.com</pre>
+ <p>For example, suppose the local server has address
+ <code>http://example.com/</code>; then</p>
+ <pre class="prettyprint lang-config">ProxyPass /mirror/foo/ http://backend.example.com/
+ProxyPassReverse /mirror/foo/ http://backend.example.com/
+ProxyPassReverseCookieDomain backend.example.com public.example.com
+ProxyPassReverseCookiePath / /mirror/foo/</pre>
- <p>will proxy all requests to <code>/mirror/foo</code> to
- <code>backend.example.com</code> <em>except</em> requests made to
- <code>/mirror/foo/i</code>.</p>
- <div class="warning"><h3>Ordering ProxyPass Directives</h3>
- <p>The configured <code class="directive"><a href="#proxypass">ProxyPass</a></code>
- and <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code>
- rules are checked in the order of configuration. The first rule that
- matches wins. So usually you should sort conflicting
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> rules starting with the
- longest URLs first. Otherwise later rules for longer URLS will be hidden
- by any earlier rule which uses a leading substring of the URL. Note that
- there is some relation with worker sharing. In contrast, only one
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive can be placed
- in a <code class="directive"><a href="../mod/core.html#location">Location</a></code> block, and the most
- specific location will take precedence.</p>
+ <p>will not only cause a local request for the
+ <code>http://example.com/mirror/foo/bar</code> to be internally converted
+ into a proxy request to <code>http://backend.example.com/bar</code>
+ (the functionality <code>ProxyPass</code> provides here). It also takes care
+ of redirects the server <code>backend.example.com</code> sends: when
+ <code>http://backend.example.com/bar</code> is redirected by him to
+ <code>http://backend.example.com/quux</code> Apache httpd adjusts this to
+ <code>http://example.com/mirror/foo/quux</code> before forwarding the HTTP
+ redirect response to the client. Note that the hostname used for
+ constructing the URL is chosen in respect to the setting of the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> directive.</p>
- <p>For the same reasons exclusions must come <em>before</em> the
- general <code class="directive">ProxyPass</code> directives.</p>
+ <p>Note that this <code class="directive">ProxyPassReverse</code> directive can
+ also be used in conjunction with the proxy pass-through feature
+ (<code>RewriteRule ... [P]</code>) from <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
+ because it doesn't depend on a corresponding <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
+
+ <p>The optional <var>interpolate</var> keyword, used together with
+ <code class="directive">ProxyPassInterpolateEnv</code>, enables interpolation
+ of environment variables specified using the format <var>${VARNAME}</var>.
+ Note that interpolation is not supported within the scheme portion of a
+ URL.</p>
+
+ <p>When used inside a <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, the first argument is omitted and the local
+ directory is obtained from the <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. The same occurs inside a <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section, but will probably not work as
+ intended, as ProxyPassReverse will interpret the regexp literally as a
+ path; if needed in this situation, specify the ProxyPassReverse outside
+ the section, or in a separate <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section.</p>
+
+ <p>This directive is not supported in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or <code class="directive"><a href="../mod/core.html#files"><Files></a></code> sections.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a> <a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Domain string in Set-Cookie headers from a reverse-
+proxied server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookieDomain <var>internal-domain</var>
+<var>public-domain</var> [<var>interpolate</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+<p>Usage is basically similar to
+<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, but instead of
+rewriting headers that are a URL, this rewrites the <code>domain</code>
+string in <code>Set-Cookie</code> headers.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a> <a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Path string in Set-Cookie headers from a reverse-
+proxied server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookiePath <var>internal-path</var>
+<var>public-path</var> [<var>interpolate</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+<p>
+Useful in conjunction with
+<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>
+in situations where backend URL paths are mapped to public paths on the
+reverse proxy. This directive rewrites the <code>path</code> string in
+<code>Set-Cookie</code> headers. If the beginning of the cookie path matches
+<var>internal-path</var>, the cookie path will be replaced with
+<var>public-path</var>.
+</p><p>
+In the example given with
+<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, the directive:
+</p>
+ <pre class="prettyprint lang-config">ProxyPassReverseCookiePath / /mirror/foo/</pre>
- </div>
+<p>
+will rewrite a cookie with backend path <code>/</code> (or
+<code>/example</code> or, in fact, anything) to <code>/mirror/foo/</code>.
+</p>
- <p>In Apache HTTP Server 2.1 and later, mod_proxy supports pooled
- connections to a backend server. Connections created on demand
- can be retained in a pool for future use. Limits on the pool size
- and other settings can be coded on
- the <code class="directive">ProxyPass</code> directive
- using <code>key=value</code> parameters, described in the table
- below.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost" id="proxypreservehost">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use incoming Host HTTP request header for proxy
+request</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPreserveHost Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Usable in directory
+context in 2.3.3 and later.</td></tr>
+</table>
+ <p>When enabled, this option will pass the Host: line from the incoming
+ request to the proxied host, instead of the hostname specified in the
+ <code class="directive">ProxyPass</code> line.</p>
- <p>By default, mod_proxy will allow and retain the maximum number of
- connections that could be used simultaneously by that web server child
- process. Use the <code>max</code> parameter to reduce the number from
- the default. Use the <code>ttl</code> parameter to set an optional
- time to live; connections which have been unused for at least
- <code>ttl</code> seconds will be closed. <code>ttl</code> can be used
- to avoid using a connection which is subject to closing because of the
- backend server's keep-alive timeout.</p>
+ <p>This option should normally be turned <code>Off</code>. It is mostly
+ useful in special configurations like proxied mass name-based virtual
+ hosting, where the original Host header needs to be evaluated by the
+ backend server.</p>
- <p>The pool of connections is maintained per web server child
- process, and <code>max</code> and other settings are not coordinated
- among all child processes, except when only one child process is allowed
- by configuration or MPM design.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network buffer size for proxied HTTP and FTP
+connections</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyReceiveBufferSize <var>bytes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>The <code class="directive">ProxyReceiveBufferSize</code> directive specifies an
+ explicit (TCP/IP) network buffer size for proxied HTTP and FTP connections,
+ for increased throughput. It has to be greater than <code>512</code> or set
+ to <code>0</code> to indicate that the system's default buffer size should
+ be used.</p>
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyPass /example http://backend.example.com max=20 ttl=120 retry=300</pre>
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyReceiveBufferSize 2048</pre>
</div>
- <table class="bordered"><tr><th>BalancerMember parameters</th></tr></table>
- <table>
- <tr><th>Parameter</th>
- <th>Default</th>
- <th>Description</th></tr>
- <tr><td>min</td>
- <td>0</td>
- <td>Minimum number of connection pool entries, unrelated to the
- actual number of connections. This only needs to be modified from the
- default for special circumstances where heap memory associated with the
- backend connections should be preallocated or retained.</td></tr>
- <tr><td>max</td>
- <td>1...n</td>
- <td>Maximum number of connections that will be allowed to the
- backend server. The default for this limit is the number of threads
- per process in the active MPM. In the Prefork MPM, this is always 1,
- while with other MPMs it is controlled by the
- <code class="directive">ThreadsPerChild</code> directive.</td></tr>
- <tr><td>smax</td>
- <td>max</td>
- <td>Retained connection pool entries above this limit are freed
- during certain operations if they have been unused for longer than
- the time to live, controlled by the <code>ttl</code> parameter. If
- the connection pool entry has an associated connection, it will be
- closed. This only needs to be modified from the default for special
- circumstances where connection pool entries and any associated
- connections which have exceeded the time to live need to be freed or
- closed more aggressively.</td></tr>
- <tr><td>acquire</td>
- <td>-</td>
- <td>If set this will be the maximum time to wait for a free
- connection in the connection pool, in milliseconds. If there are no free
- connections in the pool the Apache httpd will return <code>SERVER_BUSY</code>
- status to the client.
- </td></tr>
- <tr><td>connectiontimeout</td>
- <td>timeout</td>
- <td>Connect timeout in seconds.
- The number of seconds Apache httpd waits for the creation of a connection to
- the backend to complete. By adding a postfix of ms the timeout can be
- also set in milliseconds.
- </td></tr>
- <tr><td>disablereuse</td>
- <td>Off</td>
- <td>This parameter should be used when you want to force mod_proxy
- to immediately close a connection to the backend after being used, and
- thus, disable its persistent connection and pool for that backend.
- This helps in various situations where a firewall between Apache
- httpd and
- the backend server (regardless of protocol) tends to silently
- drop connections or when backends themselves may be under round-
- robin DNS. To disable connection pooling reuse,
- set this property value to <code>On</code>.
- </td></tr>
- <tr><td>enablereuse</td>
- <td>On</td>
- <td>This is the inverse of 'disablereuse' above, provided as a
- convenience for scheme handlers that require opt-in for connection
- reuse (such as <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code>).
- </td></tr>
- <tr><td>flushpackets</td>
- <td>off</td>
- <td>Determines whether the proxy module will auto-flush the output
- brigade after each "chunk" of data. 'off' means that it will flush
- only when needed, 'on' means after each chunk is sent and
- 'auto' means poll/wait for a period of time and flush if
- no input has been received for 'flushwait' milliseconds.
- Currently this is in effect only for AJP.
- </td></tr>
- <tr><td>flushwait</td>
- <td>10</td>
- <td>The time to wait for additional input, in milliseconds, before
- flushing the output brigade if 'flushpackets' is 'auto'.
- </td></tr>
- <tr><td>iobuffersize</td>
- <td>8192</td>
- <td>Adjusts the size of the internal scratchpad IO buffer. This allows you
- to override the <code class="directive">ProxyIOBufferSize</code> for a specific worker.
- This must be at least 512 or set to 0 for the system default of 8192.
- </td></tr>
- <tr><td>keepalive</td>
- <td>Off</td>
- <td><p>This parameter should be used when you have a firewall between your
- Apache httpd and the backend server, who tend to drop inactive connections.
- This flag will tell the Operating System to send <code>KEEP_ALIVE</code>
- messages on inactive connections and thus prevent the firewall to drop the connection.
- To enable keepalive set this property value to <code>On</code>. </p>
- <p>The frequency of initial and subsequent TCP keepalive probes
- depends on global OS settings, and may be as high as 2 hours. To be useful,
- the frequency configured in the OS must be smaller than the threshold used
- by the firewall.</p>
- </td></tr>
- <tr><td>lbset</td>
- <td>0</td>
- <td>Sets the load balancer cluster set that the worker is a member
- of. The load balancer will try all members of a lower numbered
- lbset before trying higher numbered ones.
- </td></tr>
- <tr><td>ping</td>
- <td>0</td>
- <td>Ping property tells the webserver to "test" the connection to
- the backend before forwarding the request. For negative values
- the test is a simple socket check, for positive values it's
- a more functional check, dependent upon the protocol. For AJP, it causes
- <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>to send a <code>CPING</code>
- request on the ajp13 connection (implemented on Tomcat 3.3.2+, 4.1.28+
- and 5.0.13+). For HTTP, it causes <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
- to send a <code>100-Continue</code> to the backend (only valid for
- HTTP/1.1 - for non HTTP/1.1 backends, this property has no
- effect). In both cases the parameter is the delay in seconds to wait
- for the reply.
- This feature has been added to avoid problems with hung and
- busy backends.
- This will increase the network traffic during the normal operation
- which could be an issue, but it will lower the
- traffic in case some of the cluster nodes are down or busy.
- By adding a postfix of ms the delay can be also set in
- milliseconds.
- </td></tr>
- <tr><td>receivebuffersize</td>
- <td>0</td>
- <td>Adjusts the size of the explicit (TCP/IP) network buffer size for
- proxied connections. This allows you to override the
- <code class="directive">ProxyReceiveBufferSize</code> for a specific worker.
- This must be at least 512 or set to 0 for the system default.
- </td></tr>
- <tr><td>redirect</td>
- <td>-</td>
- <td>Redirection Route of the worker. This value is usually
- set dynamically to enable safe removal of the node from
- the cluster. If set all requests without session id will be
- redirected to the BalancerMember that has route parameter
- equal as this value.
- </td></tr>
- <tr><td>retry</td>
- <td>60</td>
- <td>Connection pool worker retry timeout in seconds.
- If the connection pool worker to the backend server is in the error state,
- Apache httpd will not forward any requests to that server until the timeout
- expires. This enables to shut down the backend server for maintenance,
- and bring it back online later. A value of 0 means always retry workers
- in an error state with no timeout.
- </td></tr>
- <tr><td>route</td>
- <td>-</td>
- <td>Route of the worker when used inside load balancer.
- The route is a value appended to session id.
- </td></tr>
- <tr><td>status</td>
- <td>-</td>
- <td>Single letter value defining the initial status of
- this worker.
- <table>
- <tr><td>D: Worker is disabled and will not accept any requests.</td></tr>
- <tr><td>S: Worker is administratively stopped.</td></tr>
- <tr><td>I: Worker is in ignore-errors mode, and will always be considered available.</td></tr>
- <tr><td>H: Worker is in hot-standby mode and will only be used if no other
- viable workers are available.</td></tr>
- <tr><td>E: Worker is in an error state.</td></tr>
- <tr><td>N: Worker is in drain mode, and will only accept existing sticky sessions
- destined for itself and ignore all other requests.</td></tr>
- </table>Status
- can be set (which is the default) by prepending with '+' or
- cleared by prepending with '-'.
- Thus, a setting of 'S-E' sets this worker to Stopped and
- clears the in-error flag.
- </td></tr>
- <tr><td>timeout</td>
- <td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td>
- <td>Connection timeout in seconds.
- The number of seconds Apache httpd waits for data sent by / to the backend.
- </td></tr>
- <tr><td>ttl</td>
- <td>-</td>
- <td>Time to live for inactive connections and associated connection
- pool entries, in seconds. Once reaching this limit, a
- connection will not be used again; it will be closed at some
- later time.
- </td></tr>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a> <a name="proxyremote" id="proxyremote">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle certain requests</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemote <var>match</var> <var>remote-server</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>This defines remote proxies to this proxy. <var>match</var> is either the
+ name of a URL-scheme that the remote server supports, or a partial URL
+ for which the remote server should be used, or <code>*</code> to indicate
+ the server should be contacted for all requests. <var>remote-server</var> is
+ a partial URL for the remote server. Syntax:</p>
- </table>
+ <div class="example"><p><code>
+ <dfn>remote-server</dfn> =
+ <var>scheme</var>://<var>hostname</var>[:<var>port</var>]
+ </code></p></div>
- <p>If the Proxy directive scheme starts with the
- <code>balancer://</code> (eg: <code>balancer://cluster</code>,
- any path information is ignored) then a virtual worker that does not really
- communicate with the backend server will be created. Instead it is responsible
- for the management of several "real" workers. In that case the special set of
- parameters can be add to this virtual worker. See <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code>
- for more information about how the balancer works.
- </p>
- <table class="bordered"><tr><th>Balancer parameters</th></tr></table>
- <table>
- <tr><th>Parameter</th>
- <th>Default</th>
- <th>Description</th></tr>
- <tr><td>lbmethod</td>
- <td>byrequests</td>
- <td>Balancer load-balance method. Select the load-balancing scheduler
- method to use. Either <code>byrequests</code>, to perform weighted
- request counting, <code>bytraffic</code>, to perform weighted
- traffic byte count balancing, or <code>bybusyness</code>, to perform
- pending request balancing. Default is <code>byrequests</code>.
- </td></tr>
- <tr><td>maxattempts</td>
- <td>One less than the number of workers, or 1 with a single worker.</td>
- <td>Maximum number of failover attempts before giving up.
- </td></tr>
- <tr><td>nofailover</td>
- <td>Off</td>
- <td>If set to <code>On</code> the session will break if the worker is in
- error state or disabled. Set this value to On if backend servers do not
- support session replication.
- </td></tr>
- <tr><td>stickysession</td>
- <td>-</td>
- <td>Balancer sticky session name. The value is usually set to something
- like <code>JSESSIONID</code> or <code>PHPSESSIONID</code>,
- and it depends on the backend application server that support sessions.
- If the backend application server uses different name for cookies
- and url encoded id (like servlet containers) use | to to separate them.
- The first part is for the cookie the second for the path.<br />
- Available in Apache HTTP Server 2.4.4 and later.
- </td></tr>
- <tr><td>stickysessionsep</td>
- <td>"."</td>
- <td>Sets the separation symbol in the session cookie. Some backend application servers
- do not use the '.' as the symbol. For example the Oracle Weblogic server uses
- '!'. The correct symbol can be set using this option. The setting of 'Off'
- signifies that no symbol is used.
- </td></tr>
- <tr><td>scolonpathdelim</td>
- <td>Off</td>
- <td>If set to <code>On</code> the semi-colon character ';' will be
- used as an additional sticky session path delimiter/separator. This
- is mainly used to emulate mod_jk's behavior when dealing with paths such
- as <code>JSESSIONID=6736bcf34;foo=aabfa</code>
- </td></tr>
- <tr><td>timeout</td>
- <td>0</td>
- <td>Balancer timeout in seconds. If set this will be the maximum time
- to wait for a free worker. Default is not to wait.
- </td></tr>
- <tr><td>failonstatus</td>
- <td>-</td>
- <td>A single or comma-separated list of HTTP status codes. If set this will
- force the worker into error state when the backend returns any status code
- in the list. Worker recovery behaves the same as other worker errors.
- </td></tr>
- <tr><td>failontimeout</td>
- <td>Off</td>
- <td>If set, an IO read timeout after a request is sent to the backend will
- force the worker into error state. Worker recovery behaves the same as other
- worker errors.<br />
- Available in Apache HTTP Server 2.4.5 and later.
- </td></tr>
- <tr><td>nonce</td>
- <td><auto></td>
- <td>The protective nonce used in the <code>balancer-manager</code> application page.
- The default is to use an automatically determined UUID-based
- nonce, to provide for further protection for the page. If set,
- then the nonce is set to that value. A setting of <code>None</code>
- disables all nonce checking.
- <div class="note"><h3>Note</h3>
- <p>In addition to the nonce, the <code>balancer-manager</code> page
- should be protected via an ACL.</p>
- </div>
- </td></tr>
- <tr><td>growth</td>
- <td>0</td>
- <td>Number of additional BalancerMembers to allow to be added
- to this balancer in addition to those defined at configuration.
- </td></tr>
- <tr><td>forcerecovery</td>
- <td>On</td>
- <td>Force the immediate recovery of all workers without considering the
- retry parameter of the workers if all workers of a balancer are
- in error state. There might be cases where an already overloaded backend
- can get into deeper trouble if the recovery of all workers is enforced
- without considering the retry parameter of each worker. In this case
- set to <code>Off</code>.<br />
- Available in Apache HTTP Server 2.4.2 and later.
- </td></tr>
+ <p><var>scheme</var> is effectively the protocol that should be used to
+ communicate with the remote server; only <code>http</code> and <code>https</code>
+ are supported by this module. When using <code>https</code>, the requests
+ are forwarded through the remote proxy using the HTTP CONNECT method.</p>
- </table>
- <p>A sample balancer setup</p>
- <pre class="prettyprint lang-config">ProxyPass /special-area http://special.example.com smax=5 max=10
-ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On
-<Proxy balancer://mycluster>
- BalancerMember ajp://1.2.3.4:8009
- BalancerMember ajp://1.2.3.5:8009 loadfactor=20
- # Less powerful server, don't send as many requests there,
- BalancerMember ajp://1.2.3.6:8009 loadfactor=5
-</Proxy></pre>
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyRemote http://goodguys.example.com/ http://mirrorguys.example.com:8000
+ProxyRemote * http://cleverproxy.localdomain
+ProxyRemote ftp http://ftpproxy.mydomain:8080</pre>
+</div>
+ <p>In the last example, the proxy will forward FTP requests, encapsulated
+ as yet another HTTP proxy request, to another proxy which can handle
+ them.</p>
- <p>Setting up a hot-standby, that will only be used if no other
- members are available</p>
- <pre class="prettyprint lang-config">ProxyPass / balancer://hotcluster/
-<Proxy balancer://hotcluster>
- BalancerMember ajp://1.2.3.4:8009 loadfactor=1
- BalancerMember ajp://1.2.3.5:8009 loadfactor=2
- # The server below is on hot standby
- BalancerMember ajp://1.2.3.6:8009 status=+H
- ProxySet lbmethod=bytraffic
-</Proxy></pre>
+ <p>This option also supports reverse proxy configuration - a backend
+ webserver can be embedded within a virtualhost URL space even if that
+ server is hidden by another forward proxy.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a> <a name="proxyremotematch" id="proxyremotematch">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle requests matched by regular
+expressions</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>remote-server</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>The <code class="directive">ProxyRemoteMatch</code> is identical to the
+ <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive, except the
+ first argument is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
+ match against the requested URL.</p>
- <p>Normally, mod_proxy will canonicalise ProxyPassed URLs.
- But this may be incompatible with some backends, particularly those
- that make use of <var>PATH_INFO</var>. The optional <var>nocanon</var>
- keyword suppresses this, and passes the URL path "raw" to the
- backend. Note that may affect the security of your backend, as it
- removes the normal limited protection against URL-based attacks
- provided by the proxy.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a> <a name="proxyrequests" id="proxyrequests">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables forward (standard) proxy requests</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRequests On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyRequests Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>This allows or prevents Apache httpd from functioning as a forward proxy
+ server. (Setting ProxyRequests to <code>Off</code> does not disable use of
+ the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.)</p>
- <p>Normally, mod_proxy will include the query string when
- generating the <var>SCRIPT_FILENAME</var> environment variable.
- The optional <var>noquery</var> keyword (available in
- httpd 2.4.1 and later) prevents this.</p>
+ <p>In a typical reverse proxy or gateway configuration, this
+ option should be set to
+ <code>Off</code>.</p>
- <p>When used inside a <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, the first argument is omitted and the local
- directory is obtained from the <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. The same will occur inside a
- <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section,
- however ProxyPass does not interpret the regexp as such, so it is necessary
- to use <code class="directive">ProxyPassMatch</code> in this situation instead.</p>
+ <p>In order to get the functionality of proxying HTTP or FTP sites, you
+ need also <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> or <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>
+ (or both) present in the server.</p>
- <p>This directive is not supported in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or <code class="directive"><a href="../mod/core.html#files"><Files></a></code> sections.</p>
+ <p>In order to get the functionality of (forward) proxying HTTPS sites, you
+ need <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> enabled in the server.</p>
- <p>If you require a more flexible reverse-proxy configuration, see the
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the
- <code>[P]</code> flag.</p>
+ <div class="warning"><h3>Warning</h3>
+ <p>Do not enable proxying with <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> until you have <a href="#access">secured your server</a>. Open proxy servers are dangerous
+ both to your network and to the Internet at large.</p>
+ </div>
- <p>The optional <var>interpolate</var> keyword, in combination with
- <code class="directive">ProxyPassInterpolateEnv</code> causes the ProxyPass
- to interpolate environment variables, using the syntax
- <var>${VARNAME}</var>. Note that many of the standard CGI-derived
- environment variables will not exist when this interpolation happens,
- so you may still have to resort to <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- for complex rules. Also note that interpolation is not supported
- within the scheme portion of a URL. Dynamic determination of the
- scheme can be accomplished with <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> as in the
- following example.</p>
+<h3>See also</h3>
+<ul>
+<li><a href="#forwardreverse">Forward and Reverse Proxies/Gateways</a></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxySet" id="ProxySet">ProxySet</a> <a name="proxyset" id="proxyset">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set various Proxy balancer or member parameters</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxySet <var>url</var> <var>key=value [key=value ...]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>This directive is used as an alternate method of setting any of the
+ parameters available to Proxy balancers and workers normally done via the
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive. If used
+ within a <code><Proxy <var>balancer url|worker url</var>></code>
+ container directive, the <var>url</var> argument is not required. As a side
+ effect the respective balancer or worker gets created. This can be useful
+ when doing reverse proxying via a
+ <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> instead of a
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
+
+ <div class="example"><pre class="prettyprint lang-config"><Proxy balancer://hotcluster>
+ BalancerMember http://www2.example.com:8080 loadfactor=1
+ BalancerMember http://www3.example.com:8080 loadfactor=2
+ ProxySet lbmethod=bytraffic
+</Proxy></pre>
+</div>
+
+ <pre class="prettyprint lang-config"><Proxy http://backend>
+ ProxySet keepalive=On
+</Proxy></pre>
- <pre class="prettyprint lang-config">RewriteEngine On
-RewriteCond %{HTTPS} =off
-RewriteRule . - [E=protocol:http]
-RewriteCond %{HTTPS} =on
-RewriteRule . - [E=protocol:https]
+ <pre class="prettyprint lang-config">ProxySet balancer://foo lbmethod=bytraffic timeout=15</pre>
-RewriteRule ^/mirror/foo/(.*) %{ENV:protocol}://backend.example.com/$1 [P]
-ProxyPassReverse /mirror/foo/ http://backend.example.com/
-ProxyPassReverse /mirror/foo/ https://backend.example.com/</pre>
+
+ <pre class="prettyprint lang-config">ProxySet ajp://backend:7001 timeout=15</pre>
+
+
+ <div class="warning"><h3>Warning</h3>
+ <p>Keep in mind that the same parameter key can have a different meaning
+ depending whether it is applied to a balancer or a worker as shown by the two
+ examples above regarding timeout.</p>
+ </div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassInherit" id="ProxyPassInherit">ProxyPassInherit</a> <a name="proxypassinherit" id="proxypassinherit">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a> <a name="proxysourceaddress" id="proxysourceaddress">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Inherit ProxyPass directives defined from the main server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPassInherit On</code></td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set local IP address for outgoing proxy connections</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxySourceAddress <var>address</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.4.5 and later.
- and later.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.9 and later</td></tr>
</table>
- <p>This directive will cause the current server/vhost to "inherit"
- <code class="directive"><a href="#proxypass">ProxyPass</a></code>
- directives defined in the main server. This can cause issues and
- inconsistent behavior if using the Balancer Manager for dynamic changes
- and so should be disabled if using that feature.</p>
- <p>The setting in the global server defines the default for all vhosts.</p>
- <p>Disabling ProxyPassInherit also disables <code class="directive"><a href="#balancerinherit">BalancerInherit</a></code>.</p>
-
+ <p>This directive allows to set a specific local address to bind to when connecting
+ to a backend server.</p>
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a> <a name="proxypassinterpolateenv" id="proxypassinterpolateenv">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a> <a name="proxystatus" id="proxystatus">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable Environment Variable interpolation in Reverse Proxy configurations</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Show Proxy LoadBalancer status in mod_status</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyStatus Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>This directive, together with the <var>interpolate</var> argument to
- <code class="directive">ProxyPass</code>, <code class="directive">ProxyPassReverse</code>,
- <code class="directive">ProxyPassReverseCookieDomain</code> and
- <code class="directive">ProxyPassReverseCookiePath</code>
- enables reverse proxies to be dynamically
- configured using environment variables, which may be set by
- another module such as <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
- It affects the <code class="directive">ProxyPass</code>,
- <code class="directive">ProxyPassReverse</code>,
- <code class="directive">ProxyPassReverseCookieDomain</code>, and
- <code class="directive">ProxyPassReverseCookiePath</code> directives,
- and causes them to substitute the value of an environment
- variable <code>varname</code> for the string <code>${varname}</code>
- in configuration directives (if the <var>interpolate</var> option is set).</p>
- <p>Keep this turned off (for server performance) unless you need it!</p>
+ <p>This directive determines whether or not proxy
+ loadbalancer status data is displayed via the <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>
+ server-status page.</p>
+ <div class="note"><h3>Note</h3>
+ <p><strong>Full</strong> is synonymous with <strong>On</strong></p>
+ </div>
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a> <a name="proxypassmatch" id="proxypassmatch">Directive</a></h2>
+<div class="directive-section"><h2><a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout" id="proxytimeout">Directive</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space using regular expressions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
- <var>[key=value</var> ...]]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network timeout for proxied requests</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyTimeout <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Value of <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>This directive is equivalent to <code class="directive"><a href="#proxypass">ProxyPass</a></code>,
- but makes use of regular expressions, instead of simple prefix matching. The
- supplied regular expression is matched against the <var>url</var>, and if it
- matches, the server will substitute any parenthesized matches into the given
- string and use it as a new <var>url</var>.</p>
+ <p>This directive allows a user to specifiy a timeout on proxy requests.
+ This is useful when you have a slow/buggy appserver which hangs, and you
+ would rather just return a timeout and fail gracefully instead of waiting
+ however long it takes the server to return.</p>
- <div class="note"><strong>Note: </strong>This directive cannot be used within a
- <code><Directory></code> context.</div>
-
- <p>Suppose the local server has address <code>http://example.com/</code>;
- then</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyVia" id="ProxyVia">ProxyVia</a> <a name="proxyvia" id="proxyvia">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information provided in the <code>Via</code> HTTP response
+header for proxied requests</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyVia Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>This directive controls the use of the <code>Via:</code> HTTP
+ header by the proxy. Its intended use is to control the flow of
+ proxy requests along a chain of proxy servers. See <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1), section
+ 14.45 for an explanation of <code>Via:</code> header lines.</p>
- <pre class="prettyprint lang-config">ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com/$1</pre>
+ <ul>
+ <li>If set to <code>Off</code>, which is the default, no special processing
+ is performed. If a request or reply contains a <code>Via:</code> header,
+ it is passed through unchanged.</li>
+ <li>If set to <code>On</code>, each request and reply will get a
+ <code>Via:</code> header line added for the current host.</li>
- <p>will cause a local request for
- <code>http://example.com/foo/bar.gif</code> to be internally converted
- into a proxy request to <code>http://backend.example.com/foo/bar.gif</code>.</p>
- <div class="note"><h3>Note</h3>
- <p>The URL argument must be parsable as a URL <em>before</em> regexp
- substitutions (as well as after). This limits the matches you can use.
- For instance, if we had used</p>
- <pre class="prettyprint lang-config">ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com:8000$1</pre>
+ <li>If set to <code>Full</code>, each generated <code>Via:</code> header
+ line will additionally have the Apache httpd server version shown as a
+ <code>Via:</code> comment field.</li>
- <p>in our previous example, it would fail with a syntax error
- at server startup. This is a bug (PR 46665 in the ASF bugzilla),
- and the workaround is to reformulate the match:</p>
- <pre class="prettyprint lang-config">ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com:8000/$1</pre>
+ <li>If set to <code>Block</code>, every proxy request will have all its
+ <code>Via:</code> header lines removed. No new <code>Via:</code> header will
+ be generated.</li>
+ </ul>
- </div>
- <p>The <code>!</code> directive is useful in situations where you don't want
- to reverse-proxy a subdirectory.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="forwardreverse" id="forwardreverse">Forward Proxies and Reverse
+ Proxies/Gateways</a></h2>
+ <p>Apache HTTP Server can be configured in both a <dfn>forward</dfn> and
+ <dfn>reverse</dfn> proxy (also known as <dfn>gateway</dfn>) mode.</p>
- <p>When used inside a <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section, the first argument is omitted and the
- regexp is obtained from the <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>.</p>
+ <p>An ordinary <dfn>forward proxy</dfn> is an intermediate
+ server that sits between the client and the <em>origin
+ server</em>. In order to get content from the origin server,
+ the client sends a request to the proxy naming the origin server
+ as the target and the proxy then requests the content from the
+ origin server and returns it to the client. The client must be
+ specially configured to use the forward proxy to access other
+ sites.</p>
- <p>If you require a more flexible reverse-proxy configuration, see the
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the
- <code>[P]</code> flag.</p>
+ <p>A typical usage of a forward proxy is to provide Internet
+ access to internal clients that are otherwise restricted by a
+ firewall. The forward proxy can also use caching (as provided
+ by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) to reduce network usage.</p>
- <div class="note">
- <h3>Default Substitution</h3>
- <p>When the URL parameter doesn't use any backreferences into the regular
- expression, the original URL will be appended to the URL parameter.
- </p>
- </div>
+ <p>The forward proxy is activated using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive. Because
+ forward proxies allow clients to access arbitrary sites through
+ your server and to hide their true origin, it is essential that
+ you <a href="#access">secure your server</a> so that only
+ authorized clients can access the proxy before activating a
+ forward proxy.</p>
- <div class="warning">
- <h3>Security Warning</h3>
- <p>Take care when constructing the target URL of the rule, considering
- the security impact from allowing the client influence over the set of
- URLs to which your server will act as a proxy. Ensure that the scheme
- and hostname part of the URL is either fixed, or does not allow the
- client undue influence.</p>
- </div>
+ <p>A <dfn>reverse proxy</dfn> (or <dfn>gateway</dfn>), by
+ contrast, appears to the client just like an ordinary web
+ server. No special configuration on the client is necessary.
+ The client makes ordinary requests for content in the name-space
+ of the reverse proxy. The reverse proxy then decides where to
+ send those requests, and returns the content as if it was itself
+ the origin.</p>
+
+ <p>A typical usage of a reverse proxy is to provide Internet
+ users access to a server that is behind a firewall. Reverse
+ proxies can also be used to balance load among several back-end
+ servers, or to provide caching for a slower back-end server.
+ In addition, reverse proxies can be used simply to bring
+ several servers into the same URL space.</p>
+
+ <p>A reverse proxy is activated using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive or the
+ <code>[P]</code> flag to the <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive. It is
+ <strong>not</strong> necessary to turn <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> on in order to
+ configure a reverse proxy.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Basic Examples</a></h2>
+
+ <p>The examples below are only a very basic idea to help you
+ get started. Please read the documentation on the individual
+ directives.</p>
+
+ <p>In addition, if you wish to have caching enabled, consult
+ the documentation from <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
+ <div class="example"><h3>Reverse Proxy</h3><pre class="prettyprint lang-config">ProxyPass /foo http://foo.example.com/bar
+ProxyPassReverse /foo http://foo.example.com/bar</pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse" id="proxypassreverse">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverse [<var>path</var>] <var>url</var>
-[<var>interpolate</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive lets Apache httpd adjust the URL in the <code>Location</code>,
- <code>Content-Location</code> and <code>URI</code> headers on HTTP
- redirect responses. This is essential when Apache httpd is used as a
- reverse proxy (or gateway) to avoid by-passing the reverse proxy
- because of HTTP redirects on the backend servers which stay behind
- the reverse proxy.</p>
- <p>Only the HTTP response headers specifically mentioned above
- will be rewritten. Apache httpd will not rewrite other response
- headers, nor will it by default rewrite URL references inside HTML pages.
- This means that if the proxied content contains absolute URL
- references, they will by-pass the proxy. To rewrite HTML content to
- match the proxy, you must load and enable <code class="module"><a href="../mod/mod_proxy_html.html">mod_proxy_html</a></code>.
- </p>
+ <div class="example"><h3>Forward Proxy</h3><pre class="prettyprint lang-config">ProxyRequests On
+ProxyVia On
- <p><var>path</var> is the name of a local virtual path. <var>url</var> is a
- partial URL for the remote server - the same way they are used for the
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
+<Proxy *>
+ Require host internal.example.com
+</Proxy></pre>
+</div>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="handler" id="handler">Access via Handler</a></h2>
+
+ <p>You can also force a request to be handled as a reverse-proxy
+ request, by creating a suitable Handler pass-through. The example
+ configuration below will pass all requests for PHP scripts to the
+ specified FastCGI server using reverse proxy:
+ </p>
- <p>For example, suppose the local server has address
- <code>http://example.com/</code>; then</p>
+ <div class="example"><h3>Reverse Proxy PHP scripts</h3><pre class="prettyprint lang-config"><FilesMatch \.php$>
+ SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/"
+</FilesMatch></pre>
+</div>
- <pre class="prettyprint lang-config">ProxyPass /mirror/foo/ http://backend.example.com/
-ProxyPassReverse /mirror/foo/ http://backend.example.com/
-ProxyPassReverseCookieDomain backend.example.com public.example.com
-ProxyPassReverseCookiePath / /mirror/foo/</pre>
+ <p>This feature is available in Apache HTTP Server 2.4.10 and later.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="workers" id="workers">Workers</a></h2>
+ <p>The proxy manages the configuration of origin servers and their
+ communication parameters in objects called <dfn>workers</dfn>.
+ There are two built-in workers, the default forward proxy worker and the
+ default reverse proxy worker. Additional workers can be configured
+ explicitly.</p>
- <p>will not only cause a local request for the
- <code>http://example.com/mirror/foo/bar</code> to be internally converted
- into a proxy request to <code>http://backend.example.com/bar</code>
- (the functionality <code>ProxyPass</code> provides here). It also takes care
- of redirects the server <code>backend.example.com</code> sends: when
- <code>http://backend.example.com/bar</code> is redirected by him to
- <code>http://backend.example.com/quux</code> Apache httpd adjusts this to
- <code>http://example.com/mirror/foo/quux</code> before forwarding the HTTP
- redirect response to the client. Note that the hostname used for
- constructing the URL is chosen in respect to the setting of the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> directive.</p>
+ <p>The two default workers have a fixed configuration
+ and will be used if no other worker matches the request.
+ They do not use HTTP Keep-Alive or connection pooling.
+ The TCP connections to the origin server will instead be
+ opened and closed for each request.</p>
- <p>Note that this <code class="directive">ProxyPassReverse</code> directive can
- also be used in conjunction with the proxy pass-through feature
- (<code>RewriteRule ... [P]</code>) from <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- because it doesn't depend on a corresponding <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
+ <p>Explicitly configured workers are identified by their URL.
+ They are usually created and configured using
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> or
+ <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> when used
+ for a reverse proxy:</p>
- <p>The optional <var>interpolate</var> keyword, used together with
- <code class="directive">ProxyPassInterpolateEnv</code>, enables interpolation
- of environment variables specified using the format <var>${VARNAME}</var>.
- Note that interpolation is not supported within the scheme portion of a
- URL.</p>
+ <pre class="prettyprint lang-config">ProxyPass /example http://backend.example.com connectiontimeout=5 timeout=30</pre>
- <p>When used inside a <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, the first argument is omitted and the local
- directory is obtained from the <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. The same occurs inside a <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section, but will probably not work as
- intended, as ProxyPassReverse will interpret the regexp literally as a
- path; if needed in this situation, specify the ProxyPassReverse outside
- the section, or in a separate <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section.</p>
- <p>This directive is not supported in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or <code class="directive"><a href="../mod/core.html#files"><Files></a></code> sections.</p>
+ <p>This will create a worker associated with the origin server URL
+ <code>http://backend.example.com</code> and using the given timeout
+ values. When used in a forward proxy, workers are usually defined
+ via the <code class="directive"><a href="#proxyset">ProxySet</a></code> directive:</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a> <a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookieDomain <var>internal-domain</var>
-<var>public-domain</var> [<var>interpolate</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
-<p>Usage is basically similar to
-<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, but instead of
-rewriting headers that are a URL, this rewrites the <code>domain</code>
-string in <code>Set-Cookie</code> headers.</p>
+ <pre class="prettyprint lang-config">ProxySet http://backend.example.com connectiontimeout=5 timeout=30</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a> <a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookiePath <var>internal-path</var>
-<var>public-path</var> [<var>interpolate</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
-<p>
-Useful in conjunction with
-<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>
-in situations where backend URL paths are mapped to public paths on the
-reverse proxy. This directive rewrites the <code>path</code> string in
-<code>Set-Cookie</code> headers. If the beginning of the cookie path matches
-<var>internal-path</var>, the cookie path will be replaced with
-<var>public-path</var>.
-</p><p>
-In the example given with
-<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, the directive:
-</p>
- <pre class="prettyprint lang-config">ProxyPassReverseCookiePath / /mirror/foo/</pre>
-<p>
-will rewrite a cookie with backend path <code>/</code> (or
-<code>/example</code> or, in fact, anything) to <code>/mirror/foo/</code>.
-</p>
+ <p>or alternatively using <code class="directive"><a href="#proxy">Proxy</a></code>
+ and <code class="directive"><a href="#proxyset">ProxySet</a></code>:</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost" id="proxypreservehost">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use incoming Host HTTP request header for proxy
-request</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPreserveHost Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Usable in directory
-context in 2.3.3 and later.</td></tr>
-</table>
- <p>When enabled, this option will pass the Host: line from the incoming
- request to the proxied host, instead of the hostname specified in the
- <code class="directive">ProxyPass</code> line.</p>
+ <pre class="prettyprint lang-config"><Proxy http://backend.example.com>
+ ProxySet connectiontimeout=5 timeout=30
+</Proxy></pre>
- <p>This option should normally be turned <code>Off</code>. It is mostly
- useful in special configurations like proxied mass name-based virtual
- hosting, where the original Host header needs to be evaluated by the
- backend server.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network buffer size for proxied HTTP and FTP
-connections</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyReceiveBufferSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyReceiveBufferSize</code> directive specifies an
- explicit (TCP/IP) network buffer size for proxied HTTP and FTP connections,
- for increased throughput. It has to be greater than <code>512</code> or set
- to <code>0</code> to indicate that the system's default buffer size should
- be used.</p>
+ <p>Using explicitly configured workers in the forward mode is
+ not very common, because forward proxies usually communicate with many
+ different origin servers. Creating explicit workers for some of the
+ origin servers can still be useful, if they are used very often.
+ Explicitly configured workers have no concept of forward or reverse
+ proxying by themselves. They encapsulate a common concept of
+ communication with origin servers. A worker created by
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> for use in a
+ reverse proxy will be also used for forward proxy requests whenever
+ the URL to the origin server matches the worker URL and vice versa.</p>
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyReceiveBufferSize 2048</pre>
-</div>
+ <p>The URL identifying a direct worker is the URL of its
+ origin server including any path components given:</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a> <a name="proxyremote" id="proxyremote">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle certain requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemote <var>match</var> <var>remote-server</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This defines remote proxies to this proxy. <var>match</var> is either the
- name of a URL-scheme that the remote server supports, or a partial URL
- for which the remote server should be used, or <code>*</code> to indicate
- the server should be contacted for all requests. <var>remote-server</var> is
- a partial URL for the remote server. Syntax:</p>
+ <pre class="prettyprint lang-config">ProxyPass /examples http://backend.example.com/examples
+ProxyPass /docs http://backend.example.com/docs</pre>
- <div class="example"><p><code>
- <dfn>remote-server</dfn> =
- <var>scheme</var>://<var>hostname</var>[:<var>port</var>]
- </code></p></div>
- <p><var>scheme</var> is effectively the protocol that should be used to
- communicate with the remote server; only <code>http</code> and <code>https</code>
- are supported by this module. When using <code>https</code>, the requests
- are forwarded through the remote proxy using the HTTP CONNECT method.</p>
+ <p>This example defines two different workers, each using a separate
+ connection pool and configuration.</p>
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyRemote http://goodguys.example.com/ http://mirrorguys.example.com:8000
-ProxyRemote * http://cleverproxy.localdomain
-ProxyRemote ftp http://ftpproxy.mydomain:8080</pre>
-</div>
+ <div class="warning"><h3>Worker Sharing</h3>
+ <p>Worker sharing happens if the worker URLs overlap, which occurs when
+ the URL of some worker is a leading substring of the URL of another
+ worker defined later in the configuration file. In the following example</p>
- <p>In the last example, the proxy will forward FTP requests, encapsulated
- as yet another HTTP proxy request, to another proxy which can handle
- them.</p>
+ <pre class="prettyprint lang-config">ProxyPass /apps http://backend.example.com/ timeout=60
+ProxyPass /examples http://backend.example.com/examples timeout=10</pre>
- <p>This option also supports reverse proxy configuration - a backend
- webserver can be embedded within a virtualhost URL space even if that
- server is hidden by another forward proxy.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a> <a name="proxyremotematch" id="proxyremotematch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle requests matched by regular
-expressions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>remote-server</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyRemoteMatch</code> is identical to the
- <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive, except the
- first argument is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
- match against the requested URL.</p>
+ <p>the second worker isn't actually created. Instead the first
+ worker is used. The benefit is, that there is only one connection pool,
+ so connections are more often reused. Note that all configuration attributes
+ given explicitly for the later worker will be ignored. This will be logged
+ as a warning. In the above example the resulting timeout value
+ for the URL <code>/examples</code> will be <code>60</code> instead
+ of <code>10</code>!</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a> <a name="proxyrequests" id="proxyrequests">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables forward (standard) proxy requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRequests On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyRequests Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This allows or prevents Apache httpd from functioning as a forward proxy
- server. (Setting ProxyRequests to <code>Off</code> does not disable use of
- the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.)</p>
+ <p>If you want to avoid worker sharing, sort your worker definitions
+ by URL length, starting with the longest worker URLs. If you want to maximize
+ worker sharing use the reverse sort order. See also the related warning about
+ ordering <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p>
- <p>In a typical reverse proxy or gateway configuration, this
- option should be set to
- <code>Off</code>.</p>
+ </div>
+
+ <p>Explicitly configured workers come in two flavors:
+ <dfn>direct workers</dfn> and <dfn>(load) balancer workers</dfn>.
+ They support many important configuration attributes which are
+ described below in the <code class="directive"><a href="#proxypass">ProxyPass</a></code>
+ directive. The same attributes can also be set using
+ <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p>
- <p>In order to get the functionality of proxying HTTP or FTP sites, you
- need also <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> or <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>
- (or both) present in the server.</p>
+ <p>The set of options available for a direct worker
+ depends on the protocol, which is specified in the origin server URL.
+ Available protocols include <code>ajp</code>, <code>fcgi</code>,
+ <code>ftp</code>, <code>http</code> and <code>scgi</code>.</p>
- <p>In order to get the functionality of (forward) proxying HTTPS sites, you
- need <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> enabled in the server.</p>
+ <p>Balancer workers are virtual workers that use direct workers known
+ as their members to actually handle the requests. Each balancer can
+ have multiple members. When it handles a request, it chooses a member
+ based on the configured load balancing algorithm.</p>
- <div class="warning"><h3>Warning</h3>
- <p>Do not enable proxying with <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> until you have <a href="#access">secured your server</a>. Open proxy servers are dangerous
- both to your network and to the Internet at large.</p>
- </div>
+ <p>A balancer worker is created if its worker URL uses
+ <code>balancer</code> as the protocol scheme.
+ The balancer URL uniquely identifies the balancer worker.
+ Members are added to a balancer using
+ <code class="directive"><a href="#balancermember">BalancerMember</a></code>.</p>
-<h3>See also</h3>
-<ul>
-<li><a href="#forwardreverse">Forward and Reverse Proxies/Gateways</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxySet" id="ProxySet">ProxySet</a> <a name="proxyset" id="proxyset">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set various Proxy balancer or member parameters</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxySet <var>url</var> <var>key=value [key=value ...]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive is used as an alternate method of setting any of the
- parameters available to Proxy balancers and workers normally done via the
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive. If used
- within a <code><Proxy <var>balancer url|worker url</var>></code>
- container directive, the <var>url</var> argument is not required. As a side
- effect the respective balancer or worker gets created. This can be useful
- when doing reverse proxying via a
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> instead of a
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="access" id="access">Controlling access to your proxy</a></h2>
+ <p>You can control who can access your proxy via the <code class="directive"><a href="#proxy"><Proxy></a></code> control block as in
+ the following example:</p>
- <div class="example"><pre class="prettyprint lang-config"><Proxy balancer://hotcluster>
- BalancerMember http://www2.example.com:8080 loadfactor=1
- BalancerMember http://www3.example.com:8080 loadfactor=2
- ProxySet lbmethod=bytraffic
+ <pre class="prettyprint lang-config"><Proxy *>
+ Require ip 192.168.0
</Proxy></pre>
-</div>
- <pre class="prettyprint lang-config"><Proxy http://backend>
- ProxySet keepalive=On
-</Proxy></pre>
+ <p>For more information on access control directives, see
+ <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p>
- <pre class="prettyprint lang-config">ProxySet balancer://foo lbmethod=bytraffic timeout=15</pre>
+ <p>Strictly limiting access is essential if you are using a
+ forward proxy (using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive).
+ Otherwise, your server can be used by any client to access
+ arbitrary hosts while hiding his or her true identity. This is
+ dangerous both for your network and for the Internet at large.
+ When using a reverse proxy (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive with
+ <code>ProxyRequests Off</code>), access control is less
+ critical because clients can only contact the hosts that you
+ have specifically configured.</p>
+ <p><strong>See Also</strong> the <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a> environment variable.</p>
- <pre class="prettyprint lang-config">ProxySet ajp://backend:7001 timeout=15</pre>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="startup" id="startup">Slow Startup</a></h2>
+ <p>If you're using the <code class="directive"><a href="#proxyblock">ProxyBlock</a></code> directive, hostnames' IP addresses are looked up
+ and cached during startup for later match test. This may take a few
+ seconds (or more) depending on the speed with which the hostname lookups
+ occur.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="intranet" id="intranet">Intranet Proxy</a></h2>
+ <p>An Apache httpd proxy server situated in an intranet needs to forward
+ external requests through the company's firewall (for this, configure
+ the <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive
+ to forward the respective <var>scheme</var> to the firewall proxy).
+ However, when it has to
+ access resources within the intranet, it can bypass the firewall when
+ accessing hosts. The <code class="directive"><a href="#noproxy">NoProxy</a></code>
+ directive is useful for specifying which hosts belong to the intranet and
+ should be accessed directly.</p>
+ <p>Users within an intranet tend to omit the local domain name from their
+ WWW requests, thus requesting "http://somehost/" instead of
+ <code>http://somehost.example.com/</code>. Some commercial proxy servers
+ let them get away with this and simply serve the request, implying a
+ configured local domain. When the <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> directive is used and the server is <a href="#proxyrequests">configured for proxy service</a>, Apache httpd can return
+ a redirect response and send the client to the correct, fully qualified,
+ server address. This is the preferred method since the user's bookmark
+ files will then contain fully qualified hosts.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="envsettings" id="envsettings">Protocol Adjustments</a></h2>
+ <p>For circumstances where <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> is sending
+ requests to an origin server that doesn't properly implement
+ keepalives or HTTP/1.1, there are two <a href="../env.html">environment variables</a> that can force the
+ request to use HTTP/1.0 with no keepalive. These are set via the
+ <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> directive.</p>
- <div class="warning"><h3>Warning</h3>
- <p>Keep in mind that the same parameter key can have a different meaning
- depending whether it is applied to a balancer or a worker as shown by the two
- examples above regarding timeout.</p>
- </div>
+ <p>These are the <code>force-proxy-request-1.0</code> and
+ <code>proxy-nokeepalive</code> notes.</p>
+ <pre class="prettyprint lang-config"><Location /buggyappserver/>
+ ProxyPass http://buggyappserver:7001/foo/
+ SetEnv force-proxy-request-1.0 1
+ SetEnv proxy-nokeepalive 1
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a> <a name="proxysourceaddress" id="proxysourceaddress">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set local IP address for outgoing proxy connections</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxySourceAddress <var>address</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.9 and later</td></tr>
-</table>
- <p>This directive allows to set a specific local address to bind to when connecting
- to a backend server.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a> <a name="proxystatus" id="proxystatus">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyStatus Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive determines whether or not proxy
- loadbalancer status data is displayed via the <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>
- server-status page.</p>
- <div class="note"><h3>Note</h3>
- <p><strong>Full</strong> is synonymous with <strong>On</strong></p>
- </div>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="request-bodies" id="request-bodies">Request Bodies</a></h2>
+ <p>Some request methods such as POST include a request body.
+ The HTTP protocol requires that requests which include a body
+ either use chunked transfer encoding or send a
+ <code>Content-Length</code> request header. When passing these
+ requests on to the origin server, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
+ will always attempt to send the <code>Content-Length</code>. But
+ if the body is large and the original request used chunked
+ encoding, then chunked encoding may also be used in the upstream
+ request. You can control this selection using <a href="../env.html">environment variables</a>. Setting
+ <code>proxy-sendcl</code> ensures maximum compatibility with
+ upstream servers by always sending the
+ <code>Content-Length</code>, while setting
+ <code>proxy-sendchunked</code> minimizes resource usage by using
+ chunked encoding.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout" id="proxytimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network timeout for proxied requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Value of <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive allows a user to specifiy a timeout on proxy requests.
- This is useful when you have a slow/buggy appserver which hangs, and you
- would rather just return a timeout and fail gracefully instead of waiting
- however long it takes the server to return.</p>
+ <p>Under some circumstances, the server must spool request bodies
+ to disk to satisfy the requested handling of request bodies. For
+ example, this spooling will occur if the original body was sent with
+ chunked encoding (and is large), but the administrator has
+ asked for backend requests to be sent with Content-Length or as HTTP/1.0.
+ This spooling can also occur if the request body already has a
+ Content-Length header, but the server is configured to filter incoming
+ request bodies.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyVia" id="ProxyVia">ProxyVia</a> <a name="proxyvia" id="proxyvia">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information provided in the <code>Via</code> HTTP response
-header for proxied requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyVia Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive controls the use of the <code>Via:</code> HTTP
- header by the proxy. Its intended use is to control the flow of
- proxy requests along a chain of proxy servers. See <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1), section
- 14.45 for an explanation of <code>Via:</code> header lines.</p>
+ <p><code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code> only applies to
+ request bodies that the server will spool to disk</p>
- <ul>
- <li>If set to <code>Off</code>, which is the default, no special processing
- is performed. If a request or reply contains a <code>Via:</code> header,
- it is passed through unchanged.</li>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="x-headers" id="x-headers">Reverse Proxy Request Headers</a></h2>
- <li>If set to <code>On</code>, each request and reply will get a
- <code>Via:</code> header line added for the current host.</li>
+ <p>When acting in a reverse-proxy mode (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive, for example),
+ <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> adds several request headers in
+ order to pass information to the origin server. These headers
+ are:</p>
- <li>If set to <code>Full</code>, each generated <code>Via:</code> header
- line will additionally have the Apache httpd server version shown as a
- <code>Via:</code> comment field.</li>
+ <dl>
+ <dt><code>X-Forwarded-For</code></dt>
+ <dd>The IP address of the client.</dd>
+ <dt><code>X-Forwarded-Host</code></dt>
+ <dd>The original host requested by the client in the <code>Host</code>
+ HTTP request header.</dd>
+ <dt><code>X-Forwarded-Server</code></dt>
+ <dd>The hostname of the proxy server.</dd>
+ </dl>
- <li>If set to <code>Block</code>, every proxy request will have all its
- <code>Via:</code> header lines removed. No new <code>Via:</code> header will
- be generated.</li>
- </ul>
+ <p>Be careful when using these headers on the origin server, since
+ they will contain more than one (comma-separated) value if the
+ original request already contained one of these headers. For
+ example, you can use <code>%{X-Forwarded-For}i</code> in the log
+ format string of the origin server to log the original clients IP
+ address, but you may get more than one address if the request
+ passes through several proxies.</p>
-</div>
+ <p>See also the <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code> and <code class="directive"><a href="#proxyvia">ProxyVia</a></code> directives, which control
+ other request headers.</p>
+
+ <p>Note: If you need to specify custom request headers to be
+ added to the forwarded request, use the
+ <code class="directive"><a href="../mod/mod_headers.html#requestheader">RequestHeader</a></code>
+ directive.</p>
+
+ </div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy.html" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="forwardreverse" id="forwardreverse">Mandataires directs et
- mandataires/passerelles inverses</a></h2>
- <p>Le serveur HTTP Apache peut être configuré dans les deux modes mandataire
- <dfn>direct</dfn> et mandataire <dfn>inverse</dfn> (aussi nommé
- mode <dfn>passerelle</dfn>).</p>
-
- <p>Un <dfn>mandataire direct</dfn> standard est un serveur
- intermédiaire qui s'intercale entre le client et le <em>serveur
- demandé</em>. Pour obtenir un contenu hébergé par
- le serveur demandé, le client envoie une requête au
- mandataire en nommant le serveur demandé comme
- cible, puis le mandataire extrait le contenu depuis le
- serveur demandé et le renvoie enfin au client. Le client doit être
- configuré de manière appropriée pour pouvoir utiliser le mandataire
- direct afin d'accéder à d'autres sites.</p>
-
- <p>L'accès à Internet depuis des clients situés derrière un
- pare-feu est une utilisation typique du mandataire direct. Le
- mandataire direct peut aussi utiliser la mise en cache (fournie
- par <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) pour réduire la charge du
- réseau.</p>
-
- <p>La fonctionnalité de mandataire direct est activée via la
- directive <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code>.
- Comme les mandataires directs permettent aux clients d'accéder à
- des sites quelconques via votre serveur et de dissimuler leur
- véritable origine, il est indispensable de <a href="#access">sécuriser votre serveur</a> de façon à ce que seuls
- les clients autorisés puissent accéder à votre serveur avant
- d'activer la fonctionnalité de mandataire direct.</p>
-
- <p>Un <dfn>mandataire inverse</dfn> (ou <dfn>passerelle</dfn>),
- quant à lui, apparaît au client comme un serveur web standard.
- Aucune configuration particulière du client n'est nécessaire. Le
- client adresse ses demandes de contenus ordinaires dans l'espace
- de nommage du mandataire inverse. Ce dernier décide alors où
- envoyer ces requêtes, et renvoie le contenu au client comme s'il
- l'hébergeait lui-même.</p>
-
- <p>L'accès d'utilisateurs depuis Internet vers un serveur situé
- derrière un pare-feu est une utilisation typique du mandataire
- inverse. On peut aussi utiliser les mandataires inverses pour
- mettre en oeuvre une répartition de charge entre plusieurs
- serveurs en arrière-plan, ou fournir un cache pour un serveur
- d'arrière-plan plus lent. Les mandataires inverses peuvent aussi
- tout simplement servir à rassembler plusieurs serveurs dans le
- même espace de nommage d'URLs.</p>
-
- <p>La fonctionnalité de mandataire inverse est activée via la
- directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou
- le drapeau <code>[P]</code> de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>. Il n'est
- <strong>pas</strong> nécessaire de définir <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> pour configurer
- un mandataire inverse.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Exemples simples</a></h2>
-
- <p>Les exemples ci-dessous illustrent de manière très basique la
- mise en oeuvre de la fonctionnalité de mandataire et ne sont là que
- pour vous aider à démarrer. Reportez-vous à la documentation de
- chaque directive.</p>
-
- <p>Si en outre, vous désirez activer la mise en cache, consultez la
- documentation de <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
-
- <div class="example"><h3>Mandataire inverse</h3><pre class="prettyprint lang-config">ProxyPass /foo http://foo.example.com/bar
-ProxyPassReverse /foo http://foo.example.com/bar</pre>
-</div>
-
- <div class="example"><h3>Mandataire direct</h3><pre class="prettyprint lang-config">ProxyRequests On
-ProxyVia On
-
-<Proxy *>
- Require host internal.example.com
-</Proxy></pre>
-</div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="handler" id="handler">Accès via un gestionnaire</a></h2>
-
- <p>Vous pouvez aussi forcer le traitement d'une requête en tant que
- requête de mandataire inverse en créant un gestionnaire de transfert
- approprié. Dans l'exemple suivant, toutes les requêtes pour
- des scripts PHP seront transmises au serveur FastCGI
- spécifié via un mandat inverse :
- </p>
-
- <div class="example"><h3>Scripts PHP et mandataire inverse</h3><pre class="prettyprint lang-config"><FilesMatch \.php$>
- SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/"
-</FilesMatch></pre>
-</div>
-
- <p>Cette fonctionnalité est disponible à partir de la version
- 2.4.10 du serveur HTTP Apache.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="workers" id="workers">Workers</a></h2>
- <p>Le mandataire gère la configuration et les paramètres de
- communication des serveurs originaux au sein d'objets nommés
- <dfn>workers</dfn>. Deux types de worker sont fournis : le worker
- par défaut du mandataire direct et le worker par défaut du
- mandataire inverse. Il est aussi possible de définir explicitement
- des workers supplémentaires.</p>
-
- <p>Les deux workers par défaut possèdent une configuration figée
- et seront utilisés si aucun autre worker ne correspond à la
- requête. Ils n'utilisent ni les jeux de connexions (connection
- pooling), ni les
- connexions HTTP persistantes (Keep-Alive). En effet, les
- connexions TCP vers le serveur original sont fermées et ouvertes
- pour chaque requête.</p>
-
- <p>Les workers définis explicitement sont identifiés par leur URL.
- Ils sont en général définis via les directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> lorsqu'on les
- utilise dans le cadre d'un mandataire inverse :</p>
-
- <div class="example"><pre class="prettyprint lang-config">ProxyPass /example http://backend.example.com connectiontimeout=5 timeout=30</pre>
-</div>
-
-
- <p>Cette directive va créer un worker associé à l'URL du serveur
- original <code>http://backend.example.com</code>, et utilisant les
- valeurs de timeout données. Lorsqu'ils sont utilisés dans le cadre
- d'un mandataire direct, les workers sont en général définis via la
- directive <code class="directive"><a href="#proxyset">ProxySet</a></code>,</p>
-
- <div class="example"><pre class="prettyprint lang-config">ProxySet http://backend.example.com connectiontimeout=5 timeout=30</pre>
-</div>
-
-
- <p>ou encore via les directives <code class="directive"><a href="#proxy">Proxy</a></code> et <code class="directive"><a href="#proxyset">ProxySet</a></code> :</p>
-
- <pre class="prettyprint lang-config"><Proxy http://backend.example.com>
- ProxySet connectiontimeout=5 timeout=30
-</Proxy></pre>
-
-
- <p>L'utilisation de workers définis explicitement dans le mode
- mandataire direct n'est pas très courante, car les mandataires
- directs communiquent en général avec de nombreux serveurs
- originaux. La création explicite de workers pour certains serveurs
- originaux peut cependant s'avérer utile si ces serveurs sont
- très souvent sollicités. A leur niveau, les workers explicitement
- définis ne possèdent aucune notion de mandataire direct ou
- inverse. Ils encapsulent un concept de communication commun avec
- les serveurs originaux. Un worker créé via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> pour être utilisé dans le
- cadre d'un mandataire inverse sera aussi utilisé dans le cadre
- d'un mandataire directe chaque fois que l'URL vers le serveur
- original correspondra à l'URL du worker, et vice versa.</p>
-
- <p>L'URL qui identifie un worker correspond à l'URL de son serveur
- original, y compris un éventuel chemin donné :</p>
-
- <pre class="prettyprint lang-config">ProxyPass /examples http://backend.example.com/examples
-ProxyPass /docs http://backend.example.com/docs</pre>
-
-
- <p>Dans cet exemple, deux workers différents sont définis, chacun
- d'eux utilisant des configurations et jeux de connexions
- séparés.</p>
-
- <div class="warning"><h3>Partage de workers</h3>
- <p>Le partage de workers intervient lorsque les URLs des workers
- s'entrecoupent, ce qui arrive lorsque l'URL d'un worker
- correspond au début de l'URL d'un autre worker défini plus loin
- dans le fichier de configuration. Dans l'exemple suivant,</p>
-
- <pre class="prettyprint lang-config">ProxyPass /apps http://backend.example.com/ timeout=60
-ProxyPass /examples http://backend.example.com/examples timeout=10</pre>
-
-
- <p>le second worker n'est pas vraiment créé. C'est le premier
- worker qui est en fait utilisé. L'avantage de ceci réside dans
- le fait qu'il n'existe qu'un seul jeu de connexions, ces
- dernières étant donc réutilisées plus souvent. Notez que tous
- les attributs de configuration définis explicitement pour le
- deuxième worker seront ignorés, ce qui sera journalisé en tant
- qu'avertissement. Ainsi, dans l'exemple ci-dessus, la valeur de
- timeout retenue pour l'URL <code>/exemples</code> sera
- <code>60</code>, et non <code>10</code> !</p>
-
- <p>Si vous voulez empêcher le partage de workers, classez vos
- définitions de workers selon la longueur des URLs, de la plus
- longue à la plus courte. Si au contraire vous voulez favoriser
- ce partage, utilisez l'ordre de classement inverse. Voir aussi
- l'avertissement à propos de l'ordre de classement des directives
- <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
-
- </div>
-
- <p>Les workers définis explicitement sont de deux sortes :
- <dfn>workers directs</dfn> et <dfn>workers de répartition (de
- charge)</dfn>. Ils supportent de nombreux attributs de
- configuration importants décrits dans la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Ces mêmes attributs
- peuvent aussi être définis via la directive <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p>
-
- <p>Le jeu d'options disponibles pour un worker direct dépend du
- protocole spécifié dans l'URL du serveur original. Les protocoles
- disponibles comprennent <code>ajp</code>, <code>fcgi</code>,
- <code>ftp</code>, <code>http</code> et <code>scgi</code>.</p>
-
- <p>Les workers de répartition sont des workers virtuels qui
- utilisent les workers directs, connus comme faisant partie de leurs
- membres, pour le traitement effectif des requêtes. Chaque
- répartiteur peut comporter plusieurs membres. Lorsqu'il traite une
- requête, il choisit un de ses membres en fonction de l'algorithme
- de répartition de charge défini.</p>
-
- <p>Un worker de répartition est créé si son URL de worker comporte
- <code>balancer</code> comme indicateur de protocole. L'URL du
- répartiteur permet d'identifier de manière unique le worker de
- répartition. La directive <code class="directive"><a href="#balancermember">BalancerMember</a></code> permet d'ajouter des
- membres au répartiteur.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="access" id="access">Contrôler l'accès à votre
- mandataire</a></h2>
- <p>Vous pouvez restreindre l'accès à votre mandataire via le bloc
- de contrôle <code class="directive"><a href="#proxy"><Proxy></a></code> comme dans
- l'exemple suivant :</p>
-
- <pre class="prettyprint lang-config"><Proxy *>
- Require ip 192.168.0
-</Proxy></pre>
-
-
- <p>Pour plus de détails sur les directives de contrôle d'accès,
- voir la documentation du module
- <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p>
-
- <p>Restreindre l'accès de manière stricte est essentiel si vous
- mettez en oeuvre un mandataire direct (en définissant la directive
- <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> à "on").
- Dans le cas contraire, votre serveur pourrait être utilisé par
- n'importe quel client pour accéder à des serveurs quelconques,
- tout en masquant sa véritable identité. Ceci représente un danger
- non seulement pour votre réseau, mais aussi pour l'Internet au
- sens large. Dans le cas de la mise en oeuvre d'un mandataire
- inverse (en utilisant la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> avec <code>ProxyRequests Off</code>), le contrôle
- d'accès est moins critique car les clients ne peuvent contacter
- que les serveurs que vous avez spécifiés.</p>
-
- <p><strong>Voir aussi</strong> la variable d'environnement <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">Ralentissement au démarrage</a></h2>
- <p>Si vous utilisez la directive <code class="directive"><a href="#proxyblock">ProxyBlock</a></code>, les noms d'hôtes sont résolus en adresses
- IP puis ces dernières mises en cache au cours du démarrage
- à des fins de tests de comparaisons ultérieurs. Ce processus peut
- durer plusieurs secondes (ou d'avantage) en fonction de la vitesse
- à laquelle s'effectue la résolution des noms d'hôtes.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intranet" id="intranet">Mandataire en Intranet</a></h2>
- <p>Un serveur mandataire Apache httpd situé à l'intérieur d'un Intranet
- doit faire suivre les requêtes destinées à un serveur externe à
- travers le pare-feu de l'entreprise (pour ce faire, définissez la
- directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> de
- façon à ce qu'elle fasse suivre le <var>protocole</var> concerné
- vers le mandataire du pare-feu). Cependant, lorsqu'il doit accéder
- à des ressources situées dans l'Intranet, il peut se passer du
- pare-feu pour accéder aux serveurs. A cet effet, la directive
- <code class="directive"><a href="#noproxy">NoProxy</a></code> permet de
- spécifier quels hôtes appartiennent à l'Intranet et peuvent donc
- être accédés directement.</p>
-
- <p>Les utilisateurs d'un Intranet ont tendance à oublier le nom du
- domaine local dans leurs requêtes WWW, et demandent par exemple
- "http://un-serveur/" au lieu de
- <code>http://un-serveur.example.com/</code>. Certains serveurs
- mandataires commerciaux acceptent ce genre de requête et les
- traitent simplement en utilisant un nom de domaine local
- implicite. Lorsque la directive <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> est utilisée et si le
- serveur est <a href="#proxyrequests">configuré comme
- mandataire</a>, Apache httpd peut renvoyer une réponse de redirection et
- ainsi fournir au client l'adresse de serveur correcte,
- entièrement qualifiée. C'est la méthode à privilégier car le
- fichier des marque-pages de l'utilisateur contiendra alors des
- noms de serveurs entièrement qualifiés.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="envsettings" id="envsettings">Ajustements relatifs au
- protocole</a></h2>
- <p>Pour les cas où <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> envoie des requêtes
- vers un serveur qui n'implémente pas correctement les connexions
- persistantes ou le protocole HTTP/1.1, il existe deux variables
- d'environnement qui permettent de forcer les requêtes à utiliser
- le protocole HTTP/1.0 avec connexions non persistantes. Elles
- peuvent être définies via la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>.</p>
-
- <p>Il s'agit des variables <code>force-proxy-request-1.0</code> et
- <code>proxy-nokeepalive</code>.</p>
-
- <pre class="prettyprint lang-config"><Location /buggyappserver/>
- ProxyPass http://buggyappserver:7001/foo/
- SetEnv force-proxy-request-1.0 1
- SetEnv proxy-nokeepalive 1
-</Location></pre>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="request-bodies" id="request-bodies">Corps de requêtes</a></h2>
-
- <p>Certaines méthodes de requêtes comme POST comportent un corps de
- requête. Le protocole HTTP stipule que les requêtes qui comportent
- un corps doivent soit utiliser un codage de transmission
- fractionnée (chunked transfer encoding), soit envoyer un en-tête de requête
- <code>Content-Length</code>. Lorsqu'il fait suivre ce genre de
- requête vers le serveur demandé, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
- s'efforce toujours d'envoyer l'en-tête <code>Content-Length</code>.
- Par contre, si la taille du corps est importante, et si la requête
- originale utilise un codage à fractionnement, ce dernier peut aussi
- être utilisé dans la requête montante. Ce comportement peut être
- contrôlé à l'aide de <a href="../env.html">variables
- d'environnement</a>. Ainsi, si elle est définie, la variable
- <code>proxy-sendcl</code> assure une compatibilité maximale avec les
- serveurs demandés en imposant l'envoi de l'en-tête
- <code>Content-Length</code>, alors que
- <code>proxy-sendchunked</code> diminue la consommation de ressources
- en imposant l'utilisation d'un codage à fractionnement.</p>
-
- <p>Dans certaines circonstances, le serveur doit mettre en file
- d'attente sur disque les corps de requêtes afin de satisfaire le
- traitement demandé des corps de requêtes. Par exemple, cette mise en
- file d'attente se produira si le corps original a été envoyé selon un
- codage morcelé (et possède une taille importante), alors que
- l'administrateur a demandé que les requêtes du serveur
- d'arrière-plan soient envoyées avec l'en-tête Content-Length ou en
- HTTP/1.0. Cette mise en file d'attente se produira aussi si le corps
- de la requête contient déjà un en-tête Content-Length, alors que le
- serveur est configuré pour filtrer les corps des requêtes entrantes.</p>
-
- <p>La directive <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code> ne s'applique qu'aux
- corps de requêtes que le serveur met en file d'attente sur disque.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="x-headers" id="x-headers">En-têtes de requête du mandataire
- inverse</a></h2>
-
- <p>Lorsqu'il est configuré en mode mandataire inverse (en utilisant
- par exemple la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>),
- <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> ajoute plusieurs en-têtes de requête
- afin de transmettre des informations au serveur demandé. Ces
- en-têtes sont les suivants :</p>
-
- <dl>
- <dt><code>X-Forwarded-For</code></dt>
- <dd>L'adresse IP du client.</dd>
- <dt><code>X-Forwarded-Host</code></dt>
- <dd>L'hôte d'origine demandé par le client dans l'en-tête de
- requête HTTP <code>Host</code>.</dd>
- <dt><code>X-Forwarded-Server</code></dt>
- <dd>Le nom d'hôte du serveur mandataire.</dd>
- </dl>
-
- <p>Ces en-têtes doivent être utilisés avec précautions sur le
- serveur demandé, car ils contiendront plus d'une valeur (séparées
- par des virgules) si la requête originale contenait déjà un de ces
- en-têtes. Par exemple, vous pouvez utiliser
- <code>%{X-Forwarded-For}i</code> dans la chaîne de format du journal
- du serveur demandé pour enregistrer les adresses IP des clients
- originaux, mais il est possible que vous obteniez plusieurs adresses
- si la requête passe à travers plusieurs mandataires.</p>
-
- <p>Voir aussi les directives <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code> et <code class="directive"><a href="#proxyvia">ProxyVia</a></code> directives, qui permettent
- de contrôler d'autres en-têtes de requête.</p>
-
- <p>Note : Si vous devez ajouter des en-têtes particuliers à la
- requête mandatée, utilisez la directive <code class="directive"><a href="../mod/mod_headers.html#requestheader">RequestHeader</a></code>.</p>
-
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="balancergrowth" id="balancergrowth">Directive</a> <a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre de membres supplémentaires pouvant être ajoutés
Disponible depuis la version 2.4.5 du serveur HTTP Apache.
</td></tr>
- <tr><td>nonce</td>
- <td><auto></td>
- <td>Le nombre à usage unique de protection utilisé dans la page
- de l'application <code>balancer-manager</code>. Par défaut, la
- protection de la page est assurée par un nombre à usage unique
- automatique à base d'UUID. Si une valeur est précisée, elle sera
- utilisée comme nombre à usage unique. La valeur
- <code>None</code> désactive la vérification du nombre à usage
- unique.
+ <tr><td>nonce</td>
+ <td><auto></td>
+ <td>Le nombre à usage unique de protection utilisé dans la page
+ de l'application <code>balancer-manager</code>. Par défaut, la
+ protection de la page est assurée par un nombre à usage unique
+ automatique à base d'UUID. Si une valeur est précisée, elle sera
+ utilisée comme nombre à usage unique. La valeur
+ <code>None</code> désactive la vérification du nombre à usage
+ unique.
+ <div class="note"><h3>Note</h3>
+ <p>En plus du nombre à usage unique, la page de l'application
+ <code>balancer-manager</code> peut être protégée par une ACL.</p>
+ </div>
+ </td></tr>
+ <tr><td>growth</td>
+ <td>0</td>
+ <td>Nombre de membres supplémentaires que l'on peut ajouter à ce
+ répartiteur en plus de ceux définis au niveau de la
+ configuration.
+ </td></tr>
+ <tr><td>forcerecovery</td>
+ <td>On</td>
+ <td>Force la relance immédiate de tous les membres sans tenir
+ compte de leur paramètre retry dans le cas où ils sont tous en
+ état d'erreur. Il peut cependant arriver qu'un membre déjà
+ surchargé entre dans une situation critique si la relance de
+ tous les membres est forcée sans tenir compte du paramètre retry
+ de chaque membre. Dans ce cas, définissez ce paramètre à
+ <code>Off</code>.<br />
+ Disponible depuis la version 2.4.2 du serveur HTTP Apache.
+ </td></tr>
+
+ </table>
+ <p>Exemple de configuration d'un répartiteur de charge</p>
+ <pre class="prettyprint lang-config">ProxyPass /special-area http://special.example.com smax=5 max=10
+ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On
+<Proxy balancer://mycluster>
+ BalancerMember ajp://1.2.3.4:8009
+ BalancerMember ajp://1.2.3.5:8009 loadfactor=20
+ # Less powerful server, don't send as many requests there,
+ BalancerMember ajp://1.2.3.6:8009 loadfactor=5
+</Proxy></pre>
+
+
+ <p>Configuration d'un serveur cible de réserve qui ne sera utilisé que si
+ aucun autre serveur cible n'est disponible</p>
+ <pre class="prettyprint lang-config">ProxyPass / balancer://hotcluster/
+<Proxy balancer://hotcluster>
+ BalancerMember ajp://1.2.3.4:8009 loadfactor=1
+ BalancerMember ajp://1.2.3.5:8009 loadfactor=2
+ # The server below is on hot standby
+ BalancerMember ajp://1.2.3.6:8009 status=+H
+ ProxySet lbmethod=bytraffic
+</Proxy></pre>
+
+
+ <p>Normalement, mod_proxy va mettre sous leur forme canonique les
+ URLs traitées par ProxyPass. Mais ceci peut être incompatible avec
+ certains serveurs d'arrière-plan, et en particulier avec ceux qui
+ utilisent <var>PATH_INFO</var>. Le mot-clé optionnel
+ <var>nocanon</var> modifie ce comportement et permet de transmettre
+ le chemin d'URL sous sa forme brute au serveur d'arrière-plan. Notez
+ que ceci peut affecter la sécurité de votre serveur d'arrière-plan,
+ car la protection limitée contre les attaques à base d'URL que
+ fournit le mandataire est alors supprimée.</p>
+
+ <p>Par défaut, mod_proxy inclut la chaîne de paramètres lors de la
+ génération de la variable d'environnement
+ <var>SCRIPT_FILENAME</var>. Le mot-clé optionnel <var>noquery</var>
+ (disponible à partir de la version 2.4.1) permet d'exclure cette
+ chaîne.</p>
+
+ <p>Lorsque la directive ProxyPass est utilisée à l'intérieur d'une
+ section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>, le premier argument est omis et le répertoire
+ local est obtenu à partir de la section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. Il en sera de même dans une
+ section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> ; cependant, ProxyPass
+ n'interprète pas les expressions rationnelles, et il sera ici
+ nécessaire d'utiliser la directive
+ <code class="directive">ProxyPassMatch</code> à la place.</p>
+
+ <p>Cette directive ne peut pas être placée dans une section
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou
+ <code class="directive"><a href="../mod/core.html#files"><Files></a></code>.</p>
+
+ <p>Si vous avez besoin d'un configuration de mandataire inverse plus
+ souple, reportez-vous à la documentaion de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> et son drapeau
+ <code>[P]</code>.</p>
+
+ <p>Le mot-clé optionnel <var>interpolate</var>, en combinaison avec la directive
+ <code class="directive">ProxyPassInterpolateEnv</code>, permet à ProxyPass
+ d'interpoler les variables d'environnement à l'aide de la syntaxe
+ <var>${VARNAME}</var>. Notez que de nombreuses variables
+ d'environnement standard dérivées de CGI n'existeront pas lorsque
+ l'interpolation se produit ; vous devrez alors encore avoir avoir
+ recours à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour des règles
+ complexes. Notez aussi que l'interpolation n'est pas supportée dans
+ la partie protocole d'une URL. La détermination dynamique du
+ protocole peut être effectuée à l'aide de
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> comme dans l'exemple suivant :</p>
+
+ <pre class="prettyprint lang-config">RewriteEngine On
+
+RewriteCond %{HTTPS} =off
+RewriteRule . - [E=protocol:http]
+RewriteCond %{HTTPS} =on
+RewriteRule . - [E=protocol:https]
+
+RewriteRule ^/mirror/foo/(.*) %{ENV:protocol}://backend.example.com/$1 [P]
+ProxyPassReverse /mirror/foo/ http://backend.example.com/
+ProxyPassReverse /mirror/foo/ https://backend.example.com/</pre>
+
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxypassinherit" id="proxypassinherit">Directive</a> <a name="ProxyPassInherit" id="ProxyPassInherit">ProxyPassInherit</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Héritage des directives ProxyPass définies au niveau du
+serveur principal</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPassInherit On</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.5 du serveur
+HTTP Apache.</td></tr>
+</table>
+ <p>Cette directive permet à un serveur virtuel d'hériter des
+ directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> définies
+ au niveau du serveur principal. Si vous utilisez la fonctionnalité de
+ modifications dynamiques du Balancer Manager, cette directive peut
+ causer des problèmes et des comportements inattendus et doit donc
+ être désactivée.</p>
+ <p>Les valeurs définies au niveau du serveur principal
+ constituent les valeurs par défaut pour tous les serveurs virtuels.</p>
+ <p>La désactivation de ProxyPassInherit désactive aussi la
+ directive <code class="directive"><a href="#balancerinherit">BalancerInherit</a></code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxypassinterpolateenv" id="proxypassinterpolateenv">Directive</a> <a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active l'interpolation des variables d'environnement dans
+les configurations de mandataires inverses</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>Cette directive, ainsi que l'argument <var>interpolate</var> des
+ directives <code class="directive">ProxyPass</code>,
+ <code class="directive">ProxyPassReverse</code>,
+ <code class="directive">ProxyPassReverseCookieDomain</code> et
+ <code class="directive">ProxyPassReverseCookiePath</code>, permet de
+ configurer dynamiquement un mandataire inverse à l'aide de
+ variables d'environnement, ces dernières pouvant être définies par un
+ autre module comme <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Elle affecte les
+ directives <code class="directive">ProxyPass</code>,
+ <code class="directive">ProxyPassReverse</code>,
+ <code class="directive">ProxyPassReverseCookieDomain</code>, et
+ <code class="directive">ProxyPassReverseCookiePath</code>, en leur indiquant
+ de remplacer la chaîne <code>${nom_var}</code> dans les directives
+ de configuration par la valeur de la variable d'environnement
+ <code>nom_var</code> (si l'option <var>interpolate</var> est
+ spécifiée).</p>
+ <p>Conservez cette directive à off (pour les performances du
+ serveur), sauf si vous en avez réellement besoin.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxypassmatch" id="proxypassmatch">Directive</a> <a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fait correspondre des serveurs distants dans l'espace d'URL
+du serveur local en utilisant des expressions rationnelles</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var>
+[<var>clé=valeur</var>
+ <var>[clé=valeur</var> ...]]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>Cette directive est identique à la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>, mais fait usage des
+ expressions rationnelles, au lieu d'une simple comparaison de
+ préfixes. L'expression rationnelle spécifiée est comparée à
+ l'<var>url</var>, et si elle correspond, le serveur va substituer
+ toute correspondance entre parenthèses dans la chaîne donnée et
+ l'utiliser comme nouvelle <var>url</var>.</p>
+
+ <div class="note"><strong>Note : </strong>Cette directive ne peut pas être
+ utilisée dans un contexte de niveau répertoire.</div>
+
+ <p>Supposons que le serveur local a pour adresse
+ <code>http://example.com/</code> ; alors</p>
+
+ <pre class="prettyprint lang-config">ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com/$1</pre>
+
+
+ <p>va provoquer la conversion interne de la requête locale
+ <code>http://example.com/foo/bar.gif</code> en une requête mandatée
+ pour <code>http://backend.example.com/foo/bar.gif</code>.</p>
+
<div class="note"><h3>Note</h3>
- <p>En plus du nombre à usage unique, la page de l'application
- <code>balancer-manager</code> peut être protégée par une ACL.</p>
+ <p>L'argument URL doit pouvoir être interprété en tant qu'URL
+ <em>avant</em> les substitutions d'expressions rationnelles (et
+ doit aussi l'être après). Ceci limite les correspondances que vous
+ pouvez utiliser. Par exemple, si l'on avait utilisé</p>
+ <pre class="prettyprint lang-config">ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com:8000$1</pre>
+
+ <p>dans l'exemple précédent, nous aurions provoqué une erreur de
+ syntaxe au démarrage du serveur. C'est une bogue (PR 46665 dans
+ ASF bugzilla), et il est possible de la contourner en reformulant
+ la correspondance :</p>
+ <pre class="prettyprint lang-config">ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com:8000/$1</pre>
+
</div>
- </td></tr>
- <tr><td>growth</td>
- <td>0</td>
- <td>Nombre de membres supplémentaires que l'on peut ajouter à ce
- répartiteur en plus de ceux définis au niveau de la
- configuration.
- </td></tr>
- <tr><td>forcerecovery</td>
- <td>On</td>
- <td>Force la relance immédiate de tous les membres sans tenir
- compte de leur paramètre retry dans le cas où ils sont tous en
- état d'erreur. Il peut cependant arriver qu'un membre déjà
- surchargé entre dans une situation critique si la relance de
- tous les membres est forcée sans tenir compte du paramètre retry
- de chaque membre. Dans ce cas, définissez ce paramètre à
- <code>Off</code>.<br />
- Disponible depuis la version 2.4.2 du serveur HTTP Apache.
- </td></tr>
- </table>
- <p>Exemple de configuration d'un répartiteur de charge</p>
- <pre class="prettyprint lang-config">ProxyPass /special-area http://special.example.com smax=5 max=10
-ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On
-<Proxy balancer://mycluster>
- BalancerMember ajp://1.2.3.4:8009
- BalancerMember ajp://1.2.3.5:8009 loadfactor=20
- # Less powerful server, don't send as many requests there,
- BalancerMember ajp://1.2.3.6:8009 loadfactor=5
-</Proxy></pre>
+ <p>Le drapeau <code>!</code> vous permet de ne pas mandater un
+ sous-répertoire donné.</p>
+ <p>Dans une section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>, le premier argument est
+ omis et l'expression rationnelle est obtenue à partir de la directive
+ <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>.</p>
- <p>Configuration d'un serveur cible de réserve qui ne sera utilisé que si
- aucun autre serveur cible n'est disponible</p>
- <pre class="prettyprint lang-config">ProxyPass / balancer://hotcluster/
-<Proxy balancer://hotcluster>
- BalancerMember ajp://1.2.3.4:8009 loadfactor=1
- BalancerMember ajp://1.2.3.5:8009 loadfactor=2
- # The server below is on hot standby
- BalancerMember ajp://1.2.3.6:8009 status=+H
- ProxySet lbmethod=bytraffic
-</Proxy></pre>
+ <p>Si vous avez besoin d'une configuration du mandataire inverse
+ plus flexible, voyez la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> avec le drapeau
+ <code>[P]</code>.</p>
+ <div class="note">
+ <h3>Substitution par défaut</h3>
+ <p>Lorsque le paramètre URL n'utilise pas de références arrières
+ dans l'expression rationnelle, l'URL originale sera ajoutée au
+ paramètre URL.
+ </p>
+ </div>
- <p>Normalement, mod_proxy va mettre sous leur forme canonique les
- URLs traitées par ProxyPass. Mais ceci peut être incompatible avec
- certains serveurs d'arrière-plan, et en particulier avec ceux qui
- utilisent <var>PATH_INFO</var>. Le mot-clé optionnel
- <var>nocanon</var> modifie ce comportement et permet de transmettre
- le chemin d'URL sous sa forme brute au serveur d'arrière-plan. Notez
- que ceci peut affecter la sécurité de votre serveur d'arrière-plan,
- car la protection limitée contre les attaques à base d'URL que
- fournit le mandataire est alors supprimée.</p>
+ <div class="warning">
+ <h3>Avertissement à propos de la sécurité</h3>
+ <p>Lors de la construction de l'URL cible de la règle, il convient
+ de prendre en compte l'impact en matière de sécurité qu'aura le
+ fait de permettre au client d'influencer le jeu d'URLs pour
+ lesquelles votre serveur agira en tant que mandataire.
+ Assurez-vous que la partie protocole://nom-serveur de l'URL soit
+ fixe, ou ne permette pas au client de l'influencer induement.</p>
+ </div>
- <p>Par défaut, mod_proxy inclut la chaîne de paramètres lors de la
- génération de la variable d'environnement
- <var>SCRIPT_FILENAME</var>. Le mot-clé optionnel <var>noquery</var>
- (disponible à partir de la version 2.4.1) permet d'exclure cette
- chaîne.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxypassreverse" id="proxypassreverse">Directive</a> <a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste l'URL dans les en-têtes de la réponse HTTP envoyée
+par un serveur mandaté en inverse</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverse [<var>chemin</var>] <var>url</var>
+[<var>interpolate</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>Cette directive permet de faire en sorte qu'Apache httpd ajuste l'URL
+ dans les en-têtes <code>Location</code>,
+ <code>Content-Location</code> et <code>URI</code> des réponses de
+ redirection HTTP. Ceci est essentiel lorsqu'Apache httpd est utilisé en
+ tant que mandataire inverse (ou passerelle), afin d'éviter de
+ court-circuiter le mandataire inverse suite aux redirections HTTP
+ sur le serveur d'arrière-plan qui restent derrière le mandataire
+ inverse.</p>
- <p>Lorsque la directive ProxyPass est utilisée à l'intérieur d'une
- section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>, le premier argument est omis et le répertoire
- local est obtenu à partir de la section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. Il en sera de même dans une
- section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> ; cependant, ProxyPass
- n'interprète pas les expressions rationnelles, et il sera ici
- nécessaire d'utiliser la directive
- <code class="directive">ProxyPassMatch</code> à la place.</p>
+ <p>Seuls les en-têtes de réponse HTTP spécialement mentionnés
+ ci-dessus seront réécrits. Apache httpd ne réécrira ni les autres en-têtes
+ de réponse, ni par défaut les références d'URLs dans les pages HTML. Cela
+ signifie que dans le cas où un contenu mandaté contient des
+ références à des URLs absolues, elles court-circuiteront le
+ mandataire. Pour réécrire un contenu HTML afin qu'il corresponde au
+ mandataire, vous devez charger et activer le module
+ <code class="module"><a href="../mod/mod_proxy_html.html">mod_proxy_html</a></code>.
+ </p>
- <p>Cette directive ne peut pas être placée dans une section
- <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou
- <code class="directive"><a href="../mod/core.html#files"><Files></a></code>.</p>
+ <p><var>chemin</var> est le nom d'un chemin virtuel local.
+ <var>url</var> est une URL partielle pour le serveur distant - ils
+ sont utilisés de la même façon qu'avec la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
- <p>Si vous avez besoin d'un configuration de mandataire inverse plus
- souple, reportez-vous à la documentaion de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> et son drapeau
- <code>[P]</code>.</p>
+ <p>Supposons par exemple que le serveur local a pour adresse
+ <code>http://example.com/</code> ; alors</p>
- <p>Le mot-clé optionnel <var>interpolate</var>, en combinaison avec la directive
- <code class="directive">ProxyPassInterpolateEnv</code>, permet à ProxyPass
- d'interpoler les variables d'environnement à l'aide de la syntaxe
- <var>${VARNAME}</var>. Notez que de nombreuses variables
- d'environnement standard dérivées de CGI n'existeront pas lorsque
- l'interpolation se produit ; vous devrez alors encore avoir avoir
- recours à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour des règles
- complexes. Notez aussi que l'interpolation n'est pas supportée dans
- la partie protocole d'une URL. La détermination dynamique du
- protocole peut être effectuée à l'aide de
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> comme dans l'exemple suivant :</p>
+ <pre class="prettyprint lang-config">ProxyPass /mirror/foo/ http://backend.example.com/
+ProxyPassReverse /mirror/foo/ http://backend.example.com/
+ProxyPassReverseCookieDomain backend.example.com public.example.com
+ProxyPassReverseCookiePath / /mirror/foo/</pre>
- <pre class="prettyprint lang-config">RewriteEngine On
-RewriteCond %{HTTPS} =off
-RewriteRule . - [E=protocol:http]
-RewriteCond %{HTTPS} =on
-RewriteRule . - [E=protocol:https]
+ <p>ne va pas seulement provoquer la conversion interne d'une requête
+ locale pour <code>http://example.com/miroir/foo/bar</code> en une
+ requête mandatée pour <code>http://backend.example.com/bar</code>
+ (la fonctionnalité fournie par <code>ProxyPass</code>). Il va
+ aussi s'occuper des redirections que le serveur
+ <code>backend.example.com</code> envoie : lorsque
+ <code>http://backend.example.com/bar</code> est redirigé par
+ celui-ci vers <code>http://backend.example.com/quux</code>, Apache
+ httpd corrige ceci en <code>http://example.com/miroir/foo/quux</code>
+ avant de faire suivre la redirection HTTP au client. Notez que le
+ nom d'hôte utilisé pour construire l'URL est choisi en respectant la
+ définition de la directive <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>.</p>
-RewriteRule ^/mirror/foo/(.*) %{ENV:protocol}://backend.example.com/$1 [P]
-ProxyPassReverse /mirror/foo/ http://backend.example.com/
-ProxyPassReverse /mirror/foo/ https://backend.example.com/</pre>
+ <p>Notez que la directive <code class="directive">ProxyPassReverse</code>
+ peut aussi être utilisée en conjonction avec la fonctionnalité
+ pass-through (<code>RewriteRule ... [P]</code>) du module
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, car elle ne dépend pas d'une directive
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code>
+ correspondante.</p>
+
+ <p>Le mot-clé optionnel <var>interpolate</var>,
+ utilisé en combinaison avec la directive
+ <code class="directive">ProxyPassInterpolateEnv</code>, permet
+ l'interpolation des variables d'environnement spécifiées en
+ utilisant le format <var>${VARNAME}</var>. Notez que l'interpolation
+ n'est pas supportée dans la partie protocole d'une URL.
+ </p>
+
+ <p>Lorsque cette directive est utilisée dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>, le premier
+ argument est omis et le répertoire local est obtenu à partir de
+ l'argument de la directive <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. Il en est de même à l'intérieur
+ d'une section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>, mais le résultat ne sera
+ probablement pas celui attendu car ProxyPassReverse va interpréter
+ l'expression rationnelle littéralement comme un chemin ; si besoin
+ est dans ce cas, définissez la directive ProxyPassReverse en dehors
+ de la section, ou dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code> séparée.</p>
+
+ <p>Cette directive ne peut pas être placée dans une section
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou
+ <code class="directive"><a href="../mod/core.html#files"><Files></a></code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a> <a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la chaîne correspondant au domaine dans les en-têtes
+Set-Cookie en provenance d'un serveur mandaté</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookieDomain <var>domaine-interne</var>
+<var>domaine-public</var> [<var>interpolate</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+<p>L'utilisation de cette directive est similaire à celle de la
+directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>,
+mais au lieu de réécrire des en-têtes qui contiennent des URLs, elle
+réécrit la chaîne correspondant au domaine dans les en-têtes
+<code>Set-Cookie</code>.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a> <a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la chaîne correspondant au chemin dans les en-têtes
+Set-Cookie en provenance d'un serveur mandaté</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookiePath <var>chemin-interne</var>
+<var>chemin-public</var> [<var>interpolate</var>]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+<p>
+Cette directive s'avère utile en conjonction avec la directive
+<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code> dans les
+situations où les chemins d'URL d'arrière-plan correspondent à des
+chemins publics sur le mandataire inverse. Cette directive permet de
+réécrire la chaîne <code>path</code> dans les en-têtes
+<code>Set-Cookie</code>. Si le début du chemin du cookie correspond à
+<var>chemin-interne</var>, le chemin du cookie sera remplacé par
+<var>chemin-public</var>.
+</p><p>
+Dans l'exemple fourni avec la directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, la directive :
+</p>
+ <pre class="prettyprint lang-config">ProxyPassReverseCookiePath / /mirror/foo/</pre>
+<p>
+va réécrire un cookie possédant un chemin d'arrière-plan <code>/</code>
+(ou <code>/example</code> ou en fait tout chemin)
+en <code>/mirror/foo/</code>..
+</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxypassinherit" id="proxypassinherit">Directive</a> <a name="ProxyPassInherit" id="ProxyPassInherit">ProxyPassInherit</a></h2>
+<div class="directive-section"><h2><a name="proxypreservehost" id="proxypreservehost">Directive</a> <a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Héritage des directives ProxyPass définies au niveau du
-serveur principal</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPassInherit On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise l'en-tête de requête entrante Host pour la requête
+du mandataire</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPreserveHost Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.5 du serveur
-HTTP Apache.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Utilisable
+dans un contexte de répertoire depuis la version 2.3.3.</td></tr>
</table>
- <p>Cette directive permet à un serveur virtuel d'hériter des
- directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> définies
- au niveau du serveur principal. Si vous utilisez la fonctionnalité de
- modifications dynamiques du Balancer Manager, cette directive peut
- causer des problèmes et des comportements inattendus et doit donc
- être désactivée.</p>
- <p>Les valeurs définies au niveau du serveur principal
- constituent les valeurs par défaut pour tous les serveurs virtuels.</p>
- <p>La désactivation de ProxyPassInherit désactive aussi la
- directive <code class="directive"><a href="#balancerinherit">BalancerInherit</a></code>.</p>
-
+ <p>Lorsqu'elle est activée, cette directive va transmettre l'en-tête
+ Host: de la requête entrante vers le serveur mandaté, au lieu du nom
+ d'hôte spécifié par la directive <code class="directive">ProxyPass</code>.</p>
+
+ <p>Cette directive est habituellement définie à <code>Off</code>.
+ Elle est principalement utile dans les configurations particulières
+ comme l'hébergement virtuel mandaté en masse à base de nom, où
+ l'en-tête Host d'origine doit être évalué par le serveur
+ d'arrière-plan.</p>
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxypassinterpolateenv" id="proxypassinterpolateenv">Directive</a> <a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a></h2>
+<div class="directive-section"><h2><a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a> <a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active l'interpolation des variables d'environnement dans
-les configurations de mandataires inverses</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille du tampon réseau pour les connexions mandatées HTTP
+et FTP</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyReceiveBufferSize <var>octets</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>Cette directive, ainsi que l'argument <var>interpolate</var> des
- directives <code class="directive">ProxyPass</code>,
- <code class="directive">ProxyPassReverse</code>,
- <code class="directive">ProxyPassReverseCookieDomain</code> et
- <code class="directive">ProxyPassReverseCookiePath</code>, permet de
- configurer dynamiquement un mandataire inverse à l'aide de
- variables d'environnement, ces dernières pouvant être définies par un
- autre module comme <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Elle affecte les
- directives <code class="directive">ProxyPass</code>,
- <code class="directive">ProxyPassReverse</code>,
- <code class="directive">ProxyPassReverseCookieDomain</code>, et
- <code class="directive">ProxyPassReverseCookiePath</code>, en leur indiquant
- de remplacer la chaîne <code>${nom_var}</code> dans les directives
- de configuration par la valeur de la variable d'environnement
- <code>nom_var</code> (si l'option <var>interpolate</var> est
- spécifiée).</p>
- <p>Conservez cette directive à off (pour les performances du
- serveur), sauf si vous en avez réellement besoin.</p>
+ <p>La directive <code class="directive">ProxyReceiveBufferSize</code> permet
+ de spécifier une taille de tampon réseau explicite (TCP/IP) pour les
+ connexions mandatées HTTP et FTP, afin d'améliorer le débit de
+ données. Elle doit être supérieure à <code>512</code> ou définie à
+ <code>0</code> pour indiquer que la taille de tampon par défaut du
+ système doit être utilisée.</p>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyReceiveBufferSize 2048</pre>
+</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxypassmatch" id="proxypassmatch">Directive</a> <a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a></h2>
+<div class="directive-section"><h2><a name="proxyremote" id="proxyremote">Directive</a> <a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fait correspondre des serveurs distants dans l'espace d'URL
-du serveur local en utilisant des expressions rationnelles</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var>
-[<var>clé=valeur</var>
- <var>[clé=valeur</var> ...]]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Mandataire distant à utiliser pour traiter certaines
+requêtes</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemote <var>comparaison</var> <var>serveur-distant</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>Cette directive est identique à la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>, mais fait usage des
- expressions rationnelles, au lieu d'une simple comparaison de
- préfixes. L'expression rationnelle spécifiée est comparée à
- l'<var>url</var>, et si elle correspond, le serveur va substituer
- toute correspondance entre parenthèses dans la chaîne donnée et
- l'utiliser comme nouvelle <var>url</var>.</p>
-
- <div class="note"><strong>Note : </strong>Cette directive ne peut pas être
- utilisée dans un contexte de niveau répertoire.</div>
-
- <p>Supposons que le serveur local a pour adresse
- <code>http://example.com/</code> ; alors</p>
+ <p>Cette directive permet de définir des mandataires distants pour
+ ce mandataire. <var>comparaison</var> est soit le nom d'un protocole
+ que supporte le serveur distant, soit une URL partielle pour
+ laquelle le serveur distant devra être utilisé, soit <code>*</code>
+ pour indiquer que le serveur distant doit être utilisé pour toutes
+ les requêtes. <var>serveur-distant</var> est une URL partielle
+ correspondant au serveur distant. Syntaxe : </p>
- <pre class="prettyprint lang-config">ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com/$1</pre>
+ <div class="example"><p><code>
+ <dfn>serveur-distant</dfn> =
+ <var>protocole</var>://<var>nom-serveur</var>[:<var>port</var>]
+ </code></p></div>
+ <p><var>protocole</var> est effectivement le protocole à utiliser
+ pour communiquer avec le serveur distant ; ce module ne supporte que
+ <code>http</code> et <code>https</code>. Lorsqu'on utilise
+ <code>https</code>, les requêtes sont redirigées par le mandataire
+ distant en utilisant la méthode HTTP CONNECT.</p>
- <p>va provoquer la conversion interne de la requête locale
- <code>http://example.com/foo/bar.gif</code> en une requête mandatée
- pour <code>http://backend.example.com/foo/bar.gif</code>.</p>
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote http://goodguys.example.com/ http://mirrorguys.example.com:8000
+ProxyRemote * http://cleverproxy.localdomain
+ProxyRemote ftp http://ftpproxy.mydomain:8080</pre>
+</div>
- <div class="note"><h3>Note</h3>
- <p>L'argument URL doit pouvoir être interprété en tant qu'URL
- <em>avant</em> les substitutions d'expressions rationnelles (et
- doit aussi l'être après). Ceci limite les correspondances que vous
- pouvez utiliser. Par exemple, si l'on avait utilisé</p>
- <pre class="prettyprint lang-config">ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com:8000$1</pre>
+ <p>Dans la dernière ligne de l'exemple, le mandataire va faire
+ suivre les requêtes FTP, encapsulées dans une autre requête mandatée
+ HTTP, vers un autre mandataire capable de les traiter.</p>
- <p>dans l'exemple précédent, nous aurions provoqué une erreur de
- syntaxe au démarrage du serveur. C'est une bogue (PR 46665 dans
- ASF bugzilla), et il est possible de la contourner en reformulant
- la correspondance :</p>
- <pre class="prettyprint lang-config">ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com:8000/$1</pre>
+ <p>Cette directive supporte aussi les configurations de mandataire
+ inverse - un serveur web d'arrière-plan peut être intégré dans
+ l'espace d'URL d'un serveur virtuel, même si ce serveur est caché
+ par un autre mandataire direct.</p>
- </div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxyremotematch" id="proxyremotematch">Directive</a> <a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le mandataire distant à utiliser pour traiter les requêtes
+correspondant à une expression rationnelle</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>serveur-distant</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>La directive <code class="directive">ProxyRemoteMatch</code> est
+ identique à la directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code>, à l'exception du
+ premier argument qui est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression
+ rationnelle</a> à mettre en correspondance avec l'URL de la
+ requête.</p>
- <p>Le drapeau <code>!</code> vous permet de ne pas mandater un
- sous-répertoire donné.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxyrequests" id="proxyrequests">Directive</a> <a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active la fonctionnalité (standard) de mandataire
+direct</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRequests On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyRequests Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>Cette directive permet d'activer/désactiver la fonctionnalité de
+ serveur mandataire direct d'Apache httpd. Définir ProxyRequests à
+ <code>Off</code> n'interdit pas l'utilisation de la directive
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
- <p>Dans une section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>, le premier argument est
- omis et l'expression rationnelle est obtenue à partir de la directive
- <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>.</p>
+ <p>Pour une configuration typique de mandataire inverse ou
+ passerelle, cette directive doit être définie à
+ <code>Off</code>.</p>
- <p>Si vous avez besoin d'une configuration du mandataire inverse
- plus flexible, voyez la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> avec le drapeau
- <code>[P]</code>.</p>
+ <p>Afin d'activer la fonctionnalité de mandataire pour des sites
+ HTTP et/ou FTP, les modules <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> et/ou
+ <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> doivent également être chargés dans le
+ serveur.</p>
- <div class="note">
- <h3>Substitution par défaut</h3>
- <p>Lorsque le paramètre URL n'utilise pas de références arrières
- dans l'expression rationnelle, l'URL originale sera ajoutée au
- paramètre URL.
- </p>
- </div>
+ <p>Pour activer la fonctionnalité de mandataire sur les sites chiffrés en HTTPS, le module
+ <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> doit également être chargé dans le serveur.</p>
- <div class="warning">
- <h3>Avertissement à propos de la sécurité</h3>
- <p>Lors de la construction de l'URL cible de la règle, il convient
- de prendre en compte l'impact en matière de sécurité qu'aura le
- fait de permettre au client d'influencer le jeu d'URLs pour
- lesquelles votre serveur agira en tant que mandataire.
- Assurez-vous que la partie protocole://nom-serveur de l'URL soit
- fixe, ou ne permette pas au client de l'influencer induement.</p>
+ <div class="warning"><h3>Avertissement</h3>
+ <p>N'activez pas la fonctionnalité de mandataire avec la directive
+ <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> avant
+ d'avoir <a href="#access">sécurisé votre serveur</a>. Les serveurs
+ mandataires ouverts sont dangereux non seulement pour votre
+ réseau, mais aussi pour l'Internet au sens large.</p>
</div>
+<h3>Voir aussi</h3>
+<ul>
+<li><a href="#forwardreverse">Mandataires/Passerelles directs et
+inverses</a></li>
+</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxypassreverse" id="proxypassreverse">Directive</a> <a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a></h2>
+<div class="directive-section"><h2><a name="proxyset" id="proxyset">Directive</a> <a name="ProxySet" id="ProxySet">ProxySet</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste l'URL dans les en-têtes de la réponse HTTP envoyée
-par un serveur mandaté en inverse</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverse [<var>chemin</var>] <var>url</var>
-[<var>interpolate</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit différents paramètres relatifs à la répartition de
+charge des mandataires et aux membres des groupes de répartition de
+charge</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySet <var>url</var> <var>clé=valeur [clé=valeur ...]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
- <p>Cette directive permet de faire en sorte qu'Apache httpd ajuste l'URL
- dans les en-têtes <code>Location</code>,
- <code>Content-Location</code> et <code>URI</code> des réponses de
- redirection HTTP. Ceci est essentiel lorsqu'Apache httpd est utilisé en
- tant que mandataire inverse (ou passerelle), afin d'éviter de
- court-circuiter le mandataire inverse suite aux redirections HTTP
- sur le serveur d'arrière-plan qui restent derrière le mandataire
- inverse.</p>
+ <p>Cette directive propose une méthode alternative pour définir tout
+ paramètre relatif aux répartiteurs de charge et serveurs cibles de
+ mandataires normalement définis via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Si elle se trouve dans un
+ conteneur <code><Proxy <var>url de répartiteur|url de
+ serveur cible</var>></code>, l'argument <var>url</var> n'est pas
+ nécessaire. Comme effet de bord, le répartiteur ou serveur cible respectif
+ est créé. Ceci peut s'avérer utile pour la mise en oeuvre d'un
+ mandataire inverse via une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> au lieu de <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
+
+ <div class="example"><pre class="prettyprint lang-config"><Proxy balancer://hotcluster>
+ BalancerMember http://www2.example.com:8080 loadfactor=1
+ BalancerMember http://www3.example.com:8080 loadfactor=2
+ ProxySet lbmethod=bytraffic
+</Proxy></pre>
+</div>
- <p>Seuls les en-têtes de réponse HTTP spécialement mentionnés
- ci-dessus seront réécrits. Apache httpd ne réécrira ni les autres en-têtes
- de réponse, ni par défaut les références d'URLs dans les pages HTML. Cela
- signifie que dans le cas où un contenu mandaté contient des
- références à des URLs absolues, elles court-circuiteront le
- mandataire. Pour réécrire un contenu HTML afin qu'il corresponde au
- mandataire, vous devez charger et activer le module
- <code class="module"><a href="../mod/mod_proxy_html.html">mod_proxy_html</a></code>.
- </p>
+ <pre class="prettyprint lang-config"><Proxy http://backend>
+ ProxySet keepalive=On
+</Proxy></pre>
- <p><var>chemin</var> est le nom d'un chemin virtuel local.
- <var>url</var> est une URL partielle pour le serveur distant - ils
- sont utilisés de la même façon qu'avec la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
- <p>Supposons par exemple que le serveur local a pour adresse
- <code>http://example.com/</code> ; alors</p>
+ <pre class="prettyprint lang-config">ProxySet balancer://foo lbmethod=bytraffic timeout=15</pre>
- <pre class="prettyprint lang-config">ProxyPass /mirror/foo/ http://backend.example.com/
-ProxyPassReverse /mirror/foo/ http://backend.example.com/
-ProxyPassReverseCookieDomain backend.example.com public.example.com
-ProxyPassReverseCookiePath / /mirror/foo/</pre>
+ <pre class="prettyprint lang-config">ProxySet ajp://backend:7001 timeout=15</pre>
- <p>ne va pas seulement provoquer la conversion interne d'une requête
- locale pour <code>http://example.com/miroir/foo/bar</code> en une
- requête mandatée pour <code>http://backend.example.com/bar</code>
- (la fonctionnalité fournie par <code>ProxyPass</code>). Il va
- aussi s'occuper des redirections que le serveur
- <code>backend.example.com</code> envoie : lorsque
- <code>http://backend.example.com/bar</code> est redirigé par
- celui-ci vers <code>http://backend.example.com/quux</code>, Apache
- httpd corrige ceci en <code>http://example.com/miroir/foo/quux</code>
- avant de faire suivre la redirection HTTP au client. Notez que le
- nom d'hôte utilisé pour construire l'URL est choisi en respectant la
- définition de la directive <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>.</p>
- <p>Notez que la directive <code class="directive">ProxyPassReverse</code>
- peut aussi être utilisée en conjonction avec la fonctionnalité
- pass-through (<code>RewriteRule ... [P]</code>) du module
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, car elle ne dépend pas d'une directive
- <code class="directive"><a href="#proxypass">ProxyPass</a></code>
- correspondante.</p>
+ <div class="warning"><h3>Avertissement</h3>
+ <p>Gardez à l'esprit qu'une même clé de paramètre peut avoir
+ différentes significations selon qu'elle s'applique à un
+ répartiteur ou à un serveur cible, et ceci est illustré par les deux
+ exemples précédents où il est question d'un timeout.</p>
+ </div>
- <p>Le mot-clé optionnel <var>interpolate</var>,
- utilisé en combinaison avec la directive
- <code class="directive">ProxyPassInterpolateEnv</code>, permet
- l'interpolation des variables d'environnement spécifiées en
- utilisant le format <var>${VARNAME}</var>. Notez que l'interpolation
- n'est pas supportée dans la partie protocole d'une URL.
- </p>
- <p>Lorsque cette directive est utilisée dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>, le premier
- argument est omis et le répertoire local est obtenu à partir de
- l'argument de la directive <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. Il en est de même à l'intérieur
- d'une section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>, mais le résultat ne sera
- probablement pas celui attendu car ProxyPassReverse va interpréter
- l'expression rationnelle littéralement comme un chemin ; si besoin
- est dans ce cas, définissez la directive ProxyPassReverse en dehors
- de la section, ou dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code> séparée.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxysourceaddress" id="proxysourceaddress">Directive</a> <a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'adresse IP locale pour les connexions mandatées
+sortantes</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySourceAddress <var>adresse</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.9</td></tr>
+</table>
+ <p>Cette directive permet de définir une adresse IP locale
+ spécifique à laquelle faire référence lors d'une connexion à un
+ serveur d'arrière-plan.</p>
- <p>Cette directive ne peut pas être placée dans une section
- <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou
- <code class="directive"><a href="../mod/core.html#files"><Files></a></code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a> <a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a></h2>
+<div class="directive-section"><h2><a name="proxystatus" id="proxystatus">Directive</a> <a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la chaîne correspondant au domaine dans les en-têtes
-Set-Cookie en provenance d'un serveur mandaté</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookieDomain <var>domaine-interne</var>
-<var>domaine-public</var> [<var>interpolate</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Affiche l'état du répartiteur de charge du mandataire dans
+mod_status</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyStatus Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
-<p>L'utilisation de cette directive est similaire à celle de la
-directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>,
-mais au lieu de réécrire des en-têtes qui contiennent des URLs, elle
-réécrit la chaîne correspondant au domaine dans les en-têtes
-<code>Set-Cookie</code>.</p>
+ <p>Cette directive permet de spécifier si les données d'état du
+ répartiteur de charge du mandataire doivent être affichées via la
+ page d'état du serveur du module <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p>
+ <div class="note"><h3>Note</h3>
+ <p>L'argument <strong>Full</strong> produit le même effet que
+ l'argument <strong>On</strong>.</p>
+ </div>
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a> <a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a></h2>
+<div class="directive-section"><h2><a name="proxytimeout" id="proxytimeout">Directive</a> <a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a></h2>
<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la chaîne correspondant au chemin dans les en-têtes
-Set-Cookie en provenance d'un serveur mandaté</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookiePath <var>chemin-interne</var>
-<var>chemin-public</var> [<var>interpolate</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Délai d'attente réseau pour les requêtes
+mandatées</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyTimeout <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Valeur de la directive <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
-<p>
-Cette directive s'avère utile en conjonction avec la directive
-<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code> dans les
-situations où les chemins d'URL d'arrière-plan correspondent à des
-chemins publics sur le mandataire inverse. Cette directive permet de
-réécrire la chaîne <code>path</code> dans les en-têtes
-<code>Set-Cookie</code>. Si le début du chemin du cookie correspond à
-<var>chemin-interne</var>, le chemin du cookie sera remplacé par
-<var>chemin-public</var>.
-</p><p>
-Dans l'exemple fourni avec la directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, la directive :
-</p>
- <pre class="prettyprint lang-config">ProxyPassReverseCookiePath / /mirror/foo/</pre>
+ <p>Cette directive permet à l'utilisateur de spécifier un délai pour
+ les requêtes mandatées. Ceci s'avère utile dans le cas d'un serveur
+ d'applications lent et bogué qui a tendance à se bloquer, et si vous
+ préférez simplement renvoyer une erreur timeout et abandonner la
+ connexion en douceur plutôt que d'attendre jusqu'à ce que le serveur
+ veuille bien répondre.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="proxyvia" id="proxyvia">Directive</a> <a name="ProxyVia" id="ProxyVia">ProxyVia</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information fournie dans l'en-tête de réponse HTTP
+<code>Via</code> pour les requêtes mandatées</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyVia Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+</table>
+ <p>Cette directive permet de contrôler l'utilisation de l'en-tête
+ HTTP <code>Via:</code> par le mandataire. Le but recherché est de
+ contrôler le flux des requêtes mandatées tout au long d'une chaîne
+ de serveurs mandataires. Voir <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1),
+ section 14.45 pour une description des lignes d'en-tête
+ <code>Via:</code>.</p>
+
+ <ul>
+ <li>Si elle est définie à <code>Off</code>, valeur par défaut, cette
+ directive n'effectue aucun traitement particulier. Si une requête ou
+ une réponse contient un en-tête <code>Via:</code>, il est transmis
+ sans modification.</li>
+
+ <li>Si elle est définie à <code>On</code>, chaque requête ou réponse
+ se verra ajouter une ligne d'en-tête <code>Via:</code> pour le
+ serveur courant.</li>
+
+ <li>Si elle est définie à <code>Full</code>, chaque ligne d'en-tête
+ <code>Via:</code> se verra ajouter la version du serveur Apache
+ httpd sous la forme d'un champ de commentaire <code>Via:</code>.</li>
+
+ <li>Si elle est définie à <code>Block</code>, chaque requête
+ mandatée verra ses lignes d'en-tête <code>Via:</code> supprimées.
+ Aucun nouvel en-tête <code>Via:</code> ne sera généré.</li>
+ </ul>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="forwardreverse" id="forwardreverse">Mandataires directs et
+ mandataires/passerelles inverses</a></h2>
+ <p>Le serveur HTTP Apache peut être configuré dans les deux modes mandataire
+ <dfn>direct</dfn> et mandataire <dfn>inverse</dfn> (aussi nommé
+ mode <dfn>passerelle</dfn>).</p>
+
+ <p>Un <dfn>mandataire direct</dfn> standard est un serveur
+ intermédiaire qui s'intercale entre le client et le <em>serveur
+ demandé</em>. Pour obtenir un contenu hébergé par
+ le serveur demandé, le client envoie une requête au
+ mandataire en nommant le serveur demandé comme
+ cible, puis le mandataire extrait le contenu depuis le
+ serveur demandé et le renvoie enfin au client. Le client doit être
+ configuré de manière appropriée pour pouvoir utiliser le mandataire
+ direct afin d'accéder à d'autres sites.</p>
+
+ <p>L'accès à Internet depuis des clients situés derrière un
+ pare-feu est une utilisation typique du mandataire direct. Le
+ mandataire direct peut aussi utiliser la mise en cache (fournie
+ par <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) pour réduire la charge du
+ réseau.</p>
+
+ <p>La fonctionnalité de mandataire direct est activée via la
+ directive <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code>.
+ Comme les mandataires directs permettent aux clients d'accéder à
+ des sites quelconques via votre serveur et de dissimuler leur
+ véritable origine, il est indispensable de <a href="#access">sécuriser votre serveur</a> de façon à ce que seuls
+ les clients autorisés puissent accéder à votre serveur avant
+ d'activer la fonctionnalité de mandataire direct.</p>
+
+ <p>Un <dfn>mandataire inverse</dfn> (ou <dfn>passerelle</dfn>),
+ quant à lui, apparaît au client comme un serveur web standard.
+ Aucune configuration particulière du client n'est nécessaire. Le
+ client adresse ses demandes de contenus ordinaires dans l'espace
+ de nommage du mandataire inverse. Ce dernier décide alors où
+ envoyer ces requêtes, et renvoie le contenu au client comme s'il
+ l'hébergeait lui-même.</p>
+
+ <p>L'accès d'utilisateurs depuis Internet vers un serveur situé
+ derrière un pare-feu est une utilisation typique du mandataire
+ inverse. On peut aussi utiliser les mandataires inverses pour
+ mettre en oeuvre une répartition de charge entre plusieurs
+ serveurs en arrière-plan, ou fournir un cache pour un serveur
+ d'arrière-plan plus lent. Les mandataires inverses peuvent aussi
+ tout simplement servir à rassembler plusieurs serveurs dans le
+ même espace de nommage d'URLs.</p>
+
+ <p>La fonctionnalité de mandataire inverse est activée via la
+ directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou
+ le drapeau <code>[P]</code> de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>. Il n'est
+ <strong>pas</strong> nécessaire de définir <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> pour configurer
+ un mandataire inverse.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Exemples simples</a></h2>
+
+ <p>Les exemples ci-dessous illustrent de manière très basique la
+ mise en oeuvre de la fonctionnalité de mandataire et ne sont là que
+ pour vous aider à démarrer. Reportez-vous à la documentation de
+ chaque directive.</p>
+
+ <p>Si en outre, vous désirez activer la mise en cache, consultez la
+ documentation de <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
+
+ <div class="example"><h3>Mandataire inverse</h3><pre class="prettyprint lang-config">ProxyPass /foo http://foo.example.com/bar
+ProxyPassReverse /foo http://foo.example.com/bar</pre>
+</div>
+
+ <div class="example"><h3>Mandataire direct</h3><pre class="prettyprint lang-config">ProxyRequests On
+ProxyVia On
+
+<Proxy *>
+ Require host internal.example.com
+</Proxy></pre>
+</div>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="handler" id="handler">Accès via un gestionnaire</a></h2>
-<p>
-va réécrire un cookie possédant un chemin d'arrière-plan <code>/</code>
-(ou <code>/example</code> ou en fait tout chemin)
-en <code>/mirror/foo/</code>..
-</p>
+ <p>Vous pouvez aussi forcer le traitement d'une requête en tant que
+ requête de mandataire inverse en créant un gestionnaire de transfert
+ approprié. Dans l'exemple suivant, toutes les requêtes pour
+ des scripts PHP seront transmises au serveur FastCGI
+ spécifié via un mandat inverse :
+ </p>
+ <div class="example"><h3>Scripts PHP et mandataire inverse</h3><pre class="prettyprint lang-config"><FilesMatch \.php$>
+ SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/"
+</FilesMatch></pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxypreservehost" id="proxypreservehost">Directive</a> <a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise l'en-tête de requête entrante Host pour la requête
-du mandataire</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPreserveHost Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Utilisable
-dans un contexte de répertoire depuis la version 2.3.3.</td></tr>
-</table>
- <p>Lorsqu'elle est activée, cette directive va transmettre l'en-tête
- Host: de la requête entrante vers le serveur mandaté, au lieu du nom
- d'hôte spécifié par la directive <code class="directive">ProxyPass</code>.</p>
- <p>Cette directive est habituellement définie à <code>Off</code>.
- Elle est principalement utile dans les configurations particulières
- comme l'hébergement virtuel mandaté en masse à base de nom, où
- l'en-tête Host d'origine doit être évalué par le serveur
- d'arrière-plan.</p>
+ <p>Cette fonctionnalité est disponible à partir de la version
+ 2.4.10 du serveur HTTP Apache.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a> <a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille du tampon réseau pour les connexions mandatées HTTP
-et FTP</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyReceiveBufferSize <var>octets</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>La directive <code class="directive">ProxyReceiveBufferSize</code> permet
- de spécifier une taille de tampon réseau explicite (TCP/IP) pour les
- connexions mandatées HTTP et FTP, afin d'améliorer le débit de
- données. Elle doit être supérieure à <code>512</code> ou définie à
- <code>0</code> pour indiquer que la taille de tampon par défaut du
- système doit être utilisée.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="workers" id="workers">Workers</a></h2>
+ <p>Le mandataire gère la configuration et les paramètres de
+ communication des serveurs originaux au sein d'objets nommés
+ <dfn>workers</dfn>. Deux types de worker sont fournis : le worker
+ par défaut du mandataire direct et le worker par défaut du
+ mandataire inverse. Il est aussi possible de définir explicitement
+ des workers supplémentaires.</p>
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyReceiveBufferSize 2048</pre>
+ <p>Les deux workers par défaut possèdent une configuration figée
+ et seront utilisés si aucun autre worker ne correspond à la
+ requête. Ils n'utilisent ni les jeux de connexions (connection
+ pooling), ni les
+ connexions HTTP persistantes (Keep-Alive). En effet, les
+ connexions TCP vers le serveur original sont fermées et ouvertes
+ pour chaque requête.</p>
+
+ <p>Les workers définis explicitement sont identifiés par leur URL.
+ Ils sont en général définis via les directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> lorsqu'on les
+ utilise dans le cadre d'un mandataire inverse :</p>
+
+ <div class="example"><pre class="prettyprint lang-config">ProxyPass /example http://backend.example.com connectiontimeout=5 timeout=30</pre>
</div>
+
+
+ <p>Cette directive va créer un worker associé à l'URL du serveur
+ original <code>http://backend.example.com</code>, et utilisant les
+ valeurs de timeout données. Lorsqu'ils sont utilisés dans le cadre
+ d'un mandataire direct, les workers sont en général définis via la
+ directive <code class="directive"><a href="#proxyset">ProxySet</a></code>,</p>
+ <div class="example"><pre class="prettyprint lang-config">ProxySet http://backend.example.com connectiontimeout=5 timeout=30</pre>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxyremote" id="proxyremote">Directive</a> <a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Mandataire distant à utiliser pour traiter certaines
-requêtes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemote <var>comparaison</var> <var>serveur-distant</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Cette directive permet de définir des mandataires distants pour
- ce mandataire. <var>comparaison</var> est soit le nom d'un protocole
- que supporte le serveur distant, soit une URL partielle pour
- laquelle le serveur distant devra être utilisé, soit <code>*</code>
- pour indiquer que le serveur distant doit être utilisé pour toutes
- les requêtes. <var>serveur-distant</var> est une URL partielle
- correspondant au serveur distant. Syntaxe : </p>
+
- <div class="example"><p><code>
- <dfn>serveur-distant</dfn> =
- <var>protocole</var>://<var>nom-serveur</var>[:<var>port</var>]
- </code></p></div>
+ <p>ou encore via les directives <code class="directive"><a href="#proxy">Proxy</a></code> et <code class="directive"><a href="#proxyset">ProxySet</a></code> :</p>
- <p><var>protocole</var> est effectivement le protocole à utiliser
- pour communiquer avec le serveur distant ; ce module ne supporte que
- <code>http</code> et <code>https</code>. Lorsqu'on utilise
- <code>https</code>, les requêtes sont redirigées par le mandataire
- distant en utilisant la méthode HTTP CONNECT.</p>
+ <pre class="prettyprint lang-config"><Proxy http://backend.example.com>
+ ProxySet connectiontimeout=5 timeout=30
+</Proxy></pre>
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote http://goodguys.example.com/ http://mirrorguys.example.com:8000
-ProxyRemote * http://cleverproxy.localdomain
-ProxyRemote ftp http://ftpproxy.mydomain:8080</pre>
-</div>
- <p>Dans la dernière ligne de l'exemple, le mandataire va faire
- suivre les requêtes FTP, encapsulées dans une autre requête mandatée
- HTTP, vers un autre mandataire capable de les traiter.</p>
+ <p>L'utilisation de workers définis explicitement dans le mode
+ mandataire direct n'est pas très courante, car les mandataires
+ directs communiquent en général avec de nombreux serveurs
+ originaux. La création explicite de workers pour certains serveurs
+ originaux peut cependant s'avérer utile si ces serveurs sont
+ très souvent sollicités. A leur niveau, les workers explicitement
+ définis ne possèdent aucune notion de mandataire direct ou
+ inverse. Ils encapsulent un concept de communication commun avec
+ les serveurs originaux. Un worker créé via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> pour être utilisé dans le
+ cadre d'un mandataire inverse sera aussi utilisé dans le cadre
+ d'un mandataire directe chaque fois que l'URL vers le serveur
+ original correspondra à l'URL du worker, et vice versa.</p>
- <p>Cette directive supporte aussi les configurations de mandataire
- inverse - un serveur web d'arrière-plan peut être intégré dans
- l'espace d'URL d'un serveur virtuel, même si ce serveur est caché
- par un autre mandataire direct.</p>
+ <p>L'URL qui identifie un worker correspond à l'URL de son serveur
+ original, y compris un éventuel chemin donné :</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxyremotematch" id="proxyremotematch">Directive</a> <a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le mandataire distant à utiliser pour traiter les requêtes
-correspondant à une expression rationnelle</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>serveur-distant</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>La directive <code class="directive">ProxyRemoteMatch</code> est
- identique à la directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code>, à l'exception du
- premier argument qui est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression
- rationnelle</a> à mettre en correspondance avec l'URL de la
- requête.</p>
+ <pre class="prettyprint lang-config">ProxyPass /examples http://backend.example.com/examples
+ProxyPass /docs http://backend.example.com/docs</pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxyrequests" id="proxyrequests">Directive</a> <a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active la fonctionnalité (standard) de mandataire
-direct</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRequests On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyRequests Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Cette directive permet d'activer/désactiver la fonctionnalité de
- serveur mandataire direct d'Apache httpd. Définir ProxyRequests à
- <code>Off</code> n'interdit pas l'utilisation de la directive
- <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
- <p>Pour une configuration typique de mandataire inverse ou
- passerelle, cette directive doit être définie à
- <code>Off</code>.</p>
+ <p>Dans cet exemple, deux workers différents sont définis, chacun
+ d'eux utilisant des configurations et jeux de connexions
+ séparés.</p>
- <p>Afin d'activer la fonctionnalité de mandataire pour des sites
- HTTP et/ou FTP, les modules <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> et/ou
- <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> doivent également être chargés dans le
- serveur.</p>
+ <div class="warning"><h3>Partage de workers</h3>
+ <p>Le partage de workers intervient lorsque les URLs des workers
+ s'entrecoupent, ce qui arrive lorsque l'URL d'un worker
+ correspond au début de l'URL d'un autre worker défini plus loin
+ dans le fichier de configuration. Dans l'exemple suivant,</p>
- <p>Pour activer la fonctionnalité de mandataire sur les sites chiffrés en HTTPS, le module
- <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> doit également être chargé dans le serveur.</p>
+ <pre class="prettyprint lang-config">ProxyPass /apps http://backend.example.com/ timeout=60
+ProxyPass /examples http://backend.example.com/examples timeout=10</pre>
- <div class="warning"><h3>Avertissement</h3>
- <p>N'activez pas la fonctionnalité de mandataire avec la directive
- <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> avant
- d'avoir <a href="#access">sécurisé votre serveur</a>. Les serveurs
- mandataires ouverts sont dangereux non seulement pour votre
- réseau, mais aussi pour l'Internet au sens large.</p>
- </div>
-<h3>Voir aussi</h3>
-<ul>
-<li><a href="#forwardreverse">Mandataires/Passerelles directs et
-inverses</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxyset" id="proxyset">Directive</a> <a name="ProxySet" id="ProxySet">ProxySet</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit différents paramètres relatifs à la répartition de
-charge des mandataires et aux membres des groupes de répartition de
-charge</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySet <var>url</var> <var>clé=valeur [clé=valeur ...]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Cette directive propose une méthode alternative pour définir tout
- paramètre relatif aux répartiteurs de charge et serveurs cibles de
- mandataires normalement définis via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Si elle se trouve dans un
- conteneur <code><Proxy <var>url de répartiteur|url de
- serveur cible</var>></code>, l'argument <var>url</var> n'est pas
- nécessaire. Comme effet de bord, le répartiteur ou serveur cible respectif
- est créé. Ceci peut s'avérer utile pour la mise en oeuvre d'un
- mandataire inverse via une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> au lieu de <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
+ <p>le second worker n'est pas vraiment créé. C'est le premier
+ worker qui est en fait utilisé. L'avantage de ceci réside dans
+ le fait qu'il n'existe qu'un seul jeu de connexions, ces
+ dernières étant donc réutilisées plus souvent. Notez que tous
+ les attributs de configuration définis explicitement pour le
+ deuxième worker seront ignorés, ce qui sera journalisé en tant
+ qu'avertissement. Ainsi, dans l'exemple ci-dessus, la valeur de
+ timeout retenue pour l'URL <code>/exemples</code> sera
+ <code>60</code>, et non <code>10</code> !</p>
+
+ <p>Si vous voulez empêcher le partage de workers, classez vos
+ définitions de workers selon la longueur des URLs, de la plus
+ longue à la plus courte. Si au contraire vous voulez favoriser
+ ce partage, utilisez l'ordre de classement inverse. Voir aussi
+ l'avertissement à propos de l'ordre de classement des directives
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
+
+ </div>
+
+ <p>Les workers définis explicitement sont de deux sortes :
+ <dfn>workers directs</dfn> et <dfn>workers de répartition (de
+ charge)</dfn>. Ils supportent de nombreux attributs de
+ configuration importants décrits dans la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Ces mêmes attributs
+ peuvent aussi être définis via la directive <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p>
+
+ <p>Le jeu d'options disponibles pour un worker direct dépend du
+ protocole spécifié dans l'URL du serveur original. Les protocoles
+ disponibles comprennent <code>ajp</code>, <code>fcgi</code>,
+ <code>ftp</code>, <code>http</code> et <code>scgi</code>.</p>
- <div class="example"><pre class="prettyprint lang-config"><Proxy balancer://hotcluster>
- BalancerMember http://www2.example.com:8080 loadfactor=1
- BalancerMember http://www3.example.com:8080 loadfactor=2
- ProxySet lbmethod=bytraffic
-</Proxy></pre>
-</div>
+ <p>Les workers de répartition sont des workers virtuels qui
+ utilisent les workers directs, connus comme faisant partie de leurs
+ membres, pour le traitement effectif des requêtes. Chaque
+ répartiteur peut comporter plusieurs membres. Lorsqu'il traite une
+ requête, il choisit un de ses membres en fonction de l'algorithme
+ de répartition de charge défini.</p>
- <pre class="prettyprint lang-config"><Proxy http://backend>
- ProxySet keepalive=On
+ <p>Un worker de répartition est créé si son URL de worker comporte
+ <code>balancer</code> comme indicateur de protocole. L'URL du
+ répartiteur permet d'identifier de manière unique le worker de
+ répartition. La directive <code class="directive"><a href="#balancermember">BalancerMember</a></code> permet d'ajouter des
+ membres au répartiteur.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="access" id="access">Contrôler l'accès à votre
+ mandataire</a></h2>
+ <p>Vous pouvez restreindre l'accès à votre mandataire via le bloc
+ de contrôle <code class="directive"><a href="#proxy"><Proxy></a></code> comme dans
+ l'exemple suivant :</p>
+
+ <pre class="prettyprint lang-config"><Proxy *>
+ Require ip 192.168.0
</Proxy></pre>
- <pre class="prettyprint lang-config">ProxySet balancer://foo lbmethod=bytraffic timeout=15</pre>
+ <p>Pour plus de détails sur les directives de contrôle d'accès,
+ voir la documentation du module
+ <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p>
+ <p>Restreindre l'accès de manière stricte est essentiel si vous
+ mettez en oeuvre un mandataire direct (en définissant la directive
+ <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> à "on").
+ Dans le cas contraire, votre serveur pourrait être utilisé par
+ n'importe quel client pour accéder à des serveurs quelconques,
+ tout en masquant sa véritable identité. Ceci représente un danger
+ non seulement pour votre réseau, mais aussi pour l'Internet au
+ sens large. Dans le cas de la mise en oeuvre d'un mandataire
+ inverse (en utilisant la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> avec <code>ProxyRequests Off</code>), le contrôle
+ d'accès est moins critique car les clients ne peuvent contacter
+ que les serveurs que vous avez spécifiés.</p>
- <pre class="prettyprint lang-config">ProxySet ajp://backend:7001 timeout=15</pre>
+ <p><strong>Voir aussi</strong> la variable d'environnement <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a>.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="startup" id="startup">Ralentissement au démarrage</a></h2>
+ <p>Si vous utilisez la directive <code class="directive"><a href="#proxyblock">ProxyBlock</a></code>, les noms d'hôtes sont résolus en adresses
+ IP puis ces dernières mises en cache au cours du démarrage
+ à des fins de tests de comparaisons ultérieurs. Ce processus peut
+ durer plusieurs secondes (ou d'avantage) en fonction de la vitesse
+ à laquelle s'effectue la résolution des noms d'hôtes.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="intranet" id="intranet">Mandataire en Intranet</a></h2>
+ <p>Un serveur mandataire Apache httpd situé à l'intérieur d'un Intranet
+ doit faire suivre les requêtes destinées à un serveur externe à
+ travers le pare-feu de l'entreprise (pour ce faire, définissez la
+ directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> de
+ façon à ce qu'elle fasse suivre le <var>protocole</var> concerné
+ vers le mandataire du pare-feu). Cependant, lorsqu'il doit accéder
+ à des ressources situées dans l'Intranet, il peut se passer du
+ pare-feu pour accéder aux serveurs. A cet effet, la directive
+ <code class="directive"><a href="#noproxy">NoProxy</a></code> permet de
+ spécifier quels hôtes appartiennent à l'Intranet et peuvent donc
+ être accédés directement.</p>
- <div class="warning"><h3>Avertissement</h3>
- <p>Gardez à l'esprit qu'une même clé de paramètre peut avoir
- différentes significations selon qu'elle s'applique à un
- répartiteur ou à un serveur cible, et ceci est illustré par les deux
- exemples précédents où il est question d'un timeout.</p>
- </div>
+ <p>Les utilisateurs d'un Intranet ont tendance à oublier le nom du
+ domaine local dans leurs requêtes WWW, et demandent par exemple
+ "http://un-serveur/" au lieu de
+ <code>http://un-serveur.example.com/</code>. Certains serveurs
+ mandataires commerciaux acceptent ce genre de requête et les
+ traitent simplement en utilisant un nom de domaine local
+ implicite. Lorsque la directive <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> est utilisée et si le
+ serveur est <a href="#proxyrequests">configuré comme
+ mandataire</a>, Apache httpd peut renvoyer une réponse de redirection et
+ ainsi fournir au client l'adresse de serveur correcte,
+ entièrement qualifiée. C'est la méthode à privilégier car le
+ fichier des marque-pages de l'utilisateur contiendra alors des
+ noms de serveurs entièrement qualifiés.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="envsettings" id="envsettings">Ajustements relatifs au
+ protocole</a></h2>
+ <p>Pour les cas où <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> envoie des requêtes
+ vers un serveur qui n'implémente pas correctement les connexions
+ persistantes ou le protocole HTTP/1.1, il existe deux variables
+ d'environnement qui permettent de forcer les requêtes à utiliser
+ le protocole HTTP/1.0 avec connexions non persistantes. Elles
+ peuvent être définies via la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>.</p>
+ <p>Il s'agit des variables <code>force-proxy-request-1.0</code> et
+ <code>proxy-nokeepalive</code>.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxysourceaddress" id="proxysourceaddress">Directive</a> <a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'adresse IP locale pour les connexions mandatées
-sortantes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySourceAddress <var>adresse</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.9</td></tr>
-</table>
- <p>Cette directive permet de définir une adresse IP locale
- spécifique à laquelle faire référence lors d'une connexion à un
- serveur d'arrière-plan.</p>
+ <pre class="prettyprint lang-config"><Location /buggyappserver/>
+ ProxyPass http://buggyappserver:7001/foo/
+ SetEnv force-proxy-request-1.0 1
+ SetEnv proxy-nokeepalive 1
+</Location></pre>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxystatus" id="proxystatus">Directive</a> <a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Affiche l'état du répartiteur de charge du mandataire dans
-mod_status</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyStatus Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Cette directive permet de spécifier si les données d'état du
- répartiteur de charge du mandataire doivent être affichées via la
- page d'état du serveur du module <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p>
- <div class="note"><h3>Note</h3>
- <p>L'argument <strong>Full</strong> produit le même effet que
- l'argument <strong>On</strong>.</p>
- </div>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="request-bodies" id="request-bodies">Corps de requêtes</a></h2>
+ <p>Certaines méthodes de requêtes comme POST comportent un corps de
+ requête. Le protocole HTTP stipule que les requêtes qui comportent
+ un corps doivent soit utiliser un codage de transmission
+ fractionnée (chunked transfer encoding), soit envoyer un en-tête de requête
+ <code>Content-Length</code>. Lorsqu'il fait suivre ce genre de
+ requête vers le serveur demandé, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
+ s'efforce toujours d'envoyer l'en-tête <code>Content-Length</code>.
+ Par contre, si la taille du corps est importante, et si la requête
+ originale utilise un codage à fractionnement, ce dernier peut aussi
+ être utilisé dans la requête montante. Ce comportement peut être
+ contrôlé à l'aide de <a href="../env.html">variables
+ d'environnement</a>. Ainsi, si elle est définie, la variable
+ <code>proxy-sendcl</code> assure une compatibilité maximale avec les
+ serveurs demandés en imposant l'envoi de l'en-tête
+ <code>Content-Length</code>, alors que
+ <code>proxy-sendchunked</code> diminue la consommation de ressources
+ en imposant l'utilisation d'un codage à fractionnement.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxytimeout" id="proxytimeout">Directive</a> <a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Délai d'attente réseau pour les requêtes
-mandatées</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyTimeout <var>secondes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Valeur de la directive <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Cette directive permet à l'utilisateur de spécifier un délai pour
- les requêtes mandatées. Ceci s'avère utile dans le cas d'un serveur
- d'applications lent et bogué qui a tendance à se bloquer, et si vous
- préférez simplement renvoyer une erreur timeout et abandonner la
- connexion en douceur plutôt que d'attendre jusqu'à ce que le serveur
- veuille bien répondre.</p>
+ <p>Dans certaines circonstances, le serveur doit mettre en file
+ d'attente sur disque les corps de requêtes afin de satisfaire le
+ traitement demandé des corps de requêtes. Par exemple, cette mise en
+ file d'attente se produira si le corps original a été envoyé selon un
+ codage morcelé (et possède une taille importante), alors que
+ l'administrateur a demandé que les requêtes du serveur
+ d'arrière-plan soient envoyées avec l'en-tête Content-Length ou en
+ HTTP/1.0. Cette mise en file d'attente se produira aussi si le corps
+ de la requête contient déjà un en-tête Content-Length, alors que le
+ serveur est configuré pour filtrer les corps des requêtes entrantes.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="proxyvia" id="proxyvia">Directive</a> <a name="ProxyVia" id="ProxyVia">ProxyVia</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information fournie dans l'en-tête de réponse HTTP
-<code>Via</code> pour les requêtes mandatées</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyVia Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Cette directive permet de contrôler l'utilisation de l'en-tête
- HTTP <code>Via:</code> par le mandataire. Le but recherché est de
- contrôler le flux des requêtes mandatées tout au long d'une chaîne
- de serveurs mandataires. Voir <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1),
- section 14.45 pour une description des lignes d'en-tête
- <code>Via:</code>.</p>
+ <p>La directive <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code> ne s'applique qu'aux
+ corps de requêtes que le serveur met en file d'attente sur disque.</p>
- <ul>
- <li>Si elle est définie à <code>Off</code>, valeur par défaut, cette
- directive n'effectue aucun traitement particulier. Si une requête ou
- une réponse contient un en-tête <code>Via:</code>, il est transmis
- sans modification.</li>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="x-headers" id="x-headers">En-têtes de requête du mandataire
+ inverse</a></h2>
- <li>Si elle est définie à <code>On</code>, chaque requête ou réponse
- se verra ajouter une ligne d'en-tête <code>Via:</code> pour le
- serveur courant.</li>
+ <p>Lorsqu'il est configuré en mode mandataire inverse (en utilisant
+ par exemple la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>),
+ <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> ajoute plusieurs en-têtes de requête
+ afin de transmettre des informations au serveur demandé. Ces
+ en-têtes sont les suivants :</p>
- <li>Si elle est définie à <code>Full</code>, chaque ligne d'en-tête
- <code>Via:</code> se verra ajouter la version du serveur Apache
- httpd sous la forme d'un champ de commentaire <code>Via:</code>.</li>
+ <dl>
+ <dt><code>X-Forwarded-For</code></dt>
+ <dd>L'adresse IP du client.</dd>
+ <dt><code>X-Forwarded-Host</code></dt>
+ <dd>L'hôte d'origine demandé par le client dans l'en-tête de
+ requête HTTP <code>Host</code>.</dd>
+ <dt><code>X-Forwarded-Server</code></dt>
+ <dd>Le nom d'hôte du serveur mandataire.</dd>
+ </dl>
- <li>Si elle est définie à <code>Block</code>, chaque requête
- mandatée verra ses lignes d'en-tête <code>Via:</code> supprimées.
- Aucun nouvel en-tête <code>Via:</code> ne sera généré.</li>
- </ul>
+ <p>Ces en-têtes doivent être utilisés avec précautions sur le
+ serveur demandé, car ils contiendront plus d'une valeur (séparées
+ par des virgules) si la requête originale contenait déjà un de ces
+ en-têtes. Par exemple, vous pouvez utiliser
+ <code>%{X-Forwarded-For}i</code> dans la chaîne de format du journal
+ du serveur demandé pour enregistrer les adresses IP des clients
+ originaux, mais il est possible que vous obteniez plusieurs adresses
+ si la requête passe à travers plusieurs mandataires.</p>
-</div>
+ <p>Voir aussi les directives <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code> et <code class="directive"><a href="#proxyvia">ProxyVia</a></code> directives, qui permettent
+ de contrôler d'autres en-têtes de requête.</p>
+
+ <p>Note : Si vous devez ajouter des en-têtes particuliers à la
+ requête mandatée, utilisez la directive <code class="directive"><a href="../mod/mod_headers.html#requestheader">RequestHeader</a></code>.</p>
+
+ </div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="forwardreverse" id="forwardreverse">フォワードプロキシとリバースプロキシ</a></h2>
- <p>Apache は<dfn>フォワード</dfn>プロキシとしても、
- <dfn>リバース</dfn>プロキシとしても設定することができます。</p>
-
- <p>通常の<dfn>フォワードプロキシ</dfn>はクライアントと
- <em>オリジンサーバ</em> <span class="transnote">(<em>訳注:</em> コンテンツ生成元のサーバ)</span>
- の間に位置する中間サーバです。
- オリジンサーバからコンテンツを取得する過程では、クライアントは
- 行き先としてオリジンサーバを指定しつつプロキシにリクエストを送り、
- プロキシはオリジンサーバからコンテンツ取得のリクエストを送り、
- コンテンツが取得できればそれをクライアントに返します。
- クライアントが他のサイトにフォワードプロクシ経由でアクセスするには、
- 特別にそれ用の設定をしなければなりません。</p>
-
- <p>フォワードプロキシの一般的な使用方法は、ファイアウォールによって
- 制限されている内部のクライアントにインターネットへのアクセスを
- 提供するものです。フォワードプロキシはネットワークの使用量を
- 減らすために (<code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> で提供されている)
- キャッシュ機能を用いることもできます。</p>
-
- <p>フォワードプロキシは <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> ディレクティブで
- 有効になります。フォワードプロキシでは、クライアントは本当の身元を
- 隠して任意のサイトにアクセスできるようになるため、フォワードプロキシを
- 有効にする前に、承認されたクライアントのみがプロキシにアクセスできるように
- <a href="#access">サーバを安全にする</a>ことが重要です。</p>
-
- <p>一方<dfn>リバースプロキシ</dfn>は、クライアントには普通の
- ウェブサーバのように見えます。クライアント側に特別な設定は必要ありません。
- クライアントはリバースプロキシの名前空間に対して通常のコンテンツへの
- リクエストを行ないます。プロキシはリクエストをどこに送れば良いかを判定し、
- あたかも自分自身がオリジンサーバであったかのようにクライアントに
- コンテンツを返します。</p>
-
- <p>リバースプロキシのよくある利用方法は、インターネットユーザに
- ファイアウォールの中にあるサーバにアクセスを与えるというものです。
- リバースプロキシは複数のバックエンドサーバへ負荷分散をするために
- 使ったり、遅いバックエンドエンドサーバのためにキャッシュ機能を提供したり
- するために使えます。また、リバースプロキシは複数のサーバを
- 同じ URL 空間にまとめるために使うこともできます。</p>
-
- <p>リバースプロキシは <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブや
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ディレクティブの
- <code>[P]</code> フラグを使うことで有効になります。リバースプロキシの
- 設定のために <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> を設定する必要は
- <em>ありません</em>。</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">基本の例</a></h2>
-
- <p>以下の例は手始めの簡単な例です。個々のディレクティブの意味は
- それぞれの説明をお読みください。</p>
-
- <p>またキャッシュ機能を有効にしたい場合は、<code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>
- の説明を読んでください。</p>
-
- <div class="example"><h3>フォワードプロキシ</h3><p><code>
- ProxyRequests On<br />
- ProxyVia On<br />
- <br />
- <Proxy *><br />
- <span class="indent">
- Order deny,allow<br />
- Deny from all<br />
- Allow from internal.example.com<br />
- </span>
- </Proxy>
- </code></p></div>
-
- <div class="example"><h3>リバースプロキシ</h3><p><code>
- ProxyRequests Off<br />
- <br />
- <Proxy *><br />
- <span class="indent">
- Order deny,allow<br />
- Allow from all<br />
- </span>
- </Proxy><br />
- <br />
- ProxyPass /foo http://foo.example.com/bar<br />
- ProxyPassReverse /foo http://foo.example.com/bar
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="access" id="access">プロキシへのアクセス制御</a></h2>
- <p>プロキシのアクセスは以下のように <code class="directive"><a href="#proxy"><Proxy></a></code> コンテナの中に
- ディレクティブを書くことで制御できます:</p>
-
- <div class="example"><p><code>
- <Proxy *><br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from 192.168.0<br />
- </span>
- </Proxy>
- </code></p></div>
-
- <p>アクセス制御のためのディレクティブのより詳しい情報は
- <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> をお読みください。</p>
-
- <p>(<code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> ディレクティブを
- 使って) フォワードプロキシを設定している場合は、厳しくアクセス
- 制限を行なうことが非常に大切です。そうしないと、任意のクライアントが
- 身元を明かすことなく任意のホストにアクセスするためにサーバを使うことが
- できてしまいます。これはあなた自身のネットワークにとっても、インターネット
- 全体にとっても危険なことです。(<code>ProxyRequests Off</code> にして
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブを使って)
- リバースプロキシを使っている場合には、クライアントはあなたが明示的に
- 設定したホストにしかアクセスできないため、フォワードプロキシのとき
- ほどアクセス制御に力を注がなくても大丈夫です。</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">遅い起動</a></h2>
- <p><code class="directive"><a href="#proxyblock">ProxyBlock</a></code> ディレクティブを使っている場合、
- 後のテストのために起動時にホストの
- IP アドレスが調べられてキャッシュされます。ホスト名のルックアップの
- 速さによっては、数秒 (かそれ以上) かかるかもしれません。</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intranet" id="intranet">イントラネットプロキシ</a></h2>
- <p>イントラネットにある Apache プロキシサーバは外部へのリクエストを
- 会社のファイアウォールを通して送らなければなりません。(このためには
- 個々の <var>scheme</var> についてそれぞれ、ファイアウォールの
- プロキシにフォワードされるように
- <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> ディレクティブを
- 設定してください)。しかしイントラネット内のリソースにアクセスするときは、
- ファイアウォールを通さないでもアクセスできます。
- どのホストがイントラネットに属し、直接アクセスすべきかを指定するには、
- <code class="directive"><a href="#noproxy">NoProxy</a></code> ディレクティブが
- 役に立ちます。</p>
-
- <p>イントラネット内のユーザは WWW のリクエストでローカルドメインを
- 省略することがよくあります。<code>http://somehost.example.com/</code>
- というリクエストの代わりに "http://somehost/" をリクエストしたりします。
- このようなリクエストを受け付け、サーバに設定されているローカルドメインが
- 暗黙のうちに使われていると解釈して、単純にリクエストを処理するものも
- 商用プロキシサーバの中にはあります。
- サーバが <a href="#proxyrequests">プロキシのサービス用に設定されていて</a>
- <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> ディレクティブが
- 使用された場合には、Apache はクライアントにリダイレクト応答を送って、
- 正しい、完全な (<span class="transnote">(<em>訳注:</em> fully qualified)</span>)
- サーバのアドレスに送ることができます。このように
- リダイレクトすると、ユーザのブックマークが正しい完全なホスト名を含む
- ことにもなるため、より好ましい方法と言えるでしょう。</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="envsettings" id="envsettings">プロトコルの調整</a></h2>
- <p>Keepalive や HTTP/1.1 を適切に実装していないアプリケーションサーバに対して
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> がリクエストを送信する場合、
- HTTP/1.0 を使って keepalive を無しにしてリクエストを送るようにする
- 環境変数が二つあります。これらは <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> ディレクティブで設定します。</p>
-
- <p><code>force-proxy-request-1.0</code> と <code>proxy-nokeepalive</code>
- がその環境変数です。</p>
-
- <div class="example"><p><code>
- <Location /buggyappserver/><br />
- <span class="indent">
- ProxyPass http://buggyappserver:7001/foo/<br />
- SetEnv force-proxy-request-1.0 1<br />
- SetEnv proxy-nokeepalive 1<br />
- </span>
- </Location>
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="request-bodies" id="request-bodies">リクエストボディ</a></h2>
-
- <p>POST メソッドなどのリクエストには、リクエストボディがあります。
- HTTP プロトコル仕様によると、ボディのあるリクエストは chunked
- 転送を使うか、<code>Content-Length</code>
- ヘッダを送信しなければなりません。
- このようなリクエストをオリジンサーバに送信する場合、
- <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> は常に <code>Content-Length</code>
- を送ろうと試みます。しかし。ボディが大きく、オリジナルのリクエストで
- chunked 転送が使われている場合、上流へのリクエストに
- chunked 転送も使われます。
- この挙動は <a href="../env.html">環境変数</a>で制御できます。
- <code>proxy-sendcl</code> を設定すると、可能な限り常に
- <code>Content-Length</code> を付与して、
- 上流サーバに送信するようになります。
- 逆に <code>proxy-sendchunked</code> を設定すると、リソース消費を抑え、
- chnked エンコードを使って送信するようになります。</p>
-
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a> <a name="balancergrowth" id="balancergrowth">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Number of additional Balancers that can be added Post-configuration</td></tr>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="forwardreverse" id="forwardreverse">フォワードプロキシとリバースプロキシ</a></h2>
+ <p>Apache は<dfn>フォワード</dfn>プロキシとしても、
+ <dfn>リバース</dfn>プロキシとしても設定することができます。</p>
+
+ <p>通常の<dfn>フォワードプロキシ</dfn>はクライアントと
+ <em>オリジンサーバ</em> <span class="transnote">(<em>訳注:</em> コンテンツ生成元のサーバ)</span>
+ の間に位置する中間サーバです。
+ オリジンサーバからコンテンツを取得する過程では、クライアントは
+ 行き先としてオリジンサーバを指定しつつプロキシにリクエストを送り、
+ プロキシはオリジンサーバからコンテンツ取得のリクエストを送り、
+ コンテンツが取得できればそれをクライアントに返します。
+ クライアントが他のサイトにフォワードプロクシ経由でアクセスするには、
+ 特別にそれ用の設定をしなければなりません。</p>
+
+ <p>フォワードプロキシの一般的な使用方法は、ファイアウォールによって
+ 制限されている内部のクライアントにインターネットへのアクセスを
+ 提供するものです。フォワードプロキシはネットワークの使用量を
+ 減らすために (<code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> で提供されている)
+ キャッシュ機能を用いることもできます。</p>
+
+ <p>フォワードプロキシは <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> ディレクティブで
+ 有効になります。フォワードプロキシでは、クライアントは本当の身元を
+ 隠して任意のサイトにアクセスできるようになるため、フォワードプロキシを
+ 有効にする前に、承認されたクライアントのみがプロキシにアクセスできるように
+ <a href="#access">サーバを安全にする</a>ことが重要です。</p>
+
+ <p>一方<dfn>リバースプロキシ</dfn>は、クライアントには普通の
+ ウェブサーバのように見えます。クライアント側に特別な設定は必要ありません。
+ クライアントはリバースプロキシの名前空間に対して通常のコンテンツへの
+ リクエストを行ないます。プロキシはリクエストをどこに送れば良いかを判定し、
+ あたかも自分自身がオリジンサーバであったかのようにクライアントに
+ コンテンツを返します。</p>
+
+ <p>リバースプロキシのよくある利用方法は、インターネットユーザに
+ ファイアウォールの中にあるサーバにアクセスを与えるというものです。
+ リバースプロキシは複数のバックエンドサーバへ負荷分散をするために
+ 使ったり、遅いバックエンドエンドサーバのためにキャッシュ機能を提供したり
+ するために使えます。また、リバースプロキシは複数のサーバを
+ 同じ URL 空間にまとめるために使うこともできます。</p>
+
+ <p>リバースプロキシは <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブや
+ <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ディレクティブの
+ <code>[P]</code> フラグを使うことで有効になります。リバースプロキシの
+ 設定のために <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> を設定する必要は
+ <em>ありません</em>。</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">基本の例</a></h2>
+
+ <p>以下の例は手始めの簡単な例です。個々のディレクティブの意味は
+ それぞれの説明をお読みください。</p>
+
+ <p>またキャッシュ機能を有効にしたい場合は、<code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>
+ の説明を読んでください。</p>
+
+ <div class="example"><h3>フォワードプロキシ</h3><p><code>
+ ProxyRequests On<br />
+ ProxyVia On<br />
+ <br />
+ <Proxy *><br />
+ <span class="indent">
+ Order deny,allow<br />
+ Deny from all<br />
+ Allow from internal.example.com<br />
+ </span>
+ </Proxy>
+ </code></p></div>
+
+ <div class="example"><h3>リバースプロキシ</h3><p><code>
+ ProxyRequests Off<br />
+ <br />
+ <Proxy *><br />
+ <span class="indent">
+ Order deny,allow<br />
+ Allow from all<br />
+ </span>
+ </Proxy><br />
+ <br />
+ ProxyPass /foo http://foo.example.com/bar<br />
+ ProxyPassReverse /foo http://foo.example.com/bar
+ </code></p></div>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="access" id="access">プロキシへのアクセス制御</a></h2>
+ <p>プロキシのアクセスは以下のように <code class="directive"><a href="#proxy"><Proxy></a></code> コンテナの中に
+ ディレクティブを書くことで制御できます:</p>
+
+ <div class="example"><p><code>
+ <Proxy *><br />
+ <span class="indent">
+ Order Deny,Allow<br />
+ Deny from all<br />
+ Allow from 192.168.0<br />
+ </span>
+ </Proxy>
+ </code></p></div>
+
+ <p>アクセス制御のためのディレクティブのより詳しい情報は
+ <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> をお読みください。</p>
+
+ <p>(<code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> ディレクティブを
+ 使って) フォワードプロキシを設定している場合は、厳しくアクセス
+ 制限を行なうことが非常に大切です。そうしないと、任意のクライアントが
+ 身元を明かすことなく任意のホストにアクセスするためにサーバを使うことが
+ できてしまいます。これはあなた自身のネットワークにとっても、インターネット
+ 全体にとっても危険なことです。(<code>ProxyRequests Off</code> にして
+ <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブを使って)
+ リバースプロキシを使っている場合には、クライアントはあなたが明示的に
+ 設定したホストにしかアクセスできないため、フォワードプロキシのとき
+ ほどアクセス制御に力を注がなくても大丈夫です。</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="startup" id="startup">遅い起動</a></h2>
+ <p><code class="directive"><a href="#proxyblock">ProxyBlock</a></code> ディレクティブを使っている場合、
+ 後のテストのために起動時にホストの
+ IP アドレスが調べられてキャッシュされます。ホスト名のルックアップの
+ 速さによっては、数秒 (かそれ以上) かかるかもしれません。</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="intranet" id="intranet">イントラネットプロキシ</a></h2>
+ <p>イントラネットにある Apache プロキシサーバは外部へのリクエストを
+ 会社のファイアウォールを通して送らなければなりません。(このためには
+ 個々の <var>scheme</var> についてそれぞれ、ファイアウォールの
+ プロキシにフォワードされるように
+ <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> ディレクティブを
+ 設定してください)。しかしイントラネット内のリソースにアクセスするときは、
+ ファイアウォールを通さないでもアクセスできます。
+ どのホストがイントラネットに属し、直接アクセスすべきかを指定するには、
+ <code class="directive"><a href="#noproxy">NoProxy</a></code> ディレクティブが
+ 役に立ちます。</p>
+
+ <p>イントラネット内のユーザは WWW のリクエストでローカルドメインを
+ 省略することがよくあります。<code>http://somehost.example.com/</code>
+ というリクエストの代わりに "http://somehost/" をリクエストしたりします。
+ このようなリクエストを受け付け、サーバに設定されているローカルドメインが
+ 暗黙のうちに使われていると解釈して、単純にリクエストを処理するものも
+ 商用プロキシサーバの中にはあります。
+ サーバが <a href="#proxyrequests">プロキシのサービス用に設定されていて</a>
+ <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> ディレクティブが
+ 使用された場合には、Apache はクライアントにリダイレクト応答を送って、
+ 正しい、完全な (<span class="transnote">(<em>訳注:</em> fully qualified)</span>)
+ サーバのアドレスに送ることができます。このように
+ リダイレクトすると、ユーザのブックマークが正しい完全なホスト名を含む
+ ことにもなるため、より好ましい方法と言えるでしょう。</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="envsettings" id="envsettings">プロトコルの調整</a></h2>
+ <p>Keepalive や HTTP/1.1 を適切に実装していないアプリケーションサーバに対して
+ <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> がリクエストを送信する場合、
+ HTTP/1.0 を使って keepalive を無しにしてリクエストを送るようにする
+ 環境変数が二つあります。これらは <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> ディレクティブで設定します。</p>
+
+ <p><code>force-proxy-request-1.0</code> と <code>proxy-nokeepalive</code>
+ がその環境変数です。</p>
+
+ <div class="example"><p><code>
+ <Location /buggyappserver/><br />
+ <span class="indent">
+ ProxyPass http://buggyappserver:7001/foo/<br />
+ SetEnv force-proxy-request-1.0 1<br />
+ SetEnv proxy-nokeepalive 1<br />
+ </span>
+ </Location>
+ </code></p></div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="request-bodies" id="request-bodies">リクエストボディ</a></h2>
+
+ <p>POST メソッドなどのリクエストには、リクエストボディがあります。
+ HTTP プロトコル仕様によると、ボディのあるリクエストは chunked
+ 転送を使うか、<code>Content-Length</code>
+ ヘッダを送信しなければなりません。
+ このようなリクエストをオリジンサーバに送信する場合、
+ <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> は常に <code>Content-Length</code>
+ を送ろうと試みます。しかし。ボディが大きく、オリジナルのリクエストで
+ chunked 転送が使われている場合、上流へのリクエストに
+ chunked 転送も使われます。
+ この挙動は <a href="../env.html">環境変数</a>で制御できます。
+ <code>proxy-sendcl</code> を設定すると、可能な限り常に
+ <code>Content-Length</code> を付与して、
+ 上流サーバに送信するようになります。
+ 逆に <code>proxy-sendchunked</code> を設定すると、リソース消費を抑え、
+ chnked エンコードを使って送信するようになります。</p>
+
+ </div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="notes" id="notes">Request notes</a></h2>
- <p><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> creates the following request notes for
- logging using the <code>%{VARNAME}n</code> format in
- <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> or
- <code class="directive"><a href="../mod/core.html#errorlogformat">ErrorLogFormat</a></code>:
- </p>
- <dl>
- <dt>proxy-source-port</dt>
- <dd>The local port used for the connection to the backend server.</dd>
- </dl>
-
- <p>CONNECT method requests are controlled by the
- <code class="directive"><a href="../mod/mod_proxy.html#proxy">Proxy</a></code> block
- as any other HTTP request going through.
- SSL connections through a proxy may be filtered explicitely
- by specifying the target host and port, for instance:
- </p>
-
- <pre class="prettyprint lang-config"><Proxy www.example.com:443>
- Require ip 192.168.0.0/16
-</Proxy></pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AllowCONNECT" id="AllowCONNECT">AllowCONNECT</a> <a name="allowconnect" id="allowconnect">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ports that are allowed to <code>CONNECT</code> through the
<code class="directive">AllowCONNECT</code> directive to override this default and
allow connections to the listed ports only.</p>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="notes" id="notes">Request notes</a></h2>
+ <p><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> creates the following request notes for
+ logging using the <code>%{VARNAME}n</code> format in
+ <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> or
+ <code class="directive"><a href="../mod/core.html#errorlogformat">ErrorLogFormat</a></code>:
+ </p>
+ <dl>
+ <dt>proxy-source-port</dt>
+ <dd>The local port used for the connection to the backend server.</dd>
+ </dl>
+
+ <p>CONNECT method requests are controlled by the
+ <code class="directive"><a href="../mod/mod_proxy.html#proxy">Proxy</a></code> block
+ as any other HTTP request going through.
+ SSL connections through a proxy may be filtered explicitely
+ by specifying the target host and port, for instance:
+ </p>
+
+ <pre class="prettyprint lang-config"><Proxy www.example.com:443>
+ Require ip 192.168.0.0/16
+</Proxy></pre>
+
</div>
</div>
<div class="bottomlang">
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AllowCONNECT" id="AllowCONNECT">AllowCONNECT</a> <a name="allowconnect" id="allowconnect">ディレクティブ</a></h2>
<table class="directive">
<code class="directive">AllowCONNECT</code> ディレクティブを使用します。</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_proxy_connect.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProxyExpressDBMFile" id="ProxyExpressDBMFile">ProxyExpressDBMFile</a> <a name="proxyexpressdbmfile" id="proxyexpressdbmfile">Directive</a></h2>
<table class="directive">
controls whether the module will be active.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_express.html" title="English"> en </a></p>
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyFtpDirCharset" id="ProxyFtpDirCharset">ProxyFtpDirCharset</a> <a name="proxyftpdircharset" id="proxyftpdircharset">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define the character set for proxied FTP listings</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFtpDirCharset <var>character set</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyFtpDirCharset ISO-8859-1</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy_ftp</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Moved from <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> in Apache 2.3.5.</td></tr>
+</table>
+ <p>The <code class="directive">ProxyFtpDirCharset</code> directive defines the
+ character set to be set for FTP directory listings in HTML generated by
+ <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyFtpEscapeWildcards" id="ProxyFtpEscapeWildcards">ProxyFtpEscapeWildcards</a> <a name="proxyftpescapewildcards" id="proxyftpescapewildcards">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Whether wildcards in requested filenames are escaped when sent to the FTP server</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFtpEscapeWildcards [on|off]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy_ftp</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.3.3 and later</td></tr>
+</table>
+ <p>The <code class="directive">ProxyFtpEscapeWildcards</code> directive
+ controls whether wildcard characters ("*?[{~") in requested
+ filenames are escaped with backslash before sending them to the
+ FTP server. That is the default behavior, but many FTP servers
+ don't know about the escaping and try to serve the literal filenames
+ they were sent, including the backslashes in the names. </p>
+ <p>Set to "off" to allow downloading files with wildcards
+ in their names from FTP servers that don't understand wildcard
+ escaping.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyFtpListOnWildcard" id="ProxyFtpListOnWildcard">ProxyFtpListOnWildcard</a> <a name="proxyftplistonwildcard" id="proxyftplistonwildcard">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Whether wildcards in requested filenames trigger a file listing</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFtpListOnWildcard [on|off]</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>on</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy_ftp</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.3.3 and later</td></tr>
+</table>
+ <p>The <code class="directive">ProxyFtpListOnWildcard</code> directive
+ controls whether wildcard characters ("*?[{~") in requested
+ filenames cause <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> to return a listing
+ of files instead of downloading a file. By default (value on),
+ they do. Set to "off" to allow downloading files even if they
+ have wildcard characters in their names.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="mimetypes" id="mimetypes">Why doesn't file type <var>xxx</var>
download via FTP?</a></h2>
See the <code class="directive">ProxyFtpListOnWildcard</code> directive.
</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyFtpDirCharset" id="ProxyFtpDirCharset">ProxyFtpDirCharset</a> <a name="proxyftpdircharset" id="proxyftpdircharset">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define the character set for proxied FTP listings</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFtpDirCharset <var>character set</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyFtpDirCharset ISO-8859-1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy_ftp</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Moved from <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> in Apache 2.3.5.</td></tr>
-</table>
- <p>The <code class="directive">ProxyFtpDirCharset</code> directive defines the
- character set to be set for FTP directory listings in HTML generated by
- <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyFtpEscapeWildcards" id="ProxyFtpEscapeWildcards">ProxyFtpEscapeWildcards</a> <a name="proxyftpescapewildcards" id="proxyftpescapewildcards">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Whether wildcards in requested filenames are escaped when sent to the FTP server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFtpEscapeWildcards [on|off]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy_ftp</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.3.3 and later</td></tr>
-</table>
- <p>The <code class="directive">ProxyFtpEscapeWildcards</code> directive
- controls whether wildcard characters ("*?[{~") in requested
- filenames are escaped with backslash before sending them to the
- FTP server. That is the default behavior, but many FTP servers
- don't know about the escaping and try to serve the literal filenames
- they were sent, including the backslashes in the names. </p>
- <p>Set to "off" to allow downloading files with wildcards
- in their names from FTP servers that don't understand wildcard
- escaping.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyFtpListOnWildcard" id="ProxyFtpListOnWildcard">ProxyFtpListOnWildcard</a> <a name="proxyftplistonwildcard" id="proxyftplistonwildcard">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Whether wildcards in requested filenames trigger a file listing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFtpListOnWildcard [on|off]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy_ftp</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.3.3 and later</td></tr>
-</table>
- <p>The <code class="directive">ProxyFtpListOnWildcard</code> directive
- controls whether wildcard characters ("*?[{~") in requested
- filenames cause <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> to return a listing
- of files instead of downloading a file. By default (value on),
- they do. Set to "off" to allow downloading files even if they
- have wildcard characters in their names.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_ftp.html" title="English"> en </a></p>
<li><img alt="" src="../images/down.gif" /> <a href="#proxyhtmlurlmap">ProxyHTMLURLMap</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProxyHTMLBufSize" id="ProxyHTMLBufSize">ProxyHTMLBufSize</a> <a name="proxyhtmlbufsize" id="proxyhtmlbufsize">Directive</a></h2>
<table class="directive">
in mod_proxy_html 3.x for HTTPD 2.0 and 2.2 is also supported.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_html.html" title="English"> en </a></p>
<li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
- <p>Remember, in order to make the following examples work, you have to
- enable <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and <code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code>.</p>
-
- <div class="example"><h3>Simple gateway</h3><pre class="prettyprint lang-config">ProxyPass /scgi-bin/ scgi://localhost:4000/</pre>
-</div>
-
- <p>The balanced gateway needs <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> and
- at least one load balancer algorithm module, such as
- <code class="module"><a href="../mod/mod_lbmethod_byrequests.html">mod_lbmethod_byrequests</a></code>, in addition to the proxy
- modules listed above. <code class="module"><a href="../mod/mod_lbmethod_byrequests.html">mod_lbmethod_byrequests</a></code> is the
- default, and will be used for this example configuration.</p>
-
- <div class="example"><h3>Balanced gateway</h3><pre class="prettyprint lang-config">ProxyPass /scgi-bin/ balancer://somecluster/
-<Proxy balancer://somecluster>
- BalancerMember scgi://localhost:4000
- BalancerMember scgi://localhost:4001
-</Proxy></pre>
-</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="env" id="env">Environment Variables</a></h2>
- <p>In addition to the configuration directives that control the
- behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, an <dfn>environment
- variable</dfn> may also control the SCGI protocol
- provider:</p>
- <dl>
- <dt>proxy-scgi-pathinfo</dt>
- <dd>By default <code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code> will neither create
- nor export the <var>PATH_INFO</var> environment variable. This allows
- the backend SCGI server to correctly determine <var>SCRIPT_NAME</var>
- and <var>Script-URI</var> and be compliant with RFC 3875 section 3.3.
- If instead you need <code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code> to generate
- a "best guess" for <var>PATH_INFO</var>, set this env-var. The
- variable must be set before <code class="directive"><a href="../mod/env.html#setenv">SetEnv</a></code>
- is effective. <code class="directive"><a href="../mod/setenv.html#setenvif">SetEnvIf</a></code> can be
- used instead: <code>SetEnvIf Request_URI . proxy-scgi-pathinfo</code>
- </dd>
- </dl>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProxySCGIInternalRedirect" id="ProxySCGIInternalRedirect">ProxySCGIInternalRedirect</a> <a name="proxyscgiinternalredirect" id="proxyscgiinternalredirect">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable or disable internal redirect responses from the
ProxySCGISendfile X-Send-Static</pre>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
+ <p>Remember, in order to make the following examples work, you have to
+ enable <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and <code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code>.</p>
+
+ <div class="example"><h3>Simple gateway</h3><pre class="prettyprint lang-config">ProxyPass /scgi-bin/ scgi://localhost:4000/</pre>
+</div>
+
+ <p>The balanced gateway needs <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> and
+ at least one load balancer algorithm module, such as
+ <code class="module"><a href="../mod/mod_lbmethod_byrequests.html">mod_lbmethod_byrequests</a></code>, in addition to the proxy
+ modules listed above. <code class="module"><a href="../mod/mod_lbmethod_byrequests.html">mod_lbmethod_byrequests</a></code> is the
+ default, and will be used for this example configuration.</p>
+
+ <div class="example"><h3>Balanced gateway</h3><pre class="prettyprint lang-config">ProxyPass /scgi-bin/ balancer://somecluster/
+<Proxy balancer://somecluster>
+ BalancerMember scgi://localhost:4000
+ BalancerMember scgi://localhost:4001
+</Proxy></pre>
+</div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="env" id="env">Environment Variables</a></h2>
+ <p>In addition to the configuration directives that control the
+ behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, an <dfn>environment
+ variable</dfn> may also control the SCGI protocol
+ provider:</p>
+ <dl>
+ <dt>proxy-scgi-pathinfo</dt>
+ <dd>By default <code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code> will neither create
+ nor export the <var>PATH_INFO</var> environment variable. This allows
+ the backend SCGI server to correctly determine <var>SCRIPT_NAME</var>
+ and <var>Script-URI</var> and be compliant with RFC 3875 section 3.3.
+ If instead you need <code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code> to generate
+ a "best guess" for <var>PATH_INFO</var>, set this env-var. The
+ variable must be set before <code class="directive"><a href="../mod/env.html#setenv">SetEnv</a></code>
+ is effective. <code class="directive"><a href="../mod/setenv.html#setenvif">SetEnvIf</a></code> can be
+ used instead: <code>SetEnvIf Request_URI . proxy-scgi-pathinfo</code>
+ </dd>
+ </dl>
</div>
</div>
<div class="bottomlang">
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProxyWebsocketAsync" id="ProxyWebsocketAsync">ProxyWebsocketAsync</a> <a name="proxywebsocketasync" id="proxywebsocketasync">Directive</a></h2>
<table class="directive">
left open while idle.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_wstunnel.html" title="English"> en </a></p>
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ReflectorHeader" id="ReflectorHeader">ReflectorHeader</a> <a name="reflectorheader" id="reflectorheader">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Reflect an input header to the output headers</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ReflectorHeader <var>inputheader</var> <var>[outputheader]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_reflector</td></tr>
+</table>
+ <p>This directive controls the reflection of request headers to the response.
+ The first argument is the name of the request header to copy. If the optional
+ second argument is specified, it will be used as the name of the response
+ header, otherwise the original request header name will be used.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="examples" id="examples">Examples</a></h2>
<dl>
</dd>
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ReflectorHeader" id="ReflectorHeader">ReflectorHeader</a> <a name="reflectorheader" id="reflectorheader">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Reflect an input header to the output headers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ReflectorHeader <var>inputheader</var> <var>[outputheader]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_reflector</td></tr>
-</table>
- <p>This directive controls the reflection of request headers to the response.
- The first argument is the name of the request header to copy. If the optional
- second argument is specified, it will be used as the name of the response
- header, otherwise the original request header name will be used.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_reflector.html" title="English"> en </a></p>
<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="processing" id="processing">Remote IP Processing</a></h2>
-
- <p>Apache by default identifies the useragent with the connection's
- client_ip value, and the connection remote_host and remote_logname are
- derived from this value. These fields play a role in authentication,
- authorization and logging and other purposes by other loadable
- modules.</p>
-
- <p>mod_remoteip overrides the client IP of the connection with the
- advertised useragent IP as provided by a proxy or load balancer, for
- the duration of the request. A load balancer might establish a long
- lived keepalive connection with the server, and each request will
- have the correct useragent IP, even though the underlying client IP
- address of the load balancer remains unchanged.</p>
-
- <p>When multiple, comma delimited useragent IP addresses are listed in the
- header value, they are processed in Right-to-Left order. Processing
- halts when a given useragent IP address is not trusted to present the
- preceding IP address. The header field is updated to this remaining
- list of unconfirmed IP addresses, or if all IP addresses were trusted,
- this header is removed from the request altogether.</p>
-
- <p>In overriding the client IP, the module stores the list of intermediate
- hosts in a remoteip-proxy-ip-list note, which <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>
- can record using the <code>%{remoteip-proxy-ip-list}n</code> format token.
- If the administrator needs to store this as an additional header, this
- same value can also be recording as a header using the directive
- <code class="directive"><a href="#remoteipproxiesheader">RemoteIPProxiesHeader</a></code>.</p>
-
- <div class="note"><h3>IPv4-over-IPv6 Mapped Addresses</h3>
- As with httpd in general, any IPv4-over-IPv6 mapped addresses are recorded
- in their IPv4 representation.</div>
-
- <div class="note"><h3>Internal (Private) Addresses</h3>
- All internal addresses 10/8, 172.16/12, 192.168/16, 169.254/16 and 127/8
- blocks (and IPv6 addresses outside of the public 2000::/3 block) are only
- evaluated by mod_remoteip when <code class="directive"><a href="#remoteipinternalproxy">RemoteIPInternalProxy</a></code>
- internal (intranet) proxies are registered.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RemoteIPHeader" id="RemoteIPHeader">RemoteIPHeader</a> <a name="remoteipheader" id="remoteipheader">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Declare the header field which should be parsed for useragent IP addresses</td></tr>
proxy.isp.example.com #some well known ISP
</code></p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="processing" id="processing">Remote IP Processing</a></h2>
+
+ <p>Apache by default identifies the useragent with the connection's
+ client_ip value, and the connection remote_host and remote_logname are
+ derived from this value. These fields play a role in authentication,
+ authorization and logging and other purposes by other loadable
+ modules.</p>
+
+ <p>mod_remoteip overrides the client IP of the connection with the
+ advertised useragent IP as provided by a proxy or load balancer, for
+ the duration of the request. A load balancer might establish a long
+ lived keepalive connection with the server, and each request will
+ have the correct useragent IP, even though the underlying client IP
+ address of the load balancer remains unchanged.</p>
+
+ <p>When multiple, comma delimited useragent IP addresses are listed in the
+ header value, they are processed in Right-to-Left order. Processing
+ halts when a given useragent IP address is not trusted to present the
+ preceding IP address. The header field is updated to this remaining
+ list of unconfirmed IP addresses, or if all IP addresses were trusted,
+ this header is removed from the request altogether.</p>
+
+ <p>In overriding the client IP, the module stores the list of intermediate
+ hosts in a remoteip-proxy-ip-list note, which <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>
+ can record using the <code>%{remoteip-proxy-ip-list}n</code> format token.
+ If the administrator needs to store this as an additional header, this
+ same value can also be recording as a header using the directive
+ <code class="directive"><a href="#remoteipproxiesheader">RemoteIPProxiesHeader</a></code>.</p>
+
+ <div class="note"><h3>IPv4-over-IPv6 Mapped Addresses</h3>
+ As with httpd in general, any IPv4-over-IPv6 mapped addresses are recorded
+ in their IPv4 representation.</div>
+
+ <div class="note"><h3>Internal (Private) Addresses</h3>
+ All internal addresses 10/8, 172.16/12, 192.168/16, 169.254/16 and 127/8
+ blocks (and IPv6 addresses outside of the public 2000::/3 block) are only
+ evaluated by mod_remoteip when <code class="directive"><a href="#remoteipinternalproxy">RemoteIPInternalProxy</a></code>
+ internal (intranet) proxies are registered.</div>
+
</div>
</div>
<div class="bottomlang">
<li><code class="module"><a href="../mod/mod_ident.html">mod_ident</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="processing" id="processing">Traitement des adresses distantes</a></h2>
-
- <p>Apache identifie le client par la valeur remote_ip de la
- connexion, et de cette valeur découlent les valeurs remote_host et
- remote_logname de la connexion. Ces champs jouent un rôle
- dans l'authentification, l'autorisation et la connexion, ainsi que
- dans d'autres traitements effectués par d'autres modules
- chargeables.</p>
-
- <p>mod_remoteip remplace la véritable remote_ip par la remote_ip
- indiquée par exemple par un mandataire chaque fois que le serveur
- effectue une évaluation du client, et réinitialise les valeurs de
- remote_host et remote_logname afin de déclencher une nouvelle
- requête dns ou ident sur l'adresse IP distante.</p>
-
- <p>Lorsque la valeur de l'en-tête comporte plusieurs adresses IP
- distantes séparées par des virgules, celles-ci sont traitées de la
- droite vers la gauche. Le traitement s'arrête lorsque l'adresse IP
- distante courante n'est pas digne de confiance pour présenter
- l'adresse IP précédente. Le champ d'en-tête est alors mis à jour de
- façon à ne contenir que cette liste d'adresses non confirmées, ou
- bien, si toutes les adresses IP sont dignes de confiance, cet
- en-tête est tout bonnement supprimé de la requête.</p>
-
- <p>Lors du remplacement de l'adresse IP distante, le module stocke
- la liste des hôtes intermédiaires dans un mémo
- remoteip-proxy-ip-list, que l'on peut faire enregistrer par
- <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> en utilisant le symbole de format
- <code>%{remoteip-proxy-ip-list}n</code>. Si l'administrateur doit
- stocker ceci dans un en-tête additionnel, la même valeur peut aussi
- être enregistrée sous la forme d'un en-tête en utilisant la
- directive <code class="directive"><a href="#remoteipproxiesheader">RemoteIPProxiesHeader</a></code>.</p>
-
- <div class="note"><h3>Adresses IPv4 converties au format IPv6</h3>
- Avec httpd, d'une manière générale, toute adresse IPv4 convertie au
- format IPv6 est enregistrée sous sa forme IPv4.</div>
-
- <div class="note"><h3>Adresses internes (privées)</h3>
- Tous les blocs d'adresses internes 10/8, 172.16/12, 192.168/16,
- 169.254/16 and 127/8 (ainsi que les adresses IPv6 en dehors du bloc
- public 2000::/3 block) ne sont évaluées par mod_remoteip que lorsque
- des mandataires internes (intranet)
- <code class="directive"><a href="#remoteipinternalproxy">RemoteIPInternalProxy</a></code> sont enregistrés.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="remoteipheader" id="remoteipheader">Directive</a> <a name="RemoteIPHeader" id="RemoteIPHeader">RemoteIPHeader</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le champ d'en-tête qui contiendra les adresses IP
proxy.isp.example.com #un FAI bien connu
</code></p></div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="processing" id="processing">Traitement des adresses distantes</a></h2>
+
+ <p>Apache identifie le client par la valeur remote_ip de la
+ connexion, et de cette valeur découlent les valeurs remote_host et
+ remote_logname de la connexion. Ces champs jouent un rôle
+ dans l'authentification, l'autorisation et la connexion, ainsi que
+ dans d'autres traitements effectués par d'autres modules
+ chargeables.</p>
+
+ <p>mod_remoteip remplace la véritable remote_ip par la remote_ip
+ indiquée par exemple par un mandataire chaque fois que le serveur
+ effectue une évaluation du client, et réinitialise les valeurs de
+ remote_host et remote_logname afin de déclencher une nouvelle
+ requête dns ou ident sur l'adresse IP distante.</p>
+
+ <p>Lorsque la valeur de l'en-tête comporte plusieurs adresses IP
+ distantes séparées par des virgules, celles-ci sont traitées de la
+ droite vers la gauche. Le traitement s'arrête lorsque l'adresse IP
+ distante courante n'est pas digne de confiance pour présenter
+ l'adresse IP précédente. Le champ d'en-tête est alors mis à jour de
+ façon à ne contenir que cette liste d'adresses non confirmées, ou
+ bien, si toutes les adresses IP sont dignes de confiance, cet
+ en-tête est tout bonnement supprimé de la requête.</p>
+
+ <p>Lors du remplacement de l'adresse IP distante, le module stocke
+ la liste des hôtes intermédiaires dans un mémo
+ remoteip-proxy-ip-list, que l'on peut faire enregistrer par
+ <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> en utilisant le symbole de format
+ <code>%{remoteip-proxy-ip-list}n</code>. Si l'administrateur doit
+ stocker ceci dans un en-tête additionnel, la même valeur peut aussi
+ être enregistrée sous la forme d'un en-tête en utilisant la
+ directive <code class="directive"><a href="#remoteipproxiesheader">RemoteIPProxiesHeader</a></code>.</p>
+
+ <div class="note"><h3>Adresses IPv4 converties au format IPv6</h3>
+ Avec httpd, d'une manière générale, toute adresse IPv4 convertie au
+ format IPv6 est enregistrée sous sa forme IPv4.</div>
+
+ <div class="note"><h3>Adresses internes (privées)</h3>
+ Tous les blocs d'adresses internes 10/8, 172.16/12, 192.168/16,
+ 169.254/16 and 127/8 (ainsi que les adresses IPv6 en dehors du bloc
+ public 2000::/3 block) ne sont évaluées par mod_remoteip que lorsque
+ des mandataires internes (intranet)
+ <code class="directive"><a href="#remoteipinternalproxy">RemoteIPInternalProxy</a></code> sont enregistrés.</div>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
- <ol>
- <li>
- Allow 10 seconds to receive the request including the headers and
- 30 seconds for receiving the request body:
-
- <pre class="prettyprint lang-config">RequestReadTimeout header=10 body=30</pre>
-
- </li>
-
- <li>
- Allow at least 10 seconds to receive the request body.
- If the client sends data, increase the timeout by 1 second for every
- 1000 bytes received, with no upper limit for the timeout (except for
- the limit given indirectly by
- <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code>):
-
- <pre class="prettyprint lang-config">RequestReadTimeout body=10,MinRate=1000</pre>
-
- </li>
-
- <li>
- Allow at least 10 seconds to receive the request including the headers.
- If the client sends data, increase the timeout by 1 second for every
- 500 bytes received. But do not allow more than 30 seconds for the
- request including the headers:
-
- <pre class="prettyprint lang-config">RequestReadTimeout header=10-30,MinRate=500</pre>
-
- </li>
-
- <li>
- Usually, a server should have both header and body timeouts configured.
- If a common configuration is used for http and https virtual hosts, the
- timeouts should not be set too low:
-
- <pre class="prettyprint lang-config">RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500</pre>
-
- </li>
-
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RequestReadTimeout" id="RequestReadTimeout">RequestReadTimeout</a> <a name="requestreadtimeout" id="requestreadtimeout">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set timeout values for receiving request headers and body from client.
</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
+
+ <ol>
+ <li>
+ Allow 10 seconds to receive the request including the headers and
+ 30 seconds for receiving the request body:
+
+ <pre class="prettyprint lang-config">RequestReadTimeout header=10 body=30</pre>
+
+ </li>
+
+ <li>
+ Allow at least 10 seconds to receive the request body.
+ If the client sends data, increase the timeout by 1 second for every
+ 1000 bytes received, with no upper limit for the timeout (except for
+ the limit given indirectly by
+ <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code>):
+
+ <pre class="prettyprint lang-config">RequestReadTimeout body=10,MinRate=1000</pre>
+
+ </li>
+
+ <li>
+ Allow at least 10 seconds to receive the request including the headers.
+ If the client sends data, increase the timeout by 1 second for every
+ 500 bytes received. But do not allow more than 30 seconds for the
+ request including the headers:
+
+ <pre class="prettyprint lang-config">RequestReadTimeout header=10-30,MinRate=500</pre>
+
+ </li>
+
+ <li>
+ Usually, a server should have both header and body timeouts configured.
+ If a common configuration is used for http and https virtual hosts, the
+ timeouts should not be set too low:
+
+ <pre class="prettyprint lang-config">RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500</pre>
+
+ </li>
+
+ </ol>
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#keptbodysize">KeptBodySize</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="KeptBodySize" id="KeptBodySize">KeptBodySize</a> <a name="keptbodysize" id="keptbodysize">Directive</a></h2>
<table class="directive">
<li><a href="mod_auth_form.html">mod_auth_form</a> documentation</li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_request.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#keptbodysize">KeptBodySize</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="KeptBodySize" id="KeptBodySize">KeptBodySize</a> <a name="keptbodysize" id="keptbodysize">Yönergesi</a></h2>
<table class="directive">
<li><a href="mod_auth_form.html">mod_auth_form</a> belgesi</li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_request.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#logging">Logging</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logging" id="logging">Logging</a></h2>
-
- <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offers detailed logging of its actions
- at the <code>trace1</code> to <code>trace8</code> log levels. The
- log level can be set specifically for <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- using the <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> directive: Up to
- level <code>debug</code>, no actions are logged, while <code>trace8</code>
- means that practically all actions are logged.</p>
-
- <div class="note">
- Using a high trace log level for <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- will slow down your Apache HTTP Server dramatically! Use a log
- level higher than <code>trace2</code> only for debugging!
- </div>
-
- <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">LogLevel alert rewrite:trace3</pre>
-</div>
-
- <div class="note"><h3>RewriteLog</h3>
- <p>Those familiar with earlier versions of
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> will no doubt be looking for the
- <code>RewriteLog</code> and <code>RewriteLogLevel</code>
- directives. This functionality has been completely replaced by the
- new per-module logging configuration mentioned above.
- </p>
-
- <p>To get just the <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-specific log
- messages, pipe the log file through grep:</p>
- <div class="example"><p><code>
- tail -f error_log|fgrep '[rewrite:'
- </code></p></div>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteBase" id="RewriteBase">RewriteBase</a> <a name="rewritebase" id="rewritebase">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the base URL for per-directory rewrites</td></tr>
</table>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logging" id="logging">Logging</a></h2>
+
+ <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offers detailed logging of its actions
+ at the <code>trace1</code> to <code>trace8</code> log levels. The
+ log level can be set specifically for <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
+ using the <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> directive: Up to
+ level <code>debug</code>, no actions are logged, while <code>trace8</code>
+ means that practically all actions are logged.</p>
+
+ <div class="note">
+ Using a high trace log level for <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
+ will slow down your Apache HTTP Server dramatically! Use a log
+ level higher than <code>trace2</code> only for debugging!
+ </div>
+
+ <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">LogLevel alert rewrite:trace3</pre>
+</div>
+
+ <div class="note"><h3>RewriteLog</h3>
+ <p>Those familiar with earlier versions of
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> will no doubt be looking for the
+ <code>RewriteLog</code> and <code>RewriteLogLevel</code>
+ directives. This functionality has been completely replaced by the
+ new per-module logging configuration mentioned above.
+ </p>
+
+ <p>To get just the <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-specific log
+ messages, pipe the log file through grep:</p>
+ <div class="example"><p><code>
+ tail -f error_log|fgrep '[rewrite:'
+ </code></p></div>
+ </div>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#logging">Journalisation</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logging" id="logging">Journalisation</a></h2>
-
- <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offre une journalisation détaillée
- de ses actions aux niveaux de journalisation <code>trace1</code> à
- <code>trace8</code>. Le niveau de journalisation peut être défini de
- manière spécifique à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> via la directive
- <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> : jusqu'au niveau
- <code>debug</code> aucune action n'est journalisée, alors qu'elles
- le sont pratiquement toutes au niveau <code>trace8</code>.</p>
-
- <div class="note">
- L'utilisation d'un niveau de journalisation élevé pour
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> va ralentir votre serveur HTTP Apache
- de manière dramatique ! N'utilisez un niveau de journalisation
- supérieur à <code>trace2</code> qu'à des fins de débogage !
- </div>
-
- <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">LogLevel alert rewrite:trace3</pre>
-</div>
-
- <div class="note"><h3>RewriteLog</h3>
- <p>Ceux qui sont familiers avec les versions précédentes de
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vont probablement rechercher en vain les
- directives <code>RewriteLog</code> et
- <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
- par une configuration de la journalisation par module, comme
- mentionné plus haut.
- </p>
-
- <p>Pour extraire les traces spécifiques à
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, affichez le fichier journal en
- redirigeant la sortie vers grep :</p>
- <div class="example"><p><code>
- tail -f error_log|fgrep '[rewrite:'
- </code></p></div>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="rewritebase" id="rewritebase">Directive</a> <a name="RewriteBase" id="RewriteBase">RewriteBase</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'URL de base pour les réécritures au niveau
</table>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logging" id="logging">Journalisation</a></h2>
+
+ <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offre une journalisation détaillée
+ de ses actions aux niveaux de journalisation <code>trace1</code> à
+ <code>trace8</code>. Le niveau de journalisation peut être défini de
+ manière spécifique à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> via la directive
+ <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> : jusqu'au niveau
+ <code>debug</code> aucune action n'est journalisée, alors qu'elles
+ le sont pratiquement toutes au niveau <code>trace8</code>.</p>
+
+ <div class="note">
+ L'utilisation d'un niveau de journalisation élevé pour
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> va ralentir votre serveur HTTP Apache
+ de manière dramatique ! N'utilisez un niveau de journalisation
+ supérieur à <code>trace2</code> qu'à des fins de débogage !
+ </div>
+
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">LogLevel alert rewrite:trace3</pre>
+</div>
+
+ <div class="note"><h3>RewriteLog</h3>
+ <p>Ceux qui sont familiers avec les versions précédentes de
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vont probablement rechercher en vain les
+ directives <code>RewriteLog</code> et
+ <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
+ par une configuration de la journalisation par module, comme
+ mentionné plus haut.
+ </p>
+
+ <p>Pour extraire les traces spécifiques à
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, affichez le fichier journal en
+ redirigeant la sortie vers grep :</p>
+ <div class="example"><p><code>
+ tail -f error_log|fgrep '[rewrite:'
+ </code></p></div>
+ </div>
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#sed_commands">Sed Commands</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="InputSed" id="InputSed">InputSed</a> <a name="inputsed" id="inputsed">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sed command to filter request data (typically <code>POST</code> data)</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>InputSed <var>sed-command</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
+</table>
+ <p>The <code class="directive">InputSed</code> directive specifies the <code>sed</code> command
+ to execute on the request data e.g., <code>POST</code> data.
+ </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="OutputSed" id="OutputSed">OutputSed</a> <a name="outputsed" id="outputsed">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sed command for filtering response content</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>OutputSed <var>sed-command</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
+</table>
+ <p>The <code class="directive">OutputSed</code> directive specifies the <code>sed</code>
+ command to execute on the response.
+ </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="sampleconf" id="sampleconf">Sample Configuration</a></h2>
<div class="example"><h3>Adding an output filter </h3><pre class="prettyprint lang-config"># In the following example, the sed filter will change the string
<dd>Swap the contents of the hold buffer and the current line.</dd>
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="InputSed" id="InputSed">InputSed</a> <a name="inputsed" id="inputsed">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sed command to filter request data (typically <code>POST</code> data)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>InputSed <var>sed-command</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
-</table>
- <p>The <code class="directive">InputSed</code> directive specifies the <code>sed</code> command
- to execute on the request data e.g., <code>POST</code> data.
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="OutputSed" id="OutputSed">OutputSed</a> <a name="outputsed" id="outputsed">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sed command for filtering response content</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>OutputSed <var>sed-command</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
-</table>
- <p>The <code class="directive">OutputSed</code> directive specifies the <code>sed</code>
- command to execute on the response.
- </p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_sed.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#sed_commands">Commandes sed</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="inputsed" id="inputsed">Directive</a> <a name="InputSed" id="InputSed">InputSed</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Commande sed à exécuter pour le filtrage des données d'une
+requête (en général des données <code>POST</code>)</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>InputSed <var>commande-sed</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td /></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
+</table>
+ <p>La directive <code class="directive">InputSed</code> permet de spécifier
+ la commande sed à exécuter pour le filtrage des données (en général
+ des données <code>POST</code>) d'une requête.
+ </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="outputsed" id="outputsed">Directive</a> <a name="OutputSed" id="OutputSed">OutputSed</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Commande sed pour le filtrage des contenus de type
+réponse</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>OutputSed <var>commande-sed</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td /></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
+</table>
+ <p>La directive <code class="directive">OutputSed</code> permet de spécifier
+ la commande <code>sed</code> à exécuter dans le cadre du traitement
+ d'une réponse.
+ </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="sampleconf" id="sampleconf">Exemple de configuration</a></h2>
<div class="example"><h3>Ajout d'un filtre en sortie</h3><pre class="prettyprint lang-config"># Dans l'exemple suivant, le filtre sed va remplacer la chaîne
<dd>Echange les contenus du tampon et de la ligne courante.</dd>
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="inputsed" id="inputsed">Directive</a> <a name="InputSed" id="InputSed">InputSed</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Commande sed à exécuter pour le filtrage des données d'une
-requête (en général des données <code>POST</code>)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>InputSed <var>commande-sed</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td /></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
-</table>
- <p>La directive <code class="directive">InputSed</code> permet de spécifier
- la commande sed à exécuter pour le filtrage des données (en général
- des données <code>POST</code>) d'une requête.
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="outputsed" id="outputsed">Directive</a> <a name="OutputSed" id="OutputSed">OutputSed</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Commande sed pour le filtrage des contenus de type
-réponse</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>OutputSed <var>commande-sed</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td /></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_sed</td></tr>
-</table>
- <p>La directive <code class="directive">OutputSed</code> permet de spécifier
- la commande <code>sed</code> à exécuter dans le cadre du traitement
- d'une réponse.
- </p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_sed.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><code class="module"><a href="../mod/mod_session_dbd.html">mod_session_dbd</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Session" id="Session">Session</a> <a name="session" id="session">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables a session for the current directory or location</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Session On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Session Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
+</table>
+ <p>The <code class="directive">Session</code> directive enables a session for the
+ directory or location container. Further directives control where the
+ session will be stored and how privacy is maintained.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SessionEnv" id="SessionEnv">SessionEnv</a> <a name="sessionenv" id="sessionenv">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Control whether the contents of the session are written to the
+<var>HTTP_SESSION</var> environment variable</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionEnv On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SessionEnv Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
+</table>
+ <p>If set to <var>On</var>, the <code class="directive">SessionEnv</code> directive
+ causes the contents of the session to be written to a CGI environment
+ variable called <var>HTTP_SESSION</var>.</p>
+
+ <p>The string is written in the URL query format, for example:</p>
+
+ <div class="example"><p><code>
+ <code>key1=foo&key3=bar</code>
+ </code></p></div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SessionExclude" id="SessionExclude">SessionExclude</a> <a name="sessionexclude" id="sessionexclude">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define URL prefixes for which a session is ignored</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionExclude <var>path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
+</table>
+ <p>The <code class="directive">SessionExclude</code> directive allows sessions to
+ be disabled relative to URL prefixes only. This can be used to make a
+ website more efficient, by targeting a more precise URL space for which
+ a session should be maintained. By default, all URLs within the directory
+ or location are included in the session. The
+ <code class="directive"><a href="#sessionexclude">SessionExclude</a></code> directive takes
+ precedence over the
+ <code class="directive"><a href="#sessioninclude">SessionInclude</a></code> directive.</p>
+
+ <div class="warning"><h3>Warning</h3>
+ <p>This directive has a similar purpose to the <var>path</var> attribute
+ in HTTP cookies, but should not be confused with this attribute. This
+ directive does not set the <var>path</var> attribute, which must be
+ configured separately.</p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SessionHeader" id="SessionHeader">SessionHeader</a> <a name="sessionheader" id="sessionheader">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Import session updates from a given HTTP response header</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionHeader <var>header</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
+</table>
+ <p>The <code class="directive">SessionHeader</code> directive defines the name of an
+ HTTP response header which, if present, will be parsed and written to the
+ current session.</p>
+
+ <p>The header value is expected to be in the URL query format, for example:</p>
+
+ <div class="example"><p><code>
+ <code>key1=foo&key2=&key3=bar</code>
+ </code></p></div>
+
+ <p>Where a key is set to the empty string, that key will be removed from the
+ session.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SessionInclude" id="SessionInclude">SessionInclude</a> <a name="sessioninclude" id="sessioninclude">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define URL prefixes for which a session is valid</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionInclude <var>path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>all URLs</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
+</table>
+ <p>The <code class="directive">SessionInclude</code> directive allows sessions to
+ be made valid for specific URL prefixes only. This can be used to make a
+ website more efficient, by targeting a more precise URL space for which
+ a session should be maintained. By default, all URLs within the directory
+ or location are included in the session.</p>
+
+ <div class="warning"><h3>Warning</h3>
+ <p>This directive has a similar purpose to the <var>path</var> attribute
+ in HTTP cookies, but should not be confused with this attribute. This
+ directive does not set the <var>path</var> attribute, which must be
+ configured separately.</p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SessionMaxAge" id="SessionMaxAge">SessionMaxAge</a> <a name="sessionmaxage" id="sessionmaxage">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define a maximum age in seconds for a session</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionMaxAge <var>maxage</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SessionMaxAge 0</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
+</table>
+ <p>The <code class="directive">SessionMaxAge</code> directive defines a time limit
+ for which a session will remain valid. When a session is saved, this time
+ limit is reset and an existing session can be continued. If a session
+ becomes older than this limit without a request to the server to refresh
+ the session, the session will time out and be removed. Where a session is
+ used to stored user login details, this has the effect of logging the user
+ out automatically after the given time.</p>
+
+ <p>Setting the maxage to zero disables session expiry.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="whatisasession" id="whatisasession">What is a session?</a></h2>
<p>At the core of the session interface is a table of key and value pairs
</dl>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Session" id="Session">Session</a> <a name="session" id="session">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables a session for the current directory or location</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Session On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Session Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
-</table>
- <p>The <code class="directive">Session</code> directive enables a session for the
- directory or location container. Further directives control where the
- session will be stored and how privacy is maintained.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SessionEnv" id="SessionEnv">SessionEnv</a> <a name="sessionenv" id="sessionenv">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Control whether the contents of the session are written to the
-<var>HTTP_SESSION</var> environment variable</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionEnv On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SessionEnv Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
-</table>
- <p>If set to <var>On</var>, the <code class="directive">SessionEnv</code> directive
- causes the contents of the session to be written to a CGI environment
- variable called <var>HTTP_SESSION</var>.</p>
-
- <p>The string is written in the URL query format, for example:</p>
-
- <div class="example"><p><code>
- <code>key1=foo&key3=bar</code>
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SessionExclude" id="SessionExclude">SessionExclude</a> <a name="sessionexclude" id="sessionexclude">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define URL prefixes for which a session is ignored</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionExclude <var>path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
-</table>
- <p>The <code class="directive">SessionExclude</code> directive allows sessions to
- be disabled relative to URL prefixes only. This can be used to make a
- website more efficient, by targeting a more precise URL space for which
- a session should be maintained. By default, all URLs within the directory
- or location are included in the session. The
- <code class="directive"><a href="#sessionexclude">SessionExclude</a></code> directive takes
- precedence over the
- <code class="directive"><a href="#sessioninclude">SessionInclude</a></code> directive.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>This directive has a similar purpose to the <var>path</var> attribute
- in HTTP cookies, but should not be confused with this attribute. This
- directive does not set the <var>path</var> attribute, which must be
- configured separately.</p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SessionHeader" id="SessionHeader">SessionHeader</a> <a name="sessionheader" id="sessionheader">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Import session updates from a given HTTP response header</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionHeader <var>header</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
-</table>
- <p>The <code class="directive">SessionHeader</code> directive defines the name of an
- HTTP response header which, if present, will be parsed and written to the
- current session.</p>
-
- <p>The header value is expected to be in the URL query format, for example:</p>
-
- <div class="example"><p><code>
- <code>key1=foo&key2=&key3=bar</code>
- </code></p></div>
-
- <p>Where a key is set to the empty string, that key will be removed from the
- session.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SessionInclude" id="SessionInclude">SessionInclude</a> <a name="sessioninclude" id="sessioninclude">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define URL prefixes for which a session is valid</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionInclude <var>path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>all URLs</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
-</table>
- <p>The <code class="directive">SessionInclude</code> directive allows sessions to
- be made valid for specific URL prefixes only. This can be used to make a
- website more efficient, by targeting a more precise URL space for which
- a session should be maintained. By default, all URLs within the directory
- or location are included in the session.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>This directive has a similar purpose to the <var>path</var> attribute
- in HTTP cookies, but should not be confused with this attribute. This
- directive does not set the <var>path</var> attribute, which must be
- configured separately.</p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SessionMaxAge" id="SessionMaxAge">SessionMaxAge</a> <a name="sessionmaxage" id="sessionmaxage">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define a maximum age in seconds for a session</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SessionMaxAge <var>maxage</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SessionMaxAge 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_session</td></tr>
-</table>
- <p>The <code class="directive">SessionMaxAge</code> directive defines a time limit
- for which a session will remain valid. When a session is saved, this time
- limit is reset and an existing session can be continued. If a session
- becomes older than this limit without a request to the server to refresh
- the session, the session will time out and be removed. Where a session is
- used to stored user login details, this has the effect of logging the user
- out automatically after the given time.</p>
-
- <p>Setting the maxage to zero disables session expiry.</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_session.html" title="English"> en </a></p>
<li><code class="module"><a href="../mod/mod_session_dbd.html">mod_session_dbd</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basicexamples" id="basicexamples">Basic Examples</a></h2>
-
- <p>To create a simple session and store it in a cookie called
- <var>session</var>, configure the session as follows:</p>
-
- <div class="example"><h3>Browser based session</h3><pre class="prettyprint lang-config">Session On
-SessionCookieName session path=/</pre>
-</div>
-
- <p>For more examples on how the session can be configured to be read
- from and written to by a CGI application, see the
- <code class="module"><a href="../mod/mod_session.html">mod_session</a></code> examples section.</p>
-
- <p>For documentation on how the session can be used to store username
- and password details, see the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> module.</p>
-
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SessionCookieName" id="SessionCookieName">SessionCookieName</a> <a name="sessioncookiename" id="sessioncookiename">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name and attributes for the RFC2109 cookie storing the session</td></tr>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basicexamples" id="basicexamples">Basic Examples</a></h2>
+
+ <p>To create a simple session and store it in a cookie called
+ <var>session</var>, configure the session as follows:</p>
+
+ <div class="example"><h3>Browser based session</h3><pre class="prettyprint lang-config">Session On
+SessionCookieName session path=/</pre>
+</div>
+
+ <p>For more examples on how the session can be configured to be read
+ from and written to by a CGI application, see the
+ <code class="module"><a href="../mod/mod_session.html">mod_session</a></code> examples section.</p>
+
+ <p>For documentation on how the session can be used to store username
+ and password details, see the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> module.</p>
+
+ </div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_session_cookie.html" title="English"> en </a></p>
<li><code class="module"><a href="../mod/mod_session_dbd.html">mod_session_dbd</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basicusage" id="basicusage">Basic Usage</a></h2>
-
- <p>To create a simple encrypted session and store it in a cookie called
- <var>session</var>, configure the session as follows:</p>
-
- <div class="example"><h3>Browser based encrypted session</h3><pre class="prettyprint lang-config">Session On
-SessionCookieName session path=/
-SessionCryptoPassphrase secret</pre>
-</div>
-
- <p>The session will be encrypted with the given key. Different servers can
- be configured to share sessions by ensuring the same encryption key is used
- on each server.</p>
-
- <p>If the encryption key is changed, sessions will be invalidated
- automatically.</p>
-
- <p>For documentation on how the session can be used to store username
- and password details, see the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> module.</p>
-
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SessionCryptoCipher" id="SessionCryptoCipher">SessionCryptoCipher</a> <a name="sessioncryptocipher" id="sessioncryptocipher">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The crypto cipher to be used to encrypt the session</td></tr>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basicusage" id="basicusage">Basic Usage</a></h2>
+
+ <p>To create a simple encrypted session and store it in a cookie called
+ <var>session</var>, configure the session as follows:</p>
+
+ <div class="example"><h3>Browser based encrypted session</h3><pre class="prettyprint lang-config">Session On
+SessionCookieName session path=/
+SessionCryptoPassphrase secret</pre>
+</div>
+
+ <p>The session will be encrypted with the given key. Different servers can
+ be configured to share sessions by ensuring the same encryption key is used
+ on each server.</p>
+
+ <p>If the encryption key is changed, sessions will be invalidated
+ automatically.</p>
+
+ <p>For documentation on how the session can be used to store username
+ and password details, see the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> module.</p>
+
+ </div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_session_crypto.html" title="English"> en </a></p>
<li><code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dbdconfig" id="dbdconfig">DBD Configuration</a></h2>
-
- <p>Before the <code class="module"><a href="../mod/mod_session_dbd.html">mod_session_dbd</a></code> module can be configured to maintain a
- session, the <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> module must be configured to make the various database queries
- available to the server.</p>
-
- <p>There are four queries required to keep a session maintained, to select an existing session,
- to update an existing session, to insert a new session, and to delete an expired or empty
- session. These queries are configured as per the example below.</p>
-
- <div class="example"><h3>Sample DBD configuration</h3><pre class="prettyprint lang-config">DBDriver pgsql
-DBDParams "dbname=apachesession user=apache password=xxxxx host=localhost"
-DBDPrepareSQL "delete from session where key = %s" deletesession
-DBDPrepareSQL "update session set value = %s, expiry = %lld, key = %s where key = %s" updatesession
-DBDPrepareSQL "insert into session (value, expiry, key) values (%s, %lld, %s)" insertsession
-DBDPrepareSQL "select value from session where key = %s and (expiry = 0 or expiry > %lld)" selectsession
-DBDPrepareSQL "delete from session where expiry != 0 and expiry < %lld" cleansession</pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="anonymous" id="anonymous">Anonymous Sessions</a></h2>
-
- <p>Anonymous sessions are keyed against a unique UUID, and stored on the
- browser within an HTTP cookie. This method is similar to that used by most
- application servers to store session information.</p>
-
- <p>To create a simple anonymous session and store it in a postgres database
- table called <var>apachesession</var>, and save the session ID in a cookie
- called <var>session</var>, configure the session as follows:</p>
-
- <div class="example"><h3>SQL based anonymous session</h3><pre class="prettyprint lang-config">Session On
-SessionDBDCookieName session path=/</pre>
-</div>
-
- <p>For more examples on how the session can be configured to be read
- from and written to by a CGI application, see the
- <code class="module"><a href="../mod/mod_session.html">mod_session</a></code> examples section.</p>
-
- <p>For documentation on how the session can be used to store username
- and password details, see the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> module.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="peruser" id="peruser">Per User Sessions</a></h2>
-
- <p>Per user sessions are keyed against the username of a successfully
- authenticated user. It offers the most privacy, as no external handle
- to the session exists outside of the authenticated realm.</p>
-
- <p>Per user sessions work within a correctly configured authenticated
- environment, be that using basic authentication, digest authentication
- or SSL client certificates. Due to the limitations of who came first,
- the chicken or the egg, per user sessions cannot be used to store
- authentication credentials from a module like
- <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>.</p>
-
- <p>To create a simple per user session and store it in a postgres database
- table called <var>apachesession</var>, and with the session keyed to the
- userid, configure the session as follows:</p>
-
- <div class="example"><h3>SQL based per user session</h3><pre class="prettyprint lang-config">Session On
-SessionDBDPerUser On</pre>
-</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="housekeeping" id="housekeeping">Database Housekeeping</a></h2>
- <p>Over the course of time, the database can be expected to start accumulating
- expired sessions. At this point, the <code class="module"><a href="../mod/mod_session_dbd.html">mod_session_dbd</a></code> module
- is not yet able to handle session expiry automatically.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>The administrator will need to set up an external process via cron to clean
- out expired sessions.</p>
- </div>
-
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SessionDBDCookieName" id="SessionDBDCookieName">SessionDBDCookieName</a> <a name="sessiondbdcookiename" id="sessiondbdcookiename">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name and attributes for the RFC2109 cookie storing the session ID</td></tr>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="dbdconfig" id="dbdconfig">DBD Configuration</a></h2>
+
+ <p>Before the <code class="module"><a href="../mod/mod_session_dbd.html">mod_session_dbd</a></code> module can be configured to maintain a
+ session, the <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> module must be configured to make the various database queries
+ available to the server.</p>
+
+ <p>There are four queries required to keep a session maintained, to select an existing session,
+ to update an existing session, to insert a new session, and to delete an expired or empty
+ session. These queries are configured as per the example below.</p>
+
+ <div class="example"><h3>Sample DBD configuration</h3><pre class="prettyprint lang-config">DBDriver pgsql
+DBDParams "dbname=apachesession user=apache password=xxxxx host=localhost"
+DBDPrepareSQL "delete from session where key = %s" deletesession
+DBDPrepareSQL "update session set value = %s, expiry = %lld, key = %s where key = %s" updatesession
+DBDPrepareSQL "insert into session (value, expiry, key) values (%s, %lld, %s)" insertsession
+DBDPrepareSQL "select value from session where key = %s and (expiry = 0 or expiry > %lld)" selectsession
+DBDPrepareSQL "delete from session where expiry != 0 and expiry < %lld" cleansession</pre>
+</div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="anonymous" id="anonymous">Anonymous Sessions</a></h2>
+
+ <p>Anonymous sessions are keyed against a unique UUID, and stored on the
+ browser within an HTTP cookie. This method is similar to that used by most
+ application servers to store session information.</p>
+
+ <p>To create a simple anonymous session and store it in a postgres database
+ table called <var>apachesession</var>, and save the session ID in a cookie
+ called <var>session</var>, configure the session as follows:</p>
+
+ <div class="example"><h3>SQL based anonymous session</h3><pre class="prettyprint lang-config">Session On
+SessionDBDCookieName session path=/</pre>
+</div>
+
+ <p>For more examples on how the session can be configured to be read
+ from and written to by a CGI application, see the
+ <code class="module"><a href="../mod/mod_session.html">mod_session</a></code> examples section.</p>
+
+ <p>For documentation on how the session can be used to store username
+ and password details, see the <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code> module.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="peruser" id="peruser">Per User Sessions</a></h2>
+
+ <p>Per user sessions are keyed against the username of a successfully
+ authenticated user. It offers the most privacy, as no external handle
+ to the session exists outside of the authenticated realm.</p>
+
+ <p>Per user sessions work within a correctly configured authenticated
+ environment, be that using basic authentication, digest authentication
+ or SSL client certificates. Due to the limitations of who came first,
+ the chicken or the egg, per user sessions cannot be used to store
+ authentication credentials from a module like
+ <code class="module"><a href="../mod/mod_auth_form.html">mod_auth_form</a></code>.</p>
+
+ <p>To create a simple per user session and store it in a postgres database
+ table called <var>apachesession</var>, and with the session keyed to the
+ userid, configure the session as follows:</p>
+
+ <div class="example"><h3>SQL based per user session</h3><pre class="prettyprint lang-config">Session On
+SessionDBDPerUser On</pre>
+</div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="housekeeping" id="housekeeping">Database Housekeeping</a></h2>
+ <p>Over the course of time, the database can be expected to start accumulating
+ expired sessions. At this point, the <code class="module"><a href="../mod/mod_session_dbd.html">mod_session_dbd</a></code> module
+ is not yet able to handle session expiry automatically.</p>
+
+ <div class="warning"><h3>Warning</h3>
+ <p>The administrator will need to set up an external process via cron to clean
+ out expired sessions.</p>
+ </div>
+
+ </div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_session_dbd.html" title="English"> en </a></p>
<ul class="seealso">
<li><a href="../env.html">Environment Variables in Apache HTTP Server</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">Directive</a></h2>
<table class="directive">
combination.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_setenvif.html" title="English"> en </a> |
<li><a href="../env.html">Les variables d'environnement et le
serveur HTTP Apache</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="browsermatch" id="browsermatch">Directive</a> <a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a></h2>
<table class="directive">
combinaison des mêmes caractères, sans tenir compte de la casse.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><a href="../env.html">Apache の環境変数</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">ディレクティブ</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><a href="../env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">Áö½Ã¾î</a></h2>
<table class="directive">
<code>site</code> ȯ°æº¯¼ö¸¦ "<code>apache</code>"·Î ¼³Á¤ÇÑ´Ù.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><a href="../env.html">Apache HTTP Sunucusundaki Ortam Değişkenleri</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">Yönergesi</a></h2>
<table class="directive">
"<code>example</code>" değeri atanmaktadır.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#windows">Creating Loadable Modules for Windows</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Link in the named object file or library</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
+</table>
+
+ <p>The LoadFile directive links in the named object files or
+ libraries when the server is started or restarted; this is used
+ to load additional code which may be required for some module
+ to work. <em>Filename</em> is either an absolute path or
+ relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
+
+ <p>For example:</p>
+
+ <pre class="prettyprint lang-config">LoadFile libexec/libxmlparse.so</pre>
+
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Links in the object file or library, and adds to the list
+of active modules</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
+</table>
+ <p>The LoadModule directive links in the object file or library
+ <em>filename</em> and adds the module structure named
+ <em>module</em> to the list of active modules. <em>Module</em>
+ is the name of the external variable of type
+ <code>module</code> in the file, and is listed as the <a href="module-dict.html#ModuleIdentifier">Module Identifier</a>
+ in the module documentation. Example:</p>
+
+ <pre class="prettyprint lang-config">LoadModule status_module modules/mod_status.so</pre>
+
+
+ <p>loads the named module from the modules subdirectory of the
+ ServerRoot.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="windows" id="windows">Creating Loadable Modules for Windows</a></h2>
root, and use the <code class="directive">LoadModule</code>
directive to load it.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Link in the named object file or library</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>The LoadFile directive links in the named object files or
- libraries when the server is started or restarted; this is used
- to load additional code which may be required for some module
- to work. <em>Filename</em> is either an absolute path or
- relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
-
- <p>For example:</p>
-
- <pre class="prettyprint lang-config">LoadFile libexec/libxmlparse.so</pre>
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Links in the object file or library, and adds to the list
-of active modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
-</table>
- <p>The LoadModule directive links in the object file or library
- <em>filename</em> and adds the module structure named
- <em>module</em> to the list of active modules. <em>Module</em>
- is the name of the external variable of type
- <code>module</code> in the file, and is listed as the <a href="module-dict.html#ModuleIdentifier">Module Identifier</a>
- in the module documentation. Example:</p>
-
- <pre class="prettyprint lang-config">LoadModule status_module modules/mod_status.so</pre>
-
-
- <p>loads the named module from the modules subdirectory of the
- ServerRoot.</p>
-
</div>
</div>
<div class="bottomlang">
Windows</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="loadfile" id="loadfile">Directive</a> <a name="LoadFile" id="LoadFile">LoadFile</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Liaison du fichier objet ou de la bibliothèque
+spécifié</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LoadFile <em>nom-fichier</em> [<em>nom-fichier</em>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
+</table>
+
+ <p>La directive LoadFile permet de lier le fichier objet ou la
+ bibliothèque spécifié au serveur lors du démarrage ou du redémarrage
+ de ce dernier ; ceci permet d'ajouter tout code additionnel
+ nécessaire au fonctionnement d'un module.
+ <em>nom-fichier</em> est soit un chemin absolu, soit un chemin
+ relatif au répertoire défini par la directive <a href="core.html#serverroot">ServerRoot</a>.</p>
+
+ <p>Par exemple:</p>
+
+ <pre class="prettyprint lang-config">LoadFile libexec/libxmlparse.so</pre>
+
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="loadmodule" id="loadmodule">Directive</a> <a name="LoadModule" id="LoadModule">LoadModule</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Liaison avec le serveur du fichier objet ou de la
+bibliothèque spécifié, et ajout de ce dernier à la liste des modules
+actifs</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LoadModule <em>module nom-fichier</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
+<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
+</table>
+ <p>La directive LoadModule permet de lier le fichier objet ou la
+ bibliothèque <em>nom-fichier</em> avec le serveur, et d'ajouter la
+ structure de module nommée <em>module</em> à la liste des modules
+ actifs. <em>module</em> est le nom de la variable externe de type
+ <code>module</code> dans le fichier, et est référencé comme <a href="module-dict.html#ModuleIdentifier">Identificateur de
+ module</a> dans la documentation des modules. Exemple :</p>
+
+ <pre class="prettyprint lang-config">LoadModule status_module modules/mod_status.so</pre>
+
+
+ <p>charge le module spécifié depuis le sous-répertoire des modules
+ situé à la racine du serveur.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="windows" id="windows">Création de modules chargeables pour
Windows</a></h2>
<code>modules</code> à la racine de votre serveur, et d'utiliser la
directive <code class="directive">LoadModule</code> pour la charger.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="loadfile" id="loadfile">Directive</a> <a name="LoadFile" id="LoadFile">LoadFile</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Liaison du fichier objet ou de la bibliothèque
-spécifié</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LoadFile <em>nom-fichier</em> [<em>nom-fichier</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>La directive LoadFile permet de lier le fichier objet ou la
- bibliothèque spécifié au serveur lors du démarrage ou du redémarrage
- de ce dernier ; ceci permet d'ajouter tout code additionnel
- nécessaire au fonctionnement d'un module.
- <em>nom-fichier</em> est soit un chemin absolu, soit un chemin
- relatif au répertoire défini par la directive <a href="core.html#serverroot">ServerRoot</a>.</p>
-
- <p>Par exemple:</p>
-
- <pre class="prettyprint lang-config">LoadFile libexec/libxmlparse.so</pre>
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="loadmodule" id="loadmodule">Directive</a> <a name="LoadModule" id="LoadModule">LoadModule</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Liaison avec le serveur du fichier objet ou de la
-bibliothèque spécifié, et ajout de ce dernier à la liste des modules
-actifs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LoadModule <em>module nom-fichier</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
-<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
-</table>
- <p>La directive LoadModule permet de lier le fichier objet ou la
- bibliothèque <em>nom-fichier</em> avec le serveur, et d'ajouter la
- structure de module nommée <em>module</em> à la liste des modules
- actifs. <em>module</em> est le nom de la variable externe de type
- <code>module</code> dans le fichier, et est référencé comme <a href="module-dict.html#ModuleIdentifier">Identificateur de
- module</a> dans la documentation des modules. Exemple :</p>
-
- <pre class="prettyprint lang-config">LoadModule status_module modules/mod_status.so</pre>
-
-
- <p>charge le module spécifié depuis le sous-répertoire des modules
- situé à la racine du serveur.</p>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> Windows 用のロード可能なモジュールを作成する</li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>指定されたオブジェクトファイルやライブラリをリンクする</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_so</td></tr>
+</table>
+
+ <p>LoadFile ディレクティブは、サーバが起動されたときや再起動されたときに、
+ 指定されたオブジェクトファイルやライブラリをリンクします。
+ これはモジュールが動作するために必要になるかもしれない追加の
+ コードを読み込むために使用されます。<em>Filename</em> は絶対パスか、<a href="core.html#serverroot">ServerRoot</a> からの相対パスです。</p>
+
+ <p>例:</p>
+
+ <pre class="prettyprint lang-config">LoadFile libexec/libxmlparse.so</pre>
+
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">ディレクティブ</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>オブジェクトファイルやライブラリをリンクし、使用モジュールの
+リストに追加する</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
+<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_so</td></tr>
+</table>
+
+ <p>LoadModule ディレクティブは <em>filename</em>
+ というオブジェクトファイルおよびライブラリをリンクし、<em>module</em>
+ という名前のモジュールの構造をアクティブなモジュールのリストに追加します。
+ <em>Module</em> はファイル中の <code>module</code>
+ 型の外部変数の名前で、モジュールのドキュメントに
+ <a href="module-dict.html#moduleidentifier">モジュール識別子</a>として書かれているものです。例 :</p>
+
+ <pre class="prettyprint lang-config">LoadModule status_module modules/mod_status.so</pre>
+
+
+ <p>これは ServerRoot の modules サブディレクトリから指定された名前の
+ モジュールをロードします。</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2>Windows 用のロード可能なモジュールを作成する</h2>
<code><code class="directive">LoadModule</code></code>
ディレクティブを使って読み込んでください。</p>
</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>指定されたオブジェクトファイルやライブラリをリンクする</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>LoadFile ディレクティブは、サーバが起動されたときや再起動されたときに、
- 指定されたオブジェクトファイルやライブラリをリンクします。
- これはモジュールが動作するために必要になるかもしれない追加の
- コードを読み込むために使用されます。<em>Filename</em> は絶対パスか、<a href="core.html#serverroot">ServerRoot</a> からの相対パスです。</p>
-
- <p>例:</p>
-
- <pre class="prettyprint lang-config">LoadFile libexec/libxmlparse.so</pre>
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">ディレクティブ</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>オブジェクトファイルやライブラリをリンクし、使用モジュールの
-リストに追加する</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
-<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>LoadModule ディレクティブは <em>filename</em>
- というオブジェクトファイルおよびライブラリをリンクし、<em>module</em>
- という名前のモジュールの構造をアクティブなモジュールのリストに追加します。
- <em>Module</em> はファイル中の <code>module</code>
- 型の外部変数の名前で、モジュールのドキュメントに
- <a href="module-dict.html#moduleidentifier">モジュール識別子</a>として書かれているものです。例 :</p>
-
- <pre class="prettyprint lang-config">LoadModule status_module modules/mod_status.so</pre>
-
-
- <p>これは ServerRoot の modules サブディレクトリから指定された名前の
- モジュールをロードします。</p>
-
-</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_so.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#windows">À©µµ¿ìÁî¿¡¼ ÀоîµéÀÏ ¸ðµâ ¸¸µé±â</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÁöÁ¤ÇÑ ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_so</td></tr>
+</table>
+
+ <p>LoadFile Áö½Ã¾î´Â ¼¹ö°¡ ½ÃÀÛÇϰųª Àç½ÃÀÛÇÒ¶§ ÁöÁ¤ÇÑ
+ ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ(link in). ÀÌ Áö½Ã¾î´Â
+ ¾î¶² ¸ðµâÀÌ µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ Äڵ带 Ãß°¡·Î ÀоîµéÀ϶§
+ »ç¿ëÇÑ´Ù. <em>Filename</em>Àº Àý´ë°æ·ÎÀ̰ųª <a href="core.html#serverroot">ServerRoot</a>¿¡ ´ëÇÑ »ó´ë°æ·ÎÀÌ´Ù.</p>
+
+ <p>¿¹¸¦ µé¾î:</p>
+
+ <div class="example"><p><code>LoadFile libexec/libxmlparse.so</code></p></div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ
+¸ðµâ ¸ñ·Ï¿¡ Ãß°¡ÇÑ´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
+<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_so</td></tr>
+</table>
+ <p>LoadModule Áö½Ã¾î´Â ¸ñÀûÆÄÀÏ È¤Àº ¶óÀ̺귯¸® <em>filename</em>À»
+ ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ ¸ðµâ ¸ñ·Ï¿¡ <em>module</em>À̶ó´Â
+ ¸ðµâ ±¸Á¶Ã¼¸¦ Ãß°¡ÇÑ´Ù. <em>Module</em>Àº ÆÄÀÏÀÇ
+ <code>module</code> ÀÚ·áÇü ¿ÜºÎº¯¼ö¸íÀ̸ç, ¸ðµâ ¹®¼ÀÇ <a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í</a>¿¡
+ ³ª¿Â´Ù. ¿¹¸¦ µé¸é:</p>
+
+ <div class="example"><p><code>
+ LoadModule status_module modules/mod_status.so
+ </code></p></div>
+
+ <p>ServerRootÀÇ modules ÇÏÀ§µð·ºÅ丮¿¡¼ ÁöÁ¤ÇÑ ¸ðµâÀ» ÀоîµéÀδÙ.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="windows" id="windows">À©µµ¿ìÁî¿¡¼ ÀоîµéÀÏ ¸ðµâ ¸¸µé±â</a></h2>
<code>modules</code> µð·ºÅ丮¿¡ µÎ°í,
<code class="directive">LoadModule</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÀоîµéÀδÙ.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÁöÁ¤ÇÑ ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>LoadFile Áö½Ã¾î´Â ¼¹ö°¡ ½ÃÀÛÇϰųª Àç½ÃÀÛÇÒ¶§ ÁöÁ¤ÇÑ
- ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ(link in). ÀÌ Áö½Ã¾î´Â
- ¾î¶² ¸ðµâÀÌ µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ Äڵ带 Ãß°¡·Î ÀоîµéÀ϶§
- »ç¿ëÇÑ´Ù. <em>Filename</em>Àº Àý´ë°æ·ÎÀ̰ųª <a href="core.html#serverroot">ServerRoot</a>¿¡ ´ëÇÑ »ó´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î:</p>
-
- <div class="example"><p><code>LoadFile libexec/libxmlparse.so</code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ
-¸ðµâ ¸ñ·Ï¿¡ Ãß°¡ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_so</td></tr>
-</table>
- <p>LoadModule Áö½Ã¾î´Â ¸ñÀûÆÄÀÏ È¤Àº ¶óÀ̺귯¸® <em>filename</em>À»
- ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ ¸ðµâ ¸ñ·Ï¿¡ <em>module</em>À̶ó´Â
- ¸ðµâ ±¸Á¶Ã¼¸¦ Ãß°¡ÇÑ´Ù. <em>Module</em>Àº ÆÄÀÏÀÇ
- <code>module</code> ÀÚ·áÇü ¿ÜºÎº¯¼ö¸íÀ̸ç, ¸ðµâ ¹®¼ÀÇ <a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í</a>¿¡
- ³ª¿Â´Ù. ¿¹¸¦ µé¸é:</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/mod_status.so
- </code></p></div>
-
- <p>ServerRootÀÇ modules ÇÏÀ§µð·ºÅ丮¿¡¼ ÁöÁ¤ÇÑ ¸ðµâÀ» ÀоîµéÀδÙ.</p>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#windows">Yüklenebilir Modüllerin Windows için Oluşturulması</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Belirtilen nesne dosyasını veya kütüphaneyi sunucu ile ilintiler.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LoadFile <em>dosya-ismi</em> [<em>dosya-ismi</em>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_so</td></tr>
+</table>
+
+ <p><code class="directive">LoadFile</code> yönergesi ismi belirtilen kütüphaneleri
+ veya nesne dosyalarını sunucu başlatılırken veya yeniden başlatılırken
+ sunucu ile ilintiler. Yönerge, bazı modüllerin çalışması sırasında
+ gereken ek kodların yüklenmesi için kullanılır.
+ <code><em>dosya-ismi</em></code> olarak mutlak bir dosya yolu
+ belirtilebileceği gibi <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>’a
+ göreli bir dosya yolu da belirtilebilir.</p>
+
+ <p>Örnek:</p>
+
+ <div class="example"><p><code>LoadFile libexec/libxmlparse.so</code></p></div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Belirtilen nesne dosyasını veya kütüphaneyi sunucu ile ilintiler
+ve etkin modül listesine ekler.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LoadModule <em>modül dosya-ismi</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_so</td></tr>
+</table>
+ <p><code class="directive">LoadModule</code> yönergesi
+ <code><em>dosya-ismi</em></code> ile belirtilen nesne dosyasını veya
+ kütüphaneyi sunucu ile ilintiler ve etkin modül listesine belirtilen
+ <code><em>modül</em></code> ismiyle ekler. <code><em>modül</em></code>,
+ modülün kaynak dosyasında <code>module</code> türündeki tek harici
+ değişkenin ismi olup modül belgelerinde <a href="module-dict.html#ModuleIdentifier">Modül Betimleyici</a> olarak
+ geçer. Örneğin,</p>
+
+ <div class="example"><p><code>
+ LoadModule status_module modules/mod_status.so
+ </code></p></div>
+
+ <p>satırı ile ismi belirtilen dosya <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> dizini altındaki
+ <code>modules</code> alt dizininden yüklenir.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="windows" id="windows">Yüklenebilir Modüllerin Windows için Oluşturulması</a></h2>
sonra <code class="directive">LoadModule</code> yönergesi ile sunucunuza
yükleyebilirsiniz.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Belirtilen nesne dosyasını veya kütüphaneyi sunucu ile ilintiler.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LoadFile <em>dosya-ismi</em> [<em>dosya-ismi</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_so</td></tr>
-</table>
-
- <p><code class="directive">LoadFile</code> yönergesi ismi belirtilen kütüphaneleri
- veya nesne dosyalarını sunucu başlatılırken veya yeniden başlatılırken
- sunucu ile ilintiler. Yönerge, bazı modüllerin çalışması sırasında
- gereken ek kodların yüklenmesi için kullanılır.
- <code><em>dosya-ismi</em></code> olarak mutlak bir dosya yolu
- belirtilebileceği gibi <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>’a
- göreli bir dosya yolu da belirtilebilir.</p>
-
- <p>Örnek:</p>
-
- <div class="example"><p><code>LoadFile libexec/libxmlparse.so</code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Belirtilen nesne dosyasını veya kütüphaneyi sunucu ile ilintiler
-ve etkin modül listesine ekler.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>LoadModule <em>modül dosya-ismi</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_so</td></tr>
-</table>
- <p><code class="directive">LoadModule</code> yönergesi
- <code><em>dosya-ismi</em></code> ile belirtilen nesne dosyasını veya
- kütüphaneyi sunucu ile ilintiler ve etkin modül listesine belirtilen
- <code><em>modül</em></code> ismiyle ekler. <code><em>modül</em></code>,
- modülün kaynak dosyasında <code>module</code> türündeki tek harici
- değişkenin ismi olup modül belgelerinde <a href="module-dict.html#ModuleIdentifier">Modül Betimleyici</a> olarak
- geçer. Örneğin,</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/mod_status.so
- </code></p></div>
-
- <p>satırı ile ismi belirtilen dosya <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> dizini altındaki
- <code>modules</code> alt dizininden yüklenir.</p>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#checkspelling">CheckSpelling</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CheckBasenameMatch" id="CheckBasenameMatch">CheckBasenameMatch</a> <a name="checkbasenamematch" id="checkbasenamematch">Directive</a></h2>
<table class="directive">
</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_speling.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#checkspelling">CheckSpelling</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CheckBasenameMatch" id="CheckBasenameMatch">CheckBasenameMatch</a> <a name="checkbasenamematch" id="checkbasenamematch">ディレクティブ</a></h2>
<table class="directive">
期待とは違う挙動になるからです。</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_speling.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#checkspelling">CheckSpelling</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CheckBasenameMatch" id="CheckBasenameMatch">CheckBasenameMatch</a> <a name="checkbasenamematch" id="checkbasenamematch">Áö½Ã¾î</a></h2>
<table class="directive">
</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_speling.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#authzproviders">Authorization providers for use with Require</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="envvars" id="envvars">Environment Variables</a></h2>
-
-<p>This module can be configured to provide several items of SSL information
-as additional environment variables to the SSI and CGI namespace. This
-information is not provided by default for performance reasons. (See
-<code class="directive">SSLOptions</code> StdEnvVars, below.) The generated variables
-are listed in the table below. For backward compatibility the information can
-be made available under different names, too. Look in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details on the
-compatibility variables.</p>
-
-<table class="bordered">
-
-<tr>
- <th><a name="table3">Variable Name:</a></th>
- <th>Value Type:</th>
- <th>Description:</th>
-</tr>
-<tr><td><code>HTTPS</code></td> <td>flag</td> <td>HTTPS is being used.</td></tr>
-<tr><td><code>SSL_PROTOCOL</code></td> <td>string</td> <td>The SSL protocol version (SSLv3, TLSv1, TLSv1.1, TLSv1.2)</td></tr>
-<tr><td><code>SSL_SESSION_ID</code></td> <td>string</td> <td>The hex-encoded SSL session id</td></tr>
-<tr><td><code>SSL_SESSION_RESUMED</code></td> <td>string</td> <td>Initial or Resumed SSL Session. Note: multiple requests may be served over the same (Initial or Resumed) SSL session if HTTP KeepAlive is in use</td></tr>
-<tr><td><code>SSL_SECURE_RENEG</code></td> <td>string</td> <td><code>true</code> if secure renegotiation is supported, else <code>false</code></td></tr>
-<tr><td><code>SSL_CIPHER</code></td> <td>string</td> <td>The cipher specification name</td></tr>
-<tr><td><code>SSL_CIPHER_EXPORT</code></td> <td>string</td> <td><code>true</code> if cipher is an export cipher</td></tr>
-<tr><td><code>SSL_CIPHER_USEKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (actually used)</td></tr>
-<tr><td><code>SSL_CIPHER_ALGKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (possible)</td></tr>
-<tr><td><code>SSL_COMPRESS_METHOD</code></td> <td>string</td> <td>SSL compression method negotiated</td></tr>
-<tr><td><code>SSL_VERSION_INTERFACE</code></td> <td>string</td> <td>The mod_ssl program version</td></tr>
-<tr><td><code>SSL_VERSION_LIBRARY</code></td> <td>string</td> <td>The OpenSSL program version</td></tr>
-<tr><td><code>SSL_CLIENT_M_VERSION</code></td> <td>string</td> <td>The version of the client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_M_SERIAL</code></td> <td>string</td> <td>The serial of the client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_S_DN</code></td> <td>string</td> <td>Subject DN in client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Subject DN</td></tr>
-<tr><td><code>SSL_CLIENT_SAN_Email_</code><em>n</em></td> <td>string</td> <td>Client certificate's subjectAltName extension entries of type rfc822Name</td></tr>
-<tr><td><code>SSL_CLIENT_SAN_DNS_</code><em>n</em></td> <td>string</td> <td>Client certificate's subjectAltName extension entries of type dNSName</td></tr>
-<tr><td><code>SSL_CLIENT_I_DN</code></td> <td>string</td> <td>Issuer DN of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Issuer DN</td></tr>
-<tr><td><code>SSL_CLIENT_V_START</code></td> <td>string</td> <td>Validity of client's certificate (start time)</td></tr>
-<tr><td><code>SSL_CLIENT_V_END</code></td> <td>string</td> <td>Validity of client's certificate (end time)</td></tr>
-<tr><td><code>SSL_CLIENT_V_REMAIN</code></td> <td>string</td> <td>Number of days until client's certificate expires</td></tr>
-<tr><td><code>SSL_CLIENT_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_CERT</code></td> <td>string</td> <td>PEM-encoded client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_CHAIN_</code><em>n</em></td> <td>string</td> <td>PEM-encoded certificates in client certificate chain</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_RFC4523_CEA</code></td> <td>string</td> <td>Serial number and issuer of the certificate. The format matches that of the CertificateExactAssertion in RFC4523</td></tr>
-<tr><td><code>SSL_CLIENT_VERIFY</code></td> <td>string</td> <td><code>NONE</code>, <code>SUCCESS</code>, <code>GENEROUS</code> or <code>FAILED:</code><em>reason</em></td></tr>
-<tr><td><code>SSL_SERVER_M_VERSION</code></td> <td>string</td> <td>The version of the server certificate</td></tr>
-<tr><td><code>SSL_SERVER_M_SERIAL</code></td> <td>string</td> <td>The serial of the server certificate</td></tr>
-<tr><td><code>SSL_SERVER_S_DN</code></td> <td>string</td> <td>Subject DN in server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_SAN_Email_</code><em>n</em></td> <td>string</td> <td>Server certificate's subjectAltName extension entries of type rfc822Name</td></tr>
-<tr><td><code>SSL_SERVER_SAN_DNS_</code><em>n</em></td> <td>string</td> <td>Server certificate's subjectAltName extension entries of type dNSName</td></tr>
-<tr><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Subject DN</td></tr>
-<tr><td><code>SSL_SERVER_I_DN</code></td> <td>string</td> <td>Issuer DN of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Issuer DN</td></tr>
-<tr><td><code>SSL_SERVER_V_START</code></td> <td>string</td> <td>Validity of server's certificate (start time)</td></tr>
-<tr><td><code>SSL_SERVER_V_END</code></td> <td>string</td> <td>Validity of server's certificate (end time)</td></tr>
-<tr><td><code>SSL_SERVER_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_CERT</code></td> <td>string</td> <td>PEM-encoded server certificate</td></tr>
-<tr><td><code>SSL_SRP_USER</code></td> <td>string</td> <td>SRP username</td></tr>
-<tr><td><code>SSL_SRP_USERINFO</code></td> <td>string</td> <td>SRP user info</td></tr>
-<tr><td><code>SSL_TLS_SNI</code></td> <td>string</td> <td>Contents of the SNI TLS extension (if supplied with ClientHello)</td></tr>
-</table>
-
-<p><em>x509</em> specifies a component of an X.509 DN; one of
-<code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code>. In Apache 2.1 and
-later, <em>x509</em> may also include a numeric <code>_n</code>
-suffix. If the DN in question contains multiple attributes of the
-same name, this suffix is used as a zero-based index to select a
-particular attribute. For example, where the server certificate
-subject DN included two OU attributes, <code>SSL_SERVER_S_DN_OU_0</code>
-and
-<code>SSL_SERVER_S_DN_OU_1</code> could be used to reference each. A
-variable name without a <code>_n</code> suffix is equivalent to that
-name with a <code>_0</code> suffix; the first (or only) attribute.
-When the environment table is populated using
-the <code>StdEnvVars</code> option of
-the <code class="directive"><a href="#ssloptions">SSLOptions</a></code> directive, the
-first (or only) attribute of any DN is added only under a non-suffixed
-name; i.e. no <code>_0</code> suffixed entries are added.</p>
-
-<p>The format of the <em>*_DN</em> variables has changed in Apache HTTPD
-2.3.11. See the <code>LegacyDNStringFormat</code> option for
-<code class="directive"><a href="#ssloptions">SSLOptions</a></code> for details.</p>
-
-<p><code>SSL_CLIENT_V_REMAIN</code> is only available in version 2.1
-and later.</p>
-
-<p>A number of additional environment variables can also be used
-in <code class="directive">SSLRequire</code> expressions, or in custom log
-formats:</p>
-
-<div class="note"><pre>HTTP_USER_AGENT PATH_INFO AUTH_TYPE
-HTTP_REFERER QUERY_STRING SERVER_SOFTWARE
-HTTP_COOKIE REMOTE_HOST API_VERSION
-HTTP_FORWARDED REMOTE_IDENT TIME_YEAR
-HTTP_HOST IS_SUBREQ TIME_MON
-HTTP_PROXY_CONNECTION DOCUMENT_ROOT TIME_DAY
-HTTP_ACCEPT SERVER_ADMIN TIME_HOUR
-THE_REQUEST SERVER_NAME TIME_MIN
-REQUEST_FILENAME SERVER_PORT TIME_SEC
-REQUEST_METHOD SERVER_PROTOCOL TIME_WDAY
-REQUEST_SCHEME REMOTE_ADDR TIME
-REQUEST_URI REMOTE_USER</pre></div>
-
-<p>In these contexts, two special formats can also be used:</p>
-
-<dl>
- <dt><code>ENV:<em>variablename</em></code></dt>
- <dd>This will expand to the standard environment
- variable <em>variablename</em>.</dd>
-
- <dt><code>HTTP:<em>headername</em></code></dt>
- <dd>This will expand to the value of the request header with name
- <em>headername</em>.</dd>
-</dl>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logformats" id="logformats">Custom Log Formats</a></h2>
-
-<p>When <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is built into Apache or at least
-loaded (under DSO situation) additional functions exist for the <a href="mod_log_config.html#formats">Custom Log Format</a> of
-<code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>. First there is an
-additional ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables
-provided by any module, especially those provided by mod_ssl which can
-you find in the above table.</p>
-<p>
-For backward compatibility there is additionally a special
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-provided. Information about this function is provided in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter.</p>
-<div class="example"><h3>Example</h3><pre class="prettyprint lang-config">CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"</pre>
-</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="notes" id="notes">Request Notes</a></h2>
-
-<p><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> sets "notes" for the request which can be
-used in logging with the <code>%{<em>name</em>}n</code> format
-string in <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>.</p>
-
-<p>The notes supported are as follows:</p>
-
-<dl>
- <dt><code>ssl-access-forbidden</code></dt>
- <dd>This note is set to the value <code>1</code> if access was
- denied due to an <code class="directive">SSLRequire</code>
- or <code class="directive">SSLRequireSSL</code> directive.</dd>
-
- <dt><code>ssl-secure-reneg</code></dt>
- <dd>If <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is built against a version of
- OpenSSL which supports the secure renegotiation extension, this note
- is set to the value <code>1</code> if SSL is in used for the current
- connection, and the client also supports the secure renegotiation
- extension. If the client does not support the secure renegotiation
- extension, the note is set to the value <code>0</code>.
- If <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is not built against a version of
- OpenSSL which supports secure renegotiation, or if SSL is not in use
- for the current connection, the note is not set.</dd>
-</dl>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="authzproviders" id="authzproviders">Authorization providers for use with Require</a></h2>
-
- <p><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> provides a few authentication providers for use
- with <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>'s
- <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive.</p>
-
- <h3><a name="reqssl" id="reqssl">Require ssl</a></h3>
-
- <p>The <code>ssl</code> provider denies access if a connection is not
- encrypted with SSL. This is similar to the
- <code class="directive">SSLRequireSSL</code> directive.</p>
-
- <pre class="prettyprint lang-config">Require ssl</pre>
-
-
-
-
- <h3><a name="reqverifyclient" id="reqverifyclient">Require ssl-verify-client</a></h3>
-
- <p>The <code>ssl</code> provider allows access if the user is
- authenticated with a valid client certificate. This is only
- useful if <code>SSLVerifyClient optional</code> is in effect.</p>
-
- <p>The following example grants access if the user is authenticated
- either with a client certificate or by username and password.</p>
-
- <pre class="prettyprint lang-config"> Require ssl-verify-client<br />
- Require valid-user</pre>
-
-
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SSLCACertificateFile" id="SSLCACertificateFile">SSLCACertificateFile</a> <a name="sslcacertificatefile" id="sslcacertificatefile">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File of concatenated PEM-encoded CA Certificates
<div class="example"><h3>Example</h3><pre class="prettyprint lang-config">SSLVerifyDepth 10</pre>
</div>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="envvars" id="envvars">Environment Variables</a></h2>
+
+<p>This module can be configured to provide several items of SSL information
+as additional environment variables to the SSI and CGI namespace. This
+information is not provided by default for performance reasons. (See
+<code class="directive">SSLOptions</code> StdEnvVars, below.) The generated variables
+are listed in the table below. For backward compatibility the information can
+be made available under different names, too. Look in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details on the
+compatibility variables.</p>
+
+<table class="bordered">
+
+<tr>
+ <th><a name="table3">Variable Name:</a></th>
+ <th>Value Type:</th>
+ <th>Description:</th>
+</tr>
+<tr><td><code>HTTPS</code></td> <td>flag</td> <td>HTTPS is being used.</td></tr>
+<tr><td><code>SSL_PROTOCOL</code></td> <td>string</td> <td>The SSL protocol version (SSLv3, TLSv1, TLSv1.1, TLSv1.2)</td></tr>
+<tr><td><code>SSL_SESSION_ID</code></td> <td>string</td> <td>The hex-encoded SSL session id</td></tr>
+<tr><td><code>SSL_SESSION_RESUMED</code></td> <td>string</td> <td>Initial or Resumed SSL Session. Note: multiple requests may be served over the same (Initial or Resumed) SSL session if HTTP KeepAlive is in use</td></tr>
+<tr><td><code>SSL_SECURE_RENEG</code></td> <td>string</td> <td><code>true</code> if secure renegotiation is supported, else <code>false</code></td></tr>
+<tr><td><code>SSL_CIPHER</code></td> <td>string</td> <td>The cipher specification name</td></tr>
+<tr><td><code>SSL_CIPHER_EXPORT</code></td> <td>string</td> <td><code>true</code> if cipher is an export cipher</td></tr>
+<tr><td><code>SSL_CIPHER_USEKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (actually used)</td></tr>
+<tr><td><code>SSL_CIPHER_ALGKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (possible)</td></tr>
+<tr><td><code>SSL_COMPRESS_METHOD</code></td> <td>string</td> <td>SSL compression method negotiated</td></tr>
+<tr><td><code>SSL_VERSION_INTERFACE</code></td> <td>string</td> <td>The mod_ssl program version</td></tr>
+<tr><td><code>SSL_VERSION_LIBRARY</code></td> <td>string</td> <td>The OpenSSL program version</td></tr>
+<tr><td><code>SSL_CLIENT_M_VERSION</code></td> <td>string</td> <td>The version of the client certificate</td></tr>
+<tr><td><code>SSL_CLIENT_M_SERIAL</code></td> <td>string</td> <td>The serial of the client certificate</td></tr>
+<tr><td><code>SSL_CLIENT_S_DN</code></td> <td>string</td> <td>Subject DN in client's certificate</td></tr>
+<tr><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Subject DN</td></tr>
+<tr><td><code>SSL_CLIENT_SAN_Email_</code><em>n</em></td> <td>string</td> <td>Client certificate's subjectAltName extension entries of type rfc822Name</td></tr>
+<tr><td><code>SSL_CLIENT_SAN_DNS_</code><em>n</em></td> <td>string</td> <td>Client certificate's subjectAltName extension entries of type dNSName</td></tr>
+<tr><td><code>SSL_CLIENT_I_DN</code></td> <td>string</td> <td>Issuer DN of client's certificate</td></tr>
+<tr><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Issuer DN</td></tr>
+<tr><td><code>SSL_CLIENT_V_START</code></td> <td>string</td> <td>Validity of client's certificate (start time)</td></tr>
+<tr><td><code>SSL_CLIENT_V_END</code></td> <td>string</td> <td>Validity of client's certificate (end time)</td></tr>
+<tr><td><code>SSL_CLIENT_V_REMAIN</code></td> <td>string</td> <td>Number of days until client's certificate expires</td></tr>
+<tr><td><code>SSL_CLIENT_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of client's certificate</td></tr>
+<tr><td><code>SSL_CLIENT_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of client's certificate</td></tr>
+<tr><td><code>SSL_CLIENT_CERT</code></td> <td>string</td> <td>PEM-encoded client certificate</td></tr>
+<tr><td><code>SSL_CLIENT_CERT_CHAIN_</code><em>n</em></td> <td>string</td> <td>PEM-encoded certificates in client certificate chain</td></tr>
+<tr><td><code>SSL_CLIENT_CERT_RFC4523_CEA</code></td> <td>string</td> <td>Serial number and issuer of the certificate. The format matches that of the CertificateExactAssertion in RFC4523</td></tr>
+<tr><td><code>SSL_CLIENT_VERIFY</code></td> <td>string</td> <td><code>NONE</code>, <code>SUCCESS</code>, <code>GENEROUS</code> or <code>FAILED:</code><em>reason</em></td></tr>
+<tr><td><code>SSL_SERVER_M_VERSION</code></td> <td>string</td> <td>The version of the server certificate</td></tr>
+<tr><td><code>SSL_SERVER_M_SERIAL</code></td> <td>string</td> <td>The serial of the server certificate</td></tr>
+<tr><td><code>SSL_SERVER_S_DN</code></td> <td>string</td> <td>Subject DN in server's certificate</td></tr>
+<tr><td><code>SSL_SERVER_SAN_Email_</code><em>n</em></td> <td>string</td> <td>Server certificate's subjectAltName extension entries of type rfc822Name</td></tr>
+<tr><td><code>SSL_SERVER_SAN_DNS_</code><em>n</em></td> <td>string</td> <td>Server certificate's subjectAltName extension entries of type dNSName</td></tr>
+<tr><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Subject DN</td></tr>
+<tr><td><code>SSL_SERVER_I_DN</code></td> <td>string</td> <td>Issuer DN of server's certificate</td></tr>
+<tr><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Issuer DN</td></tr>
+<tr><td><code>SSL_SERVER_V_START</code></td> <td>string</td> <td>Validity of server's certificate (start time)</td></tr>
+<tr><td><code>SSL_SERVER_V_END</code></td> <td>string</td> <td>Validity of server's certificate (end time)</td></tr>
+<tr><td><code>SSL_SERVER_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of server's certificate</td></tr>
+<tr><td><code>SSL_SERVER_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of server's certificate</td></tr>
+<tr><td><code>SSL_SERVER_CERT</code></td> <td>string</td> <td>PEM-encoded server certificate</td></tr>
+<tr><td><code>SSL_SRP_USER</code></td> <td>string</td> <td>SRP username</td></tr>
+<tr><td><code>SSL_SRP_USERINFO</code></td> <td>string</td> <td>SRP user info</td></tr>
+<tr><td><code>SSL_TLS_SNI</code></td> <td>string</td> <td>Contents of the SNI TLS extension (if supplied with ClientHello)</td></tr>
+</table>
+
+<p><em>x509</em> specifies a component of an X.509 DN; one of
+<code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code>. In Apache 2.1 and
+later, <em>x509</em> may also include a numeric <code>_n</code>
+suffix. If the DN in question contains multiple attributes of the
+same name, this suffix is used as a zero-based index to select a
+particular attribute. For example, where the server certificate
+subject DN included two OU attributes, <code>SSL_SERVER_S_DN_OU_0</code>
+and
+<code>SSL_SERVER_S_DN_OU_1</code> could be used to reference each. A
+variable name without a <code>_n</code> suffix is equivalent to that
+name with a <code>_0</code> suffix; the first (or only) attribute.
+When the environment table is populated using
+the <code>StdEnvVars</code> option of
+the <code class="directive"><a href="#ssloptions">SSLOptions</a></code> directive, the
+first (or only) attribute of any DN is added only under a non-suffixed
+name; i.e. no <code>_0</code> suffixed entries are added.</p>
+
+<p>The format of the <em>*_DN</em> variables has changed in Apache HTTPD
+2.3.11. See the <code>LegacyDNStringFormat</code> option for
+<code class="directive"><a href="#ssloptions">SSLOptions</a></code> for details.</p>
+
+<p><code>SSL_CLIENT_V_REMAIN</code> is only available in version 2.1
+and later.</p>
+
+<p>A number of additional environment variables can also be used
+in <code class="directive">SSLRequire</code> expressions, or in custom log
+formats:</p>
+
+<div class="note"><pre>HTTP_USER_AGENT PATH_INFO AUTH_TYPE
+HTTP_REFERER QUERY_STRING SERVER_SOFTWARE
+HTTP_COOKIE REMOTE_HOST API_VERSION
+HTTP_FORWARDED REMOTE_IDENT TIME_YEAR
+HTTP_HOST IS_SUBREQ TIME_MON
+HTTP_PROXY_CONNECTION DOCUMENT_ROOT TIME_DAY
+HTTP_ACCEPT SERVER_ADMIN TIME_HOUR
+THE_REQUEST SERVER_NAME TIME_MIN
+REQUEST_FILENAME SERVER_PORT TIME_SEC
+REQUEST_METHOD SERVER_PROTOCOL TIME_WDAY
+REQUEST_SCHEME REMOTE_ADDR TIME
+REQUEST_URI REMOTE_USER</pre></div>
+
+<p>In these contexts, two special formats can also be used:</p>
+
+<dl>
+ <dt><code>ENV:<em>variablename</em></code></dt>
+ <dd>This will expand to the standard environment
+ variable <em>variablename</em>.</dd>
+
+ <dt><code>HTTP:<em>headername</em></code></dt>
+ <dd>This will expand to the value of the request header with name
+ <em>headername</em>.</dd>
+</dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logformats" id="logformats">Custom Log Formats</a></h2>
+
+<p>When <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is built into Apache or at least
+loaded (under DSO situation) additional functions exist for the <a href="mod_log_config.html#formats">Custom Log Format</a> of
+<code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>. First there is an
+additional ``<code>%{</code><em>varname</em><code>}x</code>''
+eXtension format function which can be used to expand any variables
+provided by any module, especially those provided by mod_ssl which can
+you find in the above table.</p>
+<p>
+For backward compatibility there is additionally a special
+``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
+provided. Information about this function is provided in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter.</p>
+<div class="example"><h3>Example</h3><pre class="prettyprint lang-config">CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"</pre>
+</div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="notes" id="notes">Request Notes</a></h2>
+
+<p><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> sets "notes" for the request which can be
+used in logging with the <code>%{<em>name</em>}n</code> format
+string in <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>.</p>
+
+<p>The notes supported are as follows:</p>
+
+<dl>
+ <dt><code>ssl-access-forbidden</code></dt>
+ <dd>This note is set to the value <code>1</code> if access was
+ denied due to an <code class="directive">SSLRequire</code>
+ or <code class="directive">SSLRequireSSL</code> directive.</dd>
+
+ <dt><code>ssl-secure-reneg</code></dt>
+ <dd>If <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is built against a version of
+ OpenSSL which supports the secure renegotiation extension, this note
+ is set to the value <code>1</code> if SSL is in used for the current
+ connection, and the client also supports the secure renegotiation
+ extension. If the client does not support the secure renegotiation
+ extension, the note is set to the value <code>0</code>.
+ If <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is not built against a version of
+ OpenSSL which supports secure renegotiation, or if SSL is not in use
+ for the current connection, the note is not set.</dd>
+</dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="authzproviders" id="authzproviders">Authorization providers for use with Require</a></h2>
+
+ <p><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> provides a few authentication providers for use
+ with <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>'s
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive.</p>
+
+ <h3><a name="reqssl" id="reqssl">Require ssl</a></h3>
+
+ <p>The <code>ssl</code> provider denies access if a connection is not
+ encrypted with SSL. This is similar to the
+ <code class="directive">SSLRequireSSL</code> directive.</p>
+
+ <pre class="prettyprint lang-config">Require ssl</pre>
+
+
+
+
+ <h3><a name="reqverifyclient" id="reqverifyclient">Require ssl-verify-client</a></h3>
+
+ <p>The <code>ssl</code> provider allows access if the user is
+ authenticated with a valid client certificate. This is only
+ useful if <code>SSLVerifyClient optional</code> is in effect.</p>
+
+ <p>The following example grants access if the user is authenticated
+ either with a client certificate or by username and password.</p>
+
+ <pre class="prettyprint lang-config"> Require ssl-verify-client<br />
+ Require valid-user</pre>
+
+
+
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#audit">Off-line audit for proxy</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="server" id="server">Server processing overview</a></h2>
-
-
- <p>Servers need to send SCTs to their clients. SCTs in a certificate
- extension or stapled OCSP response will be sent without any special program
- logic. This module handles sending SCTs configured by the administrator or
- received from configured logs.</p>
-
- <p>The number of SCTs sent in the ServerHello (i.e., not including those in a
- certificate extension or stapled OCSP response) can be limited by the
- <code class="directive"><a href="#ctserverhellosctlimit">CTServerHelloSCTLimit</a></code>
- directive.</p>
-
- <p>For each server certificate, a daemon process maintains an SCT list to be
- sent in the ServerHello, created from statically configured SCTs as well as
- those received from logs. Logs marked as untrusted or with a maximum valid
- timestamp before the present time will be ignored. Periodically the daemon
- will submit certificates to a log as necessary (due to changed log
- configuration or age) and rebuild the concatenation of SCTs.</p>
-
- <p>The SCT list for a server certificate will be sent to any client that
- indicates awareness in the ClientHello when that particular server certificate
- is used.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxy" id="proxy">Proxy processing overview</a></h2>
-
-
- <p>The proxy indicates Certificate Transparency awareness in the ClientHello
- by including the <em>signed_certificate_timestamp</em> extension. It can
- recognize SCTs received in the ServerHello, in an extension in the certificate
- for an origin server, or in a stapled OCSP response.</p>
-
- <p>On-line verification is attempted for each received SCT:</p>
-
- <ul>
- <li>For any SCT, the timestamp can be checked to see if it is not yet valid
- based on the current time as well as any configured valid time interval for
- the log.</li>
- <li>For an SCT from a log for which a public key is configured, the server
- signature will be checked.</li>
- </ul>
-
- <p>If verification fails for at least one SCT and verification was not
- successful for at least one SCT, the connection is aborted if
- <code class="directive"><a href="#ctproxyawareness">CTProxyAwareness</a></code> is set to
- <em>require</em>.</p>
-
- <p>Additionally, the server certificate chain and SCTs are stored for off-line
- verification if the <code class="directive"><a href="#ctauditstorage">CTAuditStorage</a></code>
- directive is configured.</p>
-
- <p>As an optimization, on-line verification and storing of data from the
- server is only performed the first time a web server child process receives
- the data. This saves some processing time as well as disk space. For typical
- reverse proxy setups, very little processing overhead will be required.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logconf" id="logconf">Log configuration</a></h2>
-
-
- <p>Servers and proxies use different information about logs for their processing.
- This <em>log configuration</em> can be set in two ways:</p>
-
- <ul>
- <li>Create a log configuration database using <code class="program"><a href="../programs/ctlogconfig.html">ctlogconfig</a></code>,
- and configure the path to that database using the <code class="directive"><a href="#ctlogconfig">
- CTLogConfig</a></code> directive. This method of configuration supports
- dynamic updates; <code class="module"><a href="../mod/mod_ssl_ct.html">mod_ssl_ct</a></code> will re-read the database at
- intervals. Additionally, the off-line audit program <code>ctauditscts</code>
- can use this configuration to find the URL of logs.</li>
-
- <li>Configure information about logs statically using the <code class="directive"><a href="#ctstaticlogconfig">CTStaticLogConfig</a></code> directive. As with all other
- directives, the server must be restarted in order to pick up changes to the
- directives.</li>
- </ul>
-
- <p>The information that can be configured about a log using either mechanism is
- described below:</p>
-
- <dl>
- <dt>log id</dt>
- <dd>The log id is the SHA-256 hash of the log's public key, and is part of
- every SCT. This is a convenient way to identify a particular log when
- configuring valid timestamp ranges or certain other information.</dd>
-
- <dt>public key of the log</dt>
- <dd>A proxy must have the public key of the log in order to check the
- signature in SCTs it receives which were obtained from the log.
- <br />
- A server must have the public key of the log in order to submit certificates
- to it.</dd>
-
- <dt>general trust/distrust setting</dt>
- <dd>This is a mechanism to distrust or restore trust in a particular log,
- for whatever reason (including simply avoiding interaction with the
- log in situations where it is off-line).</dd>
-
- <dt>minimum and/or maximum valid timestamps</dt>
- <dd>When configured, the proxy will check that timestamps from SCTs
- are within the valid range.</dd>
-
- <dt>log URL</dt>
- <dd>The URL of the log (for its API) is required by a server in order to
- submit server certificates to the log. The server will submit
- each server certificate in order to obtain an SCT for each log with a
- configured URL, except when the log is also marked as distrusted or the
- current time is not within any configured valid timestamp range.
- <br />
- The log URL is also needed by off-line auditing of SCTs received by a
- proxy.</dd>
- </dl>
-
- <p>Generally, only a small subset of this information is configured for a
- particular log. Refer to the documentation for the <code class="directive"><a href="#ctstaticlogconfig">CTStaticLogConfig</a></code> directive and the
- <code class="program"><a href="../programs/ctlogconfig.html">ctlogconfig</a></code> command for more specific information.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="static" id="static">Storing SCTs in a form consumable by mod_ssl_ct</a></h2>
-
-
- <p><code class="module"><a href="../mod/mod_ssl_ct.html">mod_ssl_ct</a></code> allows you to configure SCTs statically
- using the <code class="directive">CTStaticSCTs</code> directive. These must be
- in binary form, ready to send to a client.</p>
-
- <p>Sample code in the form of a Python script to build an SCT in the correct
- format from data received from a log can be found in
- <a href="https://github.com/tomrittervg/ct-tools">Tom Ritter's ct-tools
- repository</a>. Refer to <code>write-sct.py</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logging" id="logging">Logging CT status in the access log</a></h2>
-
-
- <p>Proxy and server modes set the <code>SSL_CT_PROXY_STATUS</code> and
- <code>SSL_CT_CLIENT_STATUS</code> variables, respectively, to indicate
- if the corresponding peer is CT-aware.</p>
-
- <p>Proxy mode sets the <code>SSL_CT_PROXY_SCT_SOURCES</code> variable to
- indicate whether and where SCTs were obtained (ServerHello, certificate
- extension, etc.).</p>
-
- <p>These variables can be logged with the <code>%{<em>varname</em>}e</code>
- format of <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="audit" id="audit">Off-line audit for proxy</a></h2>
-
-
- <p>Experimental support for this is implemented in the <code>ctauditscts</code>
- command, which itself relies on the <code>verify_single_proof.py</code> tool in the
- <em>certificate-transparency</em> open source project. <code>ctauditscts</code>
- can parse data for off-line audit (enabled with the <code class="directive"><a href="#ctauditstorage">
- CTAuditStorage</a></code> directive) and invoke <code>verify_single_proof.py</code>.
- </p>
-
- <p>Here are rough notes for using <code>ctauditscts</code>:</p>
-
- <ul>
- <li>Create a <em>virtualenv</em> using the <code>requirements.txt</code> file
- from the <em>certificate-transparency</em> project and run the following steps
- with that <em>virtualenv</em> activated.</li>
- <li>Set <code>PYTHONPATH</code> to include the <code>python</code>
- directory within the <em>certificate-transparency</em> tools.</li>
- <li>Set <code>PATH</code> to include the <code>python/ct/client/tools</code>
- directory.</li>
- <li>Run <code>ctauditscts</code>, passing the value of the
- <code class="directive">CTAuditStorage</code> directive and, optionally, the path to
- the log configuration database. The latter will be used to look up log URLs
- by log id.</li>
- </ul>
-
- <p>The data saved for audit can also be used by other programs; refer to the
- <code>ctauditscts</code> source code for details on processing the data.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CTAuditStorage" id="CTAuditStorage">CTAuditStorage</a> <a name="ctauditstorage" id="ctauditstorage">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Existing directory where data for off-line audit will be stored</td></tr>
file extension <em>.sct</em></p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="server" id="server">Server processing overview</a></h2>
+
+
+ <p>Servers need to send SCTs to their clients. SCTs in a certificate
+ extension or stapled OCSP response will be sent without any special program
+ logic. This module handles sending SCTs configured by the administrator or
+ received from configured logs.</p>
+
+ <p>The number of SCTs sent in the ServerHello (i.e., not including those in a
+ certificate extension or stapled OCSP response) can be limited by the
+ <code class="directive"><a href="#ctserverhellosctlimit">CTServerHelloSCTLimit</a></code>
+ directive.</p>
+
+ <p>For each server certificate, a daemon process maintains an SCT list to be
+ sent in the ServerHello, created from statically configured SCTs as well as
+ those received from logs. Logs marked as untrusted or with a maximum valid
+ timestamp before the present time will be ignored. Periodically the daemon
+ will submit certificates to a log as necessary (due to changed log
+ configuration or age) and rebuild the concatenation of SCTs.</p>
+
+ <p>The SCT list for a server certificate will be sent to any client that
+ indicates awareness in the ClientHello when that particular server certificate
+ is used.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="proxy" id="proxy">Proxy processing overview</a></h2>
+
+
+ <p>The proxy indicates Certificate Transparency awareness in the ClientHello
+ by including the <em>signed_certificate_timestamp</em> extension. It can
+ recognize SCTs received in the ServerHello, in an extension in the certificate
+ for an origin server, or in a stapled OCSP response.</p>
+
+ <p>On-line verification is attempted for each received SCT:</p>
+
+ <ul>
+ <li>For any SCT, the timestamp can be checked to see if it is not yet valid
+ based on the current time as well as any configured valid time interval for
+ the log.</li>
+ <li>For an SCT from a log for which a public key is configured, the server
+ signature will be checked.</li>
+ </ul>
+
+ <p>If verification fails for at least one SCT and verification was not
+ successful for at least one SCT, the connection is aborted if
+ <code class="directive"><a href="#ctproxyawareness">CTProxyAwareness</a></code> is set to
+ <em>require</em>.</p>
+
+ <p>Additionally, the server certificate chain and SCTs are stored for off-line
+ verification if the <code class="directive"><a href="#ctauditstorage">CTAuditStorage</a></code>
+ directive is configured.</p>
+
+ <p>As an optimization, on-line verification and storing of data from the
+ server is only performed the first time a web server child process receives
+ the data. This saves some processing time as well as disk space. For typical
+ reverse proxy setups, very little processing overhead will be required.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logconf" id="logconf">Log configuration</a></h2>
+
+
+ <p>Servers and proxies use different information about logs for their processing.
+ This <em>log configuration</em> can be set in two ways:</p>
+
+ <ul>
+ <li>Create a log configuration database using <code class="program"><a href="../programs/ctlogconfig.html">ctlogconfig</a></code>,
+ and configure the path to that database using the <code class="directive"><a href="#ctlogconfig">
+ CTLogConfig</a></code> directive. This method of configuration supports
+ dynamic updates; <code class="module"><a href="../mod/mod_ssl_ct.html">mod_ssl_ct</a></code> will re-read the database at
+ intervals. Additionally, the off-line audit program <code>ctauditscts</code>
+ can use this configuration to find the URL of logs.</li>
+
+ <li>Configure information about logs statically using the <code class="directive"><a href="#ctstaticlogconfig">CTStaticLogConfig</a></code> directive. As with all other
+ directives, the server must be restarted in order to pick up changes to the
+ directives.</li>
+ </ul>
+
+ <p>The information that can be configured about a log using either mechanism is
+ described below:</p>
+
+ <dl>
+ <dt>log id</dt>
+ <dd>The log id is the SHA-256 hash of the log's public key, and is part of
+ every SCT. This is a convenient way to identify a particular log when
+ configuring valid timestamp ranges or certain other information.</dd>
+
+ <dt>public key of the log</dt>
+ <dd>A proxy must have the public key of the log in order to check the
+ signature in SCTs it receives which were obtained from the log.
+ <br />
+ A server must have the public key of the log in order to submit certificates
+ to it.</dd>
+
+ <dt>general trust/distrust setting</dt>
+ <dd>This is a mechanism to distrust or restore trust in a particular log,
+ for whatever reason (including simply avoiding interaction with the
+ log in situations where it is off-line).</dd>
+
+ <dt>minimum and/or maximum valid timestamps</dt>
+ <dd>When configured, the proxy will check that timestamps from SCTs
+ are within the valid range.</dd>
+
+ <dt>log URL</dt>
+ <dd>The URL of the log (for its API) is required by a server in order to
+ submit server certificates to the log. The server will submit
+ each server certificate in order to obtain an SCT for each log with a
+ configured URL, except when the log is also marked as distrusted or the
+ current time is not within any configured valid timestamp range.
+ <br />
+ The log URL is also needed by off-line auditing of SCTs received by a
+ proxy.</dd>
+ </dl>
+
+ <p>Generally, only a small subset of this information is configured for a
+ particular log. Refer to the documentation for the <code class="directive"><a href="#ctstaticlogconfig">CTStaticLogConfig</a></code> directive and the
+ <code class="program"><a href="../programs/ctlogconfig.html">ctlogconfig</a></code> command for more specific information.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="static" id="static">Storing SCTs in a form consumable by mod_ssl_ct</a></h2>
+
+
+ <p><code class="module"><a href="../mod/mod_ssl_ct.html">mod_ssl_ct</a></code> allows you to configure SCTs statically
+ using the <code class="directive">CTStaticSCTs</code> directive. These must be
+ in binary form, ready to send to a client.</p>
+
+ <p>Sample code in the form of a Python script to build an SCT in the correct
+ format from data received from a log can be found in
+ <a href="https://github.com/tomrittervg/ct-tools">Tom Ritter's ct-tools
+ repository</a>. Refer to <code>write-sct.py</code></p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logging" id="logging">Logging CT status in the access log</a></h2>
+
+
+ <p>Proxy and server modes set the <code>SSL_CT_PROXY_STATUS</code> and
+ <code>SSL_CT_CLIENT_STATUS</code> variables, respectively, to indicate
+ if the corresponding peer is CT-aware.</p>
+
+ <p>Proxy mode sets the <code>SSL_CT_PROXY_SCT_SOURCES</code> variable to
+ indicate whether and where SCTs were obtained (ServerHello, certificate
+ extension, etc.).</p>
+
+ <p>These variables can be logged with the <code>%{<em>varname</em>}e</code>
+ format of <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="audit" id="audit">Off-line audit for proxy</a></h2>
+
+
+ <p>Experimental support for this is implemented in the <code>ctauditscts</code>
+ command, which itself relies on the <code>verify_single_proof.py</code> tool in the
+ <em>certificate-transparency</em> open source project. <code>ctauditscts</code>
+ can parse data for off-line audit (enabled with the <code class="directive"><a href="#ctauditstorage">
+ CTAuditStorage</a></code> directive) and invoke <code>verify_single_proof.py</code>.
+ </p>
+
+ <p>Here are rough notes for using <code>ctauditscts</code>:</p>
+
+ <ul>
+ <li>Create a <em>virtualenv</em> using the <code>requirements.txt</code> file
+ from the <em>certificate-transparency</em> project and run the following steps
+ with that <em>virtualenv</em> activated.</li>
+ <li>Set <code>PYTHONPATH</code> to include the <code>python</code>
+ directory within the <em>certificate-transparency</em> tools.</li>
+ <li>Set <code>PATH</code> to include the <code>python/ct/client/tools</code>
+ directory.</li>
+ <li>Run <code>ctauditscts</code>, passing the value of the
+ <code class="directive">CTAuditStorage</code> directive and, optionally, the path to
+ the log configuration database. The latter will be used to look up log URLs
+ by log id.</li>
+ </ul>
+
+ <p>The data saved for audit can also be used by other programs; refer to the
+ <code>ctauditscts</code> source code for details on processing the data.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_ssl_ct.html" title="English"> en </a></p>
<li><img alt="" src="../images/down.gif" /> <a href="#substitutemaxlinelength">SubstituteMaxLineLength</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Substitute" id="Substitute">Substitute</a> <a name="substitute" id="substitute">Directive</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_substitute.html" title="English"> en </a></p>
<ul class="seealso">
<li><a href="../suexec.html">SuEXEC support</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SuexecUserGroup" id="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup" id="suexecusergroup">Directive</a></h2>
<table class="directive">
<li><code class="directive"><a href="../mod/mod_unixd.html#suexec">Suexec</a></code></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_suexec.html" title="English"> en </a> |
<ul class="seealso">
<li><a href="../suexec.html">SuEXEC サポート</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SuexecUserGroup" id="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup" id="suexecusergroup">ディレクティブ</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_suexec.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><a href="../suexec.html">SuEXEC Áö¿ø</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SuexecUserGroup" id="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup" id="suexecusergroup">Áö½Ã¾î</a></h2>
<table class="directive">
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_suexec.html" hreflang="en" rel="alternate" title="English"> en </a> |
<ul class="seealso">
<li><a href="../suexec.html">SuEXEC Desteği</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SuexecUserGroup" id="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup" id="suexecusergroup">Yönergesi</a></h2>
<table class="directive">
<li><code class="directive"><a href="../mod/mod_unixd.html#suexec">Suexec</a></code></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_suexec.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#idleshutdown">IdleShutdown</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IdleShutdown" id="IdleShutdown">IdleShutdown</a> <a name="idleshutdown" id="idleshutdown">Directive</a></h2>
<table class="directive">
</p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_systemd.html" title="English"> en </a></p>
<ul class="seealso">
<li><a href="../suexec.html">suEXEC support</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ChrootDir" id="ChrootDir">ChrootDir</a> <a name="chrootdir" id="chrootdir">Directive</a></h2>
<table class="directive">
<li><code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_unixd.html" title="English"> en </a> |
<ul class="seealso">
<li><a href="../suexec.html">suEXEC desteği</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ChrootDir" id="ChrootDir">ChrootDir</a> <a name="chrootdir" id="chrootdir">Yönergesi</a></h2>
<table class="directive">
<li><code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_unixd.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../howto/public_html.html">public_html
tutorial</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="UserDir" id="UserDir">UserDir</a> <a name="userdir" id="userdir">Directive</a></h2>
<table class="directive">
</li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_userdir.html" title="English"> en </a> |
<li><a href="../howto/public_html.html">public_html
チュートリアル</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="UserDir" id="UserDir">UserDir</a> <a name="userdir" id="userdir">ディレクティブ</a></h2>
<table class="directive">
チュートリアル</a></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_userdir.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><a href="../howto/public_html.html">public_html
ÅõÅ丮¾ó</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="UserDir" id="UserDir">UserDir</a> <a name="userdir" id="userdir">Áö½Ã¾î</a></h2>
<table class="directive">
ÅõÅ丮¾ó</a></li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_userdir.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../howto/public_html.html">public_html eğitmeni</a>
</li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="UserDir" id="UserDir">UserDir</a> <a name="userdir" id="userdir">Yönergesi</a></h2>
<table class="directive">
</li>
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/mod/mod_userdir.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#logging">Logging</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logging" id="logging">Logging</a></h2>
-
-
- <p><code class="module"><a href="../mod/mod_usertrack.html">mod_usertrack</a></code> sets a cookie which can be logged
- via <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> configurable logging formats:</p>
-
- <pre class="prettyprint lang-config">LogFormat "%{Apache}n %r %t" usertrack
-CustomLog logs/clickstream.log usertrack</pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CookieDomain" id="CookieDomain">CookieDomain</a> <a name="cookiedomain" id="cookiedomain">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The domain to which the tracking cookie applies</td></tr>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logging" id="logging">Logging</a></h2>
+
+
+ <p><code class="module"><a href="../mod/mod_usertrack.html">mod_usertrack</a></code> sets a cookie which can be logged
+ via <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> configurable logging formats:</p>
+
+ <pre class="prettyprint lang-config">LogFormat "%{Apache}n %r %t" usertrack
+CustomLog logs/clickstream.log usertrack</pre>
+
+
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#ifversion"><IfVersion></a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IfVersion" id="IfVersion"><IfVersion></a> <a name="ifversion" id="ifversion">Directive</a></h2>
<table class="directive">
<code>=</code>.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_version.html" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#ifversion"><IfVersion></a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IfVersion" id="IfVersion"><IfVersion></a> <a name="ifversion" id="ifversion">ディレクティブ</a></h2>
<table class="directive">
みなされます。</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English"> en </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#ifversion"><IfVersion></a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IfVersion" id="IfVersion"><IfVersion></a> <a name="ifversion" id="ifversion">Áö½Ã¾î</a></h2>
<table class="directive">
»ý°¢ÇÑ´Ù.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English"> en </a> |
virtual hosting</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualDocumentRoot" id="VirtualDocumentRoot">VirtualDocumentRoot</a> <a name="virtualdocumentroot" id="virtualdocumentroot">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the document root
+for a given virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualDocumentRoot <em>interpolated-directory</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualDocumentRoot none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+ <p>The <code class="directive">VirtualDocumentRoot</code> directive allows you to
+ determine where Apache HTTP Server will find your documents based on the
+ value of the server name. The result of expanding
+ <em>interpolated-directory</em> is used as the root of the
+ document tree in a similar manner to the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directive's argument.
+ If <em>interpolated-directory</em> is <code>none</code> then
+ <code class="directive">VirtualDocumentRoot</code> is turned off. This directive
+ cannot be used in the same context as <code class="directive"><a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></code>.</p>
+
+<div class="warning"><h3>Note</h3>
+<code class="directive">VirtualDocumentRoot</code> will override any <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directives you may have put in the same
+context or child contexts. Putting a <code class="directive">VirtualDocumentRoot</code>
+in the global server scope will effectively override <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directives in any virtual hosts defined later
+on, unless you set <code class="directive">VirtualDocumentRoot</code> to <code>None</code>
+in each virtual host.
+</div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualDocumentRootIP" id="VirtualDocumentRootIP">VirtualDocumentRootIP</a> <a name="virtualdocumentrootip" id="virtualdocumentrootip">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the document root
+for a given virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualDocumentRootIP <em>interpolated-directory</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualDocumentRootIP none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+<p>The <code class="directive">VirtualDocumentRootIP</code> directive is like the
+ <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code>
+ directive, except that it uses the IP address of the server end
+ of the connection for directory interpolation instead of the server
+ name.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualScriptAlias" id="VirtualScriptAlias">VirtualScriptAlias</a> <a name="virtualscriptalias" id="virtualscriptalias">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the CGI directory for
+a given virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualScriptAlias <em>interpolated-directory</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualScriptAlias none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+ <p>The <code class="directive">VirtualScriptAlias</code> directive allows you to
+ determine where Apache httpd will find CGI scripts in a similar
+ manner to <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code> does for other documents. It matches
+ requests for URIs starting <code>/cgi-bin/</code>, much like <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
+ <code>/cgi-bin/</code> would.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualScriptAliasIP" id="VirtualScriptAliasIP">VirtualScriptAliasIP</a> <a name="virtualscriptaliasip" id="virtualscriptaliasip">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the CGI directory for
+a given virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualScriptAliasIP <em>interpolated-directory</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualScriptAliasIP none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+ <p>The <code class="directive">VirtualScriptAliasIP</code> directive is like the
+ <code class="directive"><a href="#virtualscriptalias">VirtualScriptAlias</a></code>
+ directive, except that it uses the IP address of the server end
+ of the connection for directory interpolation instead of the server
+ name.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="interpol" id="interpol">Directory Name Interpolation</a></h2>
<p>The <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code>
directives <code>%V</code> and <code>%A</code> are useful
in conjunction with this module.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualDocumentRoot" id="VirtualDocumentRoot">VirtualDocumentRoot</a> <a name="virtualdocumentroot" id="virtualdocumentroot">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualDocumentRoot <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualDocumentRoot none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p>The <code class="directive">VirtualDocumentRoot</code> directive allows you to
- determine where Apache HTTP Server will find your documents based on the
- value of the server name. The result of expanding
- <em>interpolated-directory</em> is used as the root of the
- document tree in a similar manner to the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directive's argument.
- If <em>interpolated-directory</em> is <code>none</code> then
- <code class="directive">VirtualDocumentRoot</code> is turned off. This directive
- cannot be used in the same context as <code class="directive"><a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></code>.</p>
-
-<div class="warning"><h3>Note</h3>
-<code class="directive">VirtualDocumentRoot</code> will override any <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directives you may have put in the same
-context or child contexts. Putting a <code class="directive">VirtualDocumentRoot</code>
-in the global server scope will effectively override <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directives in any virtual hosts defined later
-on, unless you set <code class="directive">VirtualDocumentRoot</code> to <code>None</code>
-in each virtual host.
-</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualDocumentRootIP" id="VirtualDocumentRootIP">VirtualDocumentRootIP</a> <a name="virtualdocumentrootip" id="virtualdocumentrootip">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualDocumentRootIP <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualDocumentRootIP none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
-<p>The <code class="directive">VirtualDocumentRootIP</code> directive is like the
- <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code>
- directive, except that it uses the IP address of the server end
- of the connection for directory interpolation instead of the server
- name.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualScriptAlias" id="VirtualScriptAlias">VirtualScriptAlias</a> <a name="virtualscriptalias" id="virtualscriptalias">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualScriptAlias <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualScriptAlias none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p>The <code class="directive">VirtualScriptAlias</code> directive allows you to
- determine where Apache httpd will find CGI scripts in a similar
- manner to <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code> does for other documents. It matches
- requests for URIs starting <code>/cgi-bin/</code>, much like <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- <code>/cgi-bin/</code> would.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualScriptAliasIP" id="VirtualScriptAliasIP">VirtualScriptAliasIP</a> <a name="virtualscriptaliasip" id="virtualscriptaliasip">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualScriptAliasIP <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualScriptAliasIP none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p>The <code class="directive">VirtualScriptAliasIP</code> directive is like the
- <code class="directive"><a href="#virtualscriptalias">VirtualScriptAlias</a></code>
- directive, except that it uses the IP address of the server end
- of the connection for directory interpolation instead of the server
- name.</p>
-
-
</div>
</div>
<div class="bottomlang">
Sanal Barındırma</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualDocumentRoot" id="VirtualDocumentRoot">VirtualDocumentRoot</a> <a name="virtualdocumentroot" id="virtualdocumentroot">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın belge kök dizinini devingen olarak yapılandırır.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualDocumentRoot <em>hesaplanan-dizin</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualDocumentRoot none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+ <p><code class="directive">VirtualDocumentRoot</code> yönergesi sunucu ismine göre
+ belgelerin bulunacağı yeri Apache HTTP Sunucusunun saptamasını sağlar.
+ <code><em>hesaplanan-dizin</em></code>’in dönüşüm sonucu <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> yönergesinin değeriymiş gibi
+ belge ağacının kök dizini olarak kullanılır.
+ <code><em>hesaplanan-dizin</em></code> yerine <code>none</code>
+ belirtilmişse <code class="directive">VirtualDocumentRoot</code> iptal edilmiş
+ olur. Bu yönerge <code class="directive"><a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></code> yönergesinin kullanıldığı bağlamda
+ yer alamaz.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualDocumentRootIP" id="VirtualDocumentRootIP">VirtualDocumentRootIP</a> <a name="virtualdocumentrootip" id="virtualdocumentrootip">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın belge kök dizinini devingen olarak yapılandırır.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualDocumentRootIP <em>hesaplanan-dizin</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualDocumentRootIP none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+ <p><code class="directive">VirtualDocumentRootIP</code> yönergesi, dizinin
+ saptanmasında sunucu ismi yerine bağlantının sonlandığı sunucunun IP
+ adresini kullanması dışında <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code> gibidir.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualScriptAlias" id="VirtualScriptAlias">VirtualScriptAlias</a> <a name="virtualscriptalias" id="virtualscriptalias">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın CGI dizinini devingen olarak yapılandırır.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualScriptAlias <em>hesaplanan-dizin</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualScriptAlias none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+ <p><code class="directive">VirtualScriptAlias</code> yönergesi, CGI betiklerinin
+ bulunacağı yeri Apache httpd’nin saptamasını sağlamak bakımından
+ <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code>
+ yönergesinin yaptığını yapar. <code>/cgi-bin/</code> ile başlayan
+ istekler için ise <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
+ yönergesinin yaptığını yapar.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="VirtualScriptAliasIP" id="VirtualScriptAliasIP">VirtualScriptAliasIP</a> <a name="virtualscriptaliasip" id="virtualscriptaliasip">Yönergesi</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın CGI dizinini devingen olarak yapılandırır.
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualScriptAliasIP <em>hesaplanan-dizin</em>|none</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualScriptAliasIP none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
+<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
+<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
+</table>
+
+ <p><code class="directive">VirtualScriptAliasIP</code> yönergesi, dizinin
+ saptanmasında sunucu ismi yerine bağlantının sonlandığı sunucunun IP
+ adresini kullanması dışında <code class="directive"><a href="#virtualscriptalias">VirtualScriptAlias</a></code> gibidir.</p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="interpol" id="interpol">Dizin İsimlerinin Elde Edilmesi</a></h2>
<p><code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> yönergesinin
<code>%V</code> ve <code>%A</code> <a href="mod_log_config.html#formats">biçem belirteçleri</a> bu modülle
birlikte kullanıldığında çok yararlı olurlar.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualDocumentRoot" id="VirtualDocumentRoot">VirtualDocumentRoot</a> <a name="virtualdocumentroot" id="virtualdocumentroot">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın belge kök dizinini devingen olarak yapılandırır.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualDocumentRoot <em>hesaplanan-dizin</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualDocumentRoot none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p><code class="directive">VirtualDocumentRoot</code> yönergesi sunucu ismine göre
- belgelerin bulunacağı yeri Apache HTTP Sunucusunun saptamasını sağlar.
- <code><em>hesaplanan-dizin</em></code>’in dönüşüm sonucu <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> yönergesinin değeriymiş gibi
- belge ağacının kök dizini olarak kullanılır.
- <code><em>hesaplanan-dizin</em></code> yerine <code>none</code>
- belirtilmişse <code class="directive">VirtualDocumentRoot</code> iptal edilmiş
- olur. Bu yönerge <code class="directive"><a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></code> yönergesinin kullanıldığı bağlamda
- yer alamaz.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualDocumentRootIP" id="VirtualDocumentRootIP">VirtualDocumentRootIP</a> <a name="virtualdocumentrootip" id="virtualdocumentrootip">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın belge kök dizinini devingen olarak yapılandırır.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualDocumentRootIP <em>hesaplanan-dizin</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualDocumentRootIP none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p><code class="directive">VirtualDocumentRootIP</code> yönergesi, dizinin
- saptanmasında sunucu ismi yerine bağlantının sonlandığı sunucunun IP
- adresini kullanması dışında <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code> gibidir.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualScriptAlias" id="VirtualScriptAlias">VirtualScriptAlias</a> <a name="virtualscriptalias" id="virtualscriptalias">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın CGI dizinini devingen olarak yapılandırır.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualScriptAlias <em>hesaplanan-dizin</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualScriptAlias none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p><code class="directive">VirtualScriptAlias</code> yönergesi, CGI betiklerinin
- bulunacağı yeri Apache httpd’nin saptamasını sağlamak bakımından
- <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code>
- yönergesinin yaptığını yapar. <code>/cgi-bin/</code> ile başlayan
- istekler için ise <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- yönergesinin yaptığını yapar.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualScriptAliasIP" id="VirtualScriptAliasIP">VirtualScriptAliasIP</a> <a name="virtualscriptaliasip" id="virtualscriptaliasip">Yönergesi</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Bir sanal konağın CGI dizinini devingen olarak yapılandırır.
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sözdizimi:</a></th><td><code>VirtualScriptAliasIP <em>hesaplanan-dizin</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Öntanımlı:</a></th><td><code>VirtualScriptAliasIP none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Bağlam:</a></th><td>sunucu geneli, sanal konak</td></tr>
-<tr><th><a href="directive-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modül:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p><code class="directive">VirtualScriptAliasIP</code> yönergesi, dizinin
- saptanmasında sunucu ismi yerine bağlantının sonlandığı sunucunun IP
- adresini kullanması dışında <code class="directive"><a href="#virtualscriptalias">VirtualScriptAlias</a></code> gibidir.</p>
-
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#watchdoginterval">WatchdogInterval</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="WatchdogInterval" id="WatchdogInterval">WatchdogInterval</a> <a name="watchdoginterval" id="watchdoginterval">Directive</a></h2>
<table class="directive">
second.</p>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_watchdog.html" title="English"> en </a></p>
<li><img alt="" src="../images/down.gif" /> <a href="#alias">Unsupported Encodings</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="xml2EncAlias" id="xml2EncAlias">xml2EncAlias</a> <a name="xml2encalias" id="xml2encalias">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Recognise Aliases for encoding values</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>xml2EncAlias <var>charset alias [alias ...]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_xml2enc</td></tr>
+</table>
+ <p>This server-wide directive aliases one or more encoding to another
+ encoding. This enables encodings not recognised by libxml2 to be handled
+ internally by libxml2's encoding support using the translation table for
+ a recognised encoding. This serves two purposes: to support character sets
+ (or names) not recognised either by libxml2 or iconv, and to skip
+ conversion for an encoding where it is known to be unnecessary.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="xml2EncDefault" id="xml2EncDefault">xml2EncDefault</a> <a name="xml2encdefault" id="xml2encdefault">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets a default encoding to assume when absolutely no information
+can be <a href="#sniffing">automatically detected</a></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>xml2EncDefault <var>name</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_xml2enc</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Version 2.4.0 and later; available as a third-party
+module for earlier versions.</td></tr>
+</table>
+ <p>If you are processing data with known encoding but no encoding
+ information, you can set this default to help mod_xml2enc process
+ the data correctly. For example, to work with the default value
+ of Latin1 (<var>iso-8859-1</var> specified in HTTP/1.0, use</p>
+ <pre class="prettyprint lang-config">xml2EncDefault iso-8859-1</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="xml2StartParse" id="xml2StartParse">xml2StartParse</a> <a name="xml2startparse" id="xml2startparse">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Advise the parser to skip leading junk.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>xml2StartParse <var>element [element ...]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_xml2enc</td></tr>
+</table>
+ <p>Specify that the markup parser should start at the first instance
+ of any of the elements specified. This can be used as a workaround
+ where a broken backend inserts leading junk that messes up the parser (<a href="http://bahumbug.wordpress.com/2006/10/12/mod_proxy_html-revisited/">example here</a>).</p>
+ <p>It should never be used for XML, nor well-formed HTML.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">Usage</a></h2>
<p>There are two usage scenarios: with modules programmed to work
<p>If you are working with encodings that are not supported by any of
the conversion methods available on your platform, you can still alias
them to a supported encoding using <code class="directive">xml2EncAlias</code>.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="xml2EncAlias" id="xml2EncAlias">xml2EncAlias</a> <a name="xml2encalias" id="xml2encalias">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Recognise Aliases for encoding values</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>xml2EncAlias <var>charset alias [alias ...]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_xml2enc</td></tr>
-</table>
- <p>This server-wide directive aliases one or more encoding to another
- encoding. This enables encodings not recognised by libxml2 to be handled
- internally by libxml2's encoding support using the translation table for
- a recognised encoding. This serves two purposes: to support character sets
- (or names) not recognised either by libxml2 or iconv, and to skip
- conversion for an encoding where it is known to be unnecessary.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="xml2EncDefault" id="xml2EncDefault">xml2EncDefault</a> <a name="xml2encdefault" id="xml2encdefault">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets a default encoding to assume when absolutely no information
-can be <a href="#sniffing">automatically detected</a></td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>xml2EncDefault <var>name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_xml2enc</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Version 2.4.0 and later; available as a third-party
-module for earlier versions.</td></tr>
-</table>
- <p>If you are processing data with known encoding but no encoding
- information, you can set this default to help mod_xml2enc process
- the data correctly. For example, to work with the default value
- of Latin1 (<var>iso-8859-1</var> specified in HTTP/1.0, use</p>
- <pre class="prettyprint lang-config">xml2EncDefault iso-8859-1</pre>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="xml2StartParse" id="xml2StartParse">xml2StartParse</a> <a name="xml2startparse" id="xml2startparse">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Advise the parser to skip leading junk.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>xml2StartParse <var>element [element ...]</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_xml2enc</td></tr>
-</table>
- <p>Specify that the markup parser should start at the first instance
- of any of the elements specified. This can be used as a workaround
- where a broken backend inserts leading junk that messes up the parser (<a href="http://bahumbug.wordpress.com/2006/10/12/mod_proxy_html-revisited/">example here</a>).</p>
- <p>It should never be used for XML, nor well-formed HTML.</p>
-
</div>
</div>
<div class="bottomlang">
<li><img alt="" src="../images/down.gif" /> <a href="#threadstacksize">ThreadStackSize</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Kommentare</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CoreDumpDirectory" id="CoreDumpDirectory">CoreDumpDirectory</a>-<a name="coredumpdirectory" id="coredumpdirectory">Direktive</a></h2>
<table class="directive">
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mpm_common.html" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#threadstacksize">ThreadStackSize</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CoreDumpDirectory" id="CoreDumpDirectory">CoreDumpDirectory</a> <a name="coredumpdirectory" id="coredumpdirectory">Directive</a></h2>
<table class="directive">
causes crashes with some common modules.</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../de/mod/mpm_common.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#threadstacksize">ThreadStackSize</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CoreDumpDirectory" id="CoreDumpDirectory">CoreDumpDirectory</a> <a name="coredumpdirectory" id="coredumpdirectory">ディレクティブ</a></h2>
<table class="directive">
</ul>
</div>
+
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../de/mod/mpm_common.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
<li><img alt="" src="../images/down.gif" /> <a href="#threadstacksize">ThreadStackSize</a></li>
</ul>
<ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="CoreDumpDirectory" id="CoreDumpDirectory">CoreDumpDirectory</a> <a name="coredumpdirectory" id="coredumpdirectory">Yönergesi</a></h2>
<table class="directive">
da azaltmak bazı modüllerle çökmeye sebep olur.</div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../de/mod/mpm_common.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
ports Apache httpd uses</a>
</li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
-
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="MaxThreads" id="MaxThreads">MaxThreads</a> <a name="maxthreads" id="maxthreads">Directive</a></h2>
<table class="directive">
</code></p></div>
</div>
+
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mpm_netware.html" title="English"> en </a></p>
und Ports</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Kommentare</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">Arbeitsweise</a></h2>
- <p>Ein einzelner Steuerprozess ist für den Start von
- Kindprozessen verantwortlich, die auf Verbindungen warten und diese
- bedienen, sobald sie eintreffen. Der Apache versucht immer, mehrere
- <dfn>freie</dfn> oder unbeschäftigte Serverprozesse vorzuhalten,
- die zur Bedienung eingehender Anfragen bereit stehen. Auf diese Weise
- müssen Clients nicht darauf warten, dass neue Kindprozesse
- geforkt werden, bevor ihre Anfrage bearbeitet werden kann.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code> und
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> regulieren,
- wie der Elternprozess Kindprozesse zur Bedienung von Anfragen erstellt.
- Im Allgemeinen ist der Apache sehr selbstregulierend, so dass die meisten
- Angebote die Voreinstellung dieser Direktiven nicht verändern
- müssen. Systeme, die mehr als 256 gleichzeitige Anfragen bedienen
- müssen, können <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> erhöhen, während
- Systeme mit begrenztem Arbeitsspeicher möglicherweise
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> heruntersetzen
- müssen, um den Server vor Flatterverhalten (Arbeitsspeicherinhalte auf
- Platte auslagern - und zurück) zu schützen. Weitere
- Informationen zur Feinabstimmung der Prozesserstellung sind in den
- <a href="../misc/perf-tuning.html">Performance-Hinweisen</a> zu
- finden.</p>
-
- <p>Währen der Elternprozess unter Unix normalerweise als
- <code>root</code> gestartet wird, um sich an Port 80 binden zu können,
- werden die Kindprozesse unter einem weniger privilegierten Benutzer
- gestartet. Die Direktiven <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
- und <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> werden dazu
- verwendet, die Privilegien der Apache-Kindprozesse festzulegen. Die
- Kindprozesse müssen in der Lage sein, alle Inhalte zu lesen, die
- sie ausliefern sollen, sollten darüber hinaus jedoch so wenig wie
- möglich Rechte besitzen.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- bestimmt, wie häufig der Server Prozesse erneuert, indem er alte
- beendet und neue startet.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="MaxSpareServers" id="MaxSpareServers">MaxSpareServers</a>-<a name="maxspareservers" id="maxspareservers">Direktive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Maximale Anzahl der unbeschäftigten Kindprozesse des
<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="how-it-works" id="how-it-works">Arbeitsweise</a></h2>
+ <p>Ein einzelner Steuerprozess ist für den Start von
+ Kindprozessen verantwortlich, die auf Verbindungen warten und diese
+ bedienen, sobald sie eintreffen. Der Apache versucht immer, mehrere
+ <dfn>freie</dfn> oder unbeschäftigte Serverprozesse vorzuhalten,
+ die zur Bedienung eingehender Anfragen bereit stehen. Auf diese Weise
+ müssen Clients nicht darauf warten, dass neue Kindprozesse
+ geforkt werden, bevor ihre Anfrage bearbeitet werden kann.</p>
+
+ <p><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
+ <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
+ <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code> und
+ <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> regulieren,
+ wie der Elternprozess Kindprozesse zur Bedienung von Anfragen erstellt.
+ Im Allgemeinen ist der Apache sehr selbstregulierend, so dass die meisten
+ Angebote die Voreinstellung dieser Direktiven nicht verändern
+ müssen. Systeme, die mehr als 256 gleichzeitige Anfragen bedienen
+ müssen, können <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> erhöhen, während
+ Systeme mit begrenztem Arbeitsspeicher möglicherweise
+ <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> heruntersetzen
+ müssen, um den Server vor Flatterverhalten (Arbeitsspeicherinhalte auf
+ Platte auslagern - und zurück) zu schützen. Weitere
+ Informationen zur Feinabstimmung der Prozesserstellung sind in den
+ <a href="../misc/perf-tuning.html">Performance-Hinweisen</a> zu
+ finden.</p>
+
+ <p>Währen der Elternprozess unter Unix normalerweise als
+ <code>root</code> gestartet wird, um sich an Port 80 binden zu können,
+ werden die Kindprozesse unter einem weniger privilegierten Benutzer
+ gestartet. Die Direktiven <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
+ und <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> werden dazu
+ verwendet, die Privilegien der Apache-Kindprozesse festzulegen. Die
+ Kindprozesse müssen in der Lage sein, alle Inhalte zu lesen, die
+ sie ausliefern sollen, sollten darüber hinaus jedoch so wenig wie
+ möglich Rechte besitzen.</p>
+
+ <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
+ bestimmt, wie häufig der Server Prozesse erneuert, indem er alte
+ beendet und neue startet.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Verfügbare Sprachen: </span><a href="../de/mod/prefork.html" title="Deutsch"> de </a> |
uses</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
- <p>A single control process is responsible for launching child
- processes which listen for connections and serve them when they
- arrive. Apache httpd always tries to maintain several <dfn>spare</dfn>
- or idle server processes, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- child processes to be forked before their requests can be
- served.</p>
-
- <p>The <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code>, and
- <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> regulate how
- the parent process creates children to serve requests. In general,
- Apache httpd is very self-regulating, so most sites do not need to
- adjust these directives from their default values. Sites which
- need to serve more than 256 simultaneous requests may need to
- increase <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>,
- while sites with limited memory may need to decrease <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> to keep the server from
- thrashing (swapping memory to disk and back). More information
- about tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
- documentation.</p>
-
- <p>While the parent process is usually started as <code>root</code>
- under Unix in order to bind to port 80, the child processes are
- launched by Apache httpd as a less-privileged user. The <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> and <code class="directive"><a href="../mod/mod_unixd.html#group">Group</a></code> directives are used to set
- the privileges of the Apache httpd child processes. The child processes
- must be able to read all the content that will be served, but
- should have as few privileges beyond that as possible.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxconnectionsperchild">MaxConnectionsPerChild</a></code>
- controls how frequently the server recycles processes by killing
- old ones and launching new ones.</p>
-
- <p>This MPM uses the <code>mpm-accept</code> mutex to serialize
- access to incoming connections when subject to the thundering herd
- problem (generally, when there are multiple listening sockets).
- The implementation aspects of this mutex can be configured with the
- <code class="directive"><a href="../mod/core.html#mutex">Mutex</a></code> directive. The <a href="../misc/perf-tuning.html">performance hints</a>
- documentation has additional information about this mutex.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="MaxSpareServers" id="MaxSpareServers">MaxSpareServers</a> <a name="maxspareservers" id="maxspareservers">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of idle child server processes</td></tr>
<li><code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code></li>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
+ <p>A single control process is responsible for launching child
+ processes which listen for connections and serve them when they
+ arrive. Apache httpd always tries to maintain several <dfn>spare</dfn>
+ or idle server processes, which stand ready to serve incoming
+ requests. In this way, clients do not need to wait for a new
+ child processes to be forked before their requests can be
+ served.</p>
+
+ <p>The <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
+ <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
+ <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code>, and
+ <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> regulate how
+ the parent process creates children to serve requests. In general,
+ Apache httpd is very self-regulating, so most sites do not need to
+ adjust these directives from their default values. Sites which
+ need to serve more than 256 simultaneous requests may need to
+ increase <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>,
+ while sites with limited memory may need to decrease <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> to keep the server from
+ thrashing (swapping memory to disk and back). More information
+ about tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
+ documentation.</p>
+
+ <p>While the parent process is usually started as <code>root</code>
+ under Unix in order to bind to port 80, the child processes are
+ launched by Apache httpd as a less-privileged user. The <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> and <code class="directive"><a href="../mod/mod_unixd.html#group">Group</a></code> directives are used to set
+ the privileges of the Apache httpd child processes. The child processes
+ must be able to read all the content that will be served, but
+ should have as few privileges beyond that as possible.</p>
+
+ <p><code class="directive"><a href="../mod/mpm_common.html#maxconnectionsperchild">MaxConnectionsPerChild</a></code>
+ controls how frequently the server recycles processes by killing
+ old ones and launching new ones.</p>
+
+ <p>This MPM uses the <code>mpm-accept</code> mutex to serialize
+ access to incoming connections when subject to the thundering herd
+ problem (generally, when there are multiple listening sockets).
+ The implementation aspects of this mutex can be configured with the
+ <code class="directive"><a href="../mod/core.html#mutex">Mutex</a></code> directive. The <a href="../misc/perf-tuning.html">performance hints</a>
+ documentation has additional information about this mutex.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../de/mod/prefork.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
が使用するアドレスとポートの設定</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">動作方法</a></h2>
- <p>一つのコントロールプロセスが、
- コネクションに対して listen して、しかるべき時に応答する
- 子プロセスを起動します。Apache は常に幾つかの<dfn>スペア</dfn>
- かアイドルなサーバプロセスを維持していて、それらは入ってきた
- リクエストに応答できるように待機しています。
- このようにしてクライアントは、リクエストが応答される前に、
- 新しい子プロセスが fork されるのを待たなくてもよいように
- なっています。</p>
-
- <p>親プロセスがリクエストに応答するの子プロセスを
- どのように生成するかは、
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code>,
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- で調整します。一般的に、Apache は非常に自律的なので、
- 大抵のサイトではこれらのディレクティブをデフォルト値から調整する
- 必要はないでしょう。
- 同時に 256 を超えるリクエストに応答しないといけないサイトでは、
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- を増やす必要があるでしょう。
- 一方、メモリの限られているサイトでは、スラッシング
- (メモリとディスク間で何度もスワップ) が起こるのを防ぐために
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- を減らす必要があるでしょう。プロセス生成のチューニングに関する
- 詳しい情報は、<a href="../misc/perf-tuning.html">性能に関するヒント</a>
- にあります。</p>
-
- <p>通常 Unix では親プロセスは 80 番ポートにバインドするために
- <code>root</code> で起動されますが、子プロセスやスレッドは
- もっと低い権限のユーザで Apache によって起動されます。
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> と
- <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>
- ディレクティブは
- Apache の子プロセスの権限を設定するのに用いられます。
- 子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
- 可能な限り必要最小限の権限のみを持っているようにするべきです。</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- は、古いプロセスを停止して新しいプロセスを起動することによって、
- どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="MaxSpareServers" id="MaxSpareServers">MaxSpareServers</a> <a name="maxspareservers" id="maxspareservers">ディレクティブ</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>アイドルな子サーバプロセスの最大個数</td></tr>
<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="how-it-works" id="how-it-works">動作方法</a></h2>
+ <p>一つのコントロールプロセスが、
+ コネクションに対して listen して、しかるべき時に応答する
+ 子プロセスを起動します。Apache は常に幾つかの<dfn>スペア</dfn>
+ かアイドルなサーバプロセスを維持していて、それらは入ってきた
+ リクエストに応答できるように待機しています。
+ このようにしてクライアントは、リクエストが応答される前に、
+ 新しい子プロセスが fork されるのを待たなくてもよいように
+ なっています。</p>
+
+ <p>親プロセスがリクエストに応答するの子プロセスを
+ どのように生成するかは、
+ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
+ <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
+ <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code>,
+ <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
+ で調整します。一般的に、Apache は非常に自律的なので、
+ 大抵のサイトではこれらのディレクティブをデフォルト値から調整する
+ 必要はないでしょう。
+ 同時に 256 を超えるリクエストに応答しないといけないサイトでは、
+ <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
+ を増やす必要があるでしょう。
+ 一方、メモリの限られているサイトでは、スラッシング
+ (メモリとディスク間で何度もスワップ) が起こるのを防ぐために
+ <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
+ を減らす必要があるでしょう。プロセス生成のチューニングに関する
+ 詳しい情報は、<a href="../misc/perf-tuning.html">性能に関するヒント</a>
+ にあります。</p>
+
+ <p>通常 Unix では親プロセスは 80 番ポートにバインドするために
+ <code>root</code> で起動されますが、子プロセスやスレッドは
+ もっと低い権限のユーザで Apache によって起動されます。
+ <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> と
+ <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>
+ ディレクティブは
+ Apache の子プロセスの権限を設定するのに用いられます。
+ 子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
+ 可能な限り必要最小限の権限のみを持っているようにするべきです。</p>
+
+ <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
+ は、古いプロセスを停止して新しいプロセスを起動することによって、
+ どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。</p>
+</div>
</div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../de/mod/prefork.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
portların ayarlanması</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">Nasıl çalışır?</a></h2>
- <p>Bağlantıları dinleyip gerektiğinde onlara hizmet sunan çocuk süreçleri
- devreye almak tek bir denetim sürecinin sorumluluğundadır. Apache httpd
- daima, gelen isteklere hizmet vermeye hazır bekleyen en fazla sayıda
- sunucu sürecini <dfn>yedekte tutmaya</dfn> veya boşta bekletmeye
- çalışır. Bu suretle, istemcilere isteklerinin sunulması için yeni çocuk
- süreçlerin çatallanmasını beklemek gerekmez.</p>
-
- <p>Ana sürecin istekleri sunacak çocuk süreçleri oluşturma işlemini nasıl
- gerçekleştireceği <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>, <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code> ve <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> yönergeleri ile düzenlenir. Apache httpd
- kendiliğinden her duruma çok iyi uyum sağladığından, genelde, çoğu
- sitenin bu yönergelerin öntanımlı değerlerini değiştirmesi gerekmez.
- Aynı anda 256’dan fazla isteğe hizmet sunacak sitelerin <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> değerini arttırmaları
- gerekebilir. Ancak, fiziksel belleği yeterli olmayan sitelerin de
- sunucunun belleği diske takaslamasını önlemek için bu değeri
- azaltmaları gerekebilir. Süreç oluşturmanın ayarlanması ile ilgili daha
- fazla bilgi edinmek için <a href="../misc/perf-tuning.html">başarım
- arttırma ipuçları</a> belgesine bakınız.</p>
-
- <p>Unix altında 80. portu dinleyebilmek için ana sürecin
- <code>root</code> tarafından çalıştırılmış olması gerekirse de çocuk
- süreçler Apache httpd tarafından daha az yetkili bir kullanıcının
- aidiyetinde çalıştırılırlar. Apache httpd’nin çocuk süreçlerinin
- kullanıcı ve gruplarını ayarlamak için <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> ve <code class="directive"><a href="../mod/mod_unixd.html#group">Group</a></code>
- yönergeleri kullanılır. Çocuk süreçlerin sunacakları içeriği okumaya
- yetkili olmaları gerekir, fakat bu yetkinin mümkün olduğunca kısıtlı
- tutulmasına çalışılmalıdır.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxconnectionsperchild">MaxConnectionsPerChild</a></code>
- yönergesi ana sunucunun eski süreçleri öldürüp yenilerini oluşturmayı
- ne kadar sıklıkla yapacağını denetler.</p>
-
- <p>Bu MPM, gürleyen sürü sorunu ortaya çıktığında (genelde çok sayıda
- dinlenen soket varlığında) gelen bağlantılara erişimi dizgileştirmek için
- <code>mpm-accept</code> muteksini kullanır. Bu muteksin gerçeklenimle
- ilgili hususları <code class="directive"><a href="../mod/core.html#mutex">Mutex</a></code> yönergesi ile
- yapılandırılabilir. Bu muteks hakkında ek bilgi için <a href="../misc/perf-tuning.html">başarımın arttırılması</a>
- belgesine bakınız.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="MaxSpareServers" id="MaxSpareServers">MaxSpareServers</a> <a name="maxspareservers" id="maxspareservers">Yönergesi</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Açıklama:</a></th><td>Boştaki çocuk süreçlerin azami sayısı</td></tr>
<li><code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code></li>
</ul>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="how-it-works" id="how-it-works">Nasıl çalışır?</a></h2>
+ <p>Bağlantıları dinleyip gerektiğinde onlara hizmet sunan çocuk süreçleri
+ devreye almak tek bir denetim sürecinin sorumluluğundadır. Apache httpd
+ daima, gelen isteklere hizmet vermeye hazır bekleyen en fazla sayıda
+ sunucu sürecini <dfn>yedekte tutmaya</dfn> veya boşta bekletmeye
+ çalışır. Bu suretle, istemcilere isteklerinin sunulması için yeni çocuk
+ süreçlerin çatallanmasını beklemek gerekmez.</p>
+
+ <p>Ana sürecin istekleri sunacak çocuk süreçleri oluşturma işlemini nasıl
+ gerçekleştireceği <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>, <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code> ve <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> yönergeleri ile düzenlenir. Apache httpd
+ kendiliğinden her duruma çok iyi uyum sağladığından, genelde, çoğu
+ sitenin bu yönergelerin öntanımlı değerlerini değiştirmesi gerekmez.
+ Aynı anda 256’dan fazla isteğe hizmet sunacak sitelerin <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> değerini arttırmaları
+ gerekebilir. Ancak, fiziksel belleği yeterli olmayan sitelerin de
+ sunucunun belleği diske takaslamasını önlemek için bu değeri
+ azaltmaları gerekebilir. Süreç oluşturmanın ayarlanması ile ilgili daha
+ fazla bilgi edinmek için <a href="../misc/perf-tuning.html">başarım
+ arttırma ipuçları</a> belgesine bakınız.</p>
+
+ <p>Unix altında 80. portu dinleyebilmek için ana sürecin
+ <code>root</code> tarafından çalıştırılmış olması gerekirse de çocuk
+ süreçler Apache httpd tarafından daha az yetkili bir kullanıcının
+ aidiyetinde çalıştırılırlar. Apache httpd’nin çocuk süreçlerinin
+ kullanıcı ve gruplarını ayarlamak için <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> ve <code class="directive"><a href="../mod/mod_unixd.html#group">Group</a></code>
+ yönergeleri kullanılır. Çocuk süreçlerin sunacakları içeriği okumaya
+ yetkili olmaları gerekir, fakat bu yetkinin mümkün olduğunca kısıtlı
+ tutulmasına çalışılmalıdır.</p>
+
+ <p><code class="directive"><a href="../mod/mpm_common.html#maxconnectionsperchild">MaxConnectionsPerChild</a></code>
+ yönergesi ana sunucunun eski süreçleri öldürüp yenilerini oluşturmayı
+ ne kadar sıklıkla yapacağını denetler.</p>
+
+ <p>Bu MPM, gürleyen sürü sorunu ortaya çıktığında (genelde çok sayıda
+ dinlenen soket varlığında) gelen bağlantılara erişimi dizgileştirmek için
+ <code>mpm-accept</code> muteksini kullanır. Bu muteksin gerçeklenimle
+ ilgili hususları <code class="directive"><a href="../mod/core.html#mutex">Mutex</a></code> yönergesi ile
+ yapılandırılabilir. Bu muteks hakkında ek bilgi için <a href="../misc/perf-tuning.html">başarımın arttırılması</a>
+ belgesine bakınız.</p>
+</div>
</div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../de/mod/prefork.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |