diff options
author | Rich Bowen <rbowen@apache.org> | 2015-04-15 16:35:10 +0000 |
---|---|---|
committer | Rich Bowen <rbowen@apache.org> | 2015-04-15 16:35:10 +0000 |
commit | 9fed79814211668e00b799f50385a464a3bdbe6b (patch) | |
tree | 8852c66a37dfd64e16252424ec02a3d1a6ffc31b /docs/manual/mod/mod_lua.html.fr | |
parent | 2f339e75b0f5b8c22b2eb89b4dad38414c1a460e (diff) | |
download | httpd-9fed79814211668e00b799f50385a464a3bdbe6b.tar.gz |
Rebuilds Daniel's change to the order of directictives vs topics in
manual docs
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1673855 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'docs/manual/mod/mod_lua.html.fr')
-rw-r--r-- | docs/manual/mod/mod_lua.html.fr | 1328 |
1 files changed, 664 insertions, 664 deletions
diff --git a/docs/manual/mod/mod_lua.html.fr b/docs/manual/mod/mod_lua.html.fr index 168976d94f..0083ee299c 100644 --- a/docs/manual/mod/mod_lua.html.fr +++ b/docs/manual/mod/mod_lua.html.fr @@ -103,6 +103,670 @@ fonctionnement interne de httpd.</p> <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="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-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> + + + +</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>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> + + +</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> + +</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) + + -- 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 +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 /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>...</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> + +</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> + +</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. + + 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 +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">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 + +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> + + + +</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> + + <p>Exemple :</p> + +<pre class="prettyprint lang-config"># httpd.conf +LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</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 +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> + + <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="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-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> + +<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> + +<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-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-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 + 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> + +<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> +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="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> + + +</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> + + <div class="example"><h3>Exemples :</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">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> + +</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> + + <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> + + <dt>conn:</dt> <dd>idem request, mais attaché à connection_rec</dd> + + <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> + +</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> @@ -1329,670 +1993,6 @@ le cas des requêtes dynamiques, utilisez <code>db:prepare</code> ou </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-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> - - - -</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>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> - - -</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> - -</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) - - -- 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 -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 /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>...</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> - -</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> - -</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. - - 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 -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">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 - -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> - - - -</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> - - <p>Exemple :</p> - -<pre class="prettyprint lang-config"># httpd.conf -LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</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 -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> - - <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="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-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> - -<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> - -<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-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-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 - 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> - -<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> -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="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> - - -</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> - - <div class="example"><h3>Exemples :</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">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> - -</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> - - <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> - - <dt>conn:</dt> <dd>idem request, mais attaché à connection_rec</dd> - - <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> - -</div> </div> <div class="bottomlang"> <p><span>Langues Disponibles: </span><a href="../en/mod/mod_lua.html" hreflang="en" rel="alternate" title="English"> en </a> | |