mod_lua.xml.fr revision f538d09bef470e8f75f75ccb9e006733b2781764
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<!DOCTYPE modulesynopsis SYSTEM "/style/modulesynopsis.dtd">
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<?xml-stylesheet type="text/xsl" href="/style/manual.fr.xsl"?>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<!-- English Revision: 1355934:1366891 (outdated) -->
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<!-- French translation : Lucien GENTIS -->
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<!-- Reviewed by : Vincent Deffontaines -->
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff Licensed to the Apache Software Foundation (ASF) under one or more
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff contributor license agreements. See the NOTICE file distributed with
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff this work for additional information regarding copyright ownership.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff The ASF licenses this file to You under the Apache License, Version 2.0
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff (the "License"); you may not use this file except in compliance with
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff the License. You may obtain a copy of the License at
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff Unless required by applicable law or agreed to in writing, software
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff distributed under the License is distributed on an "AS IS" BASIS,
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff See the License for the specific language governing permissions and
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff limitations under the License.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<description>Fournit des points d'entrée Lua dans différentes parties du
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Grafftraitement des requêtes httpd</description>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<compatibility>versions 2.3 et supérieures</compatibility>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p>Ce module permet d'ajouter au serveur des extensions sous forme de
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffscripts écrits dans le langage de programmation Lua.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<module>mod_lua</module> fournit de nombreuses extensions
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff(hooks) disponibles avec les modules natifs du serveur HTTP Apache,
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffcomme les associations de requêtes à des fichiers, la génération de
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffréponses dynamiques, le contrôle d'accès, l'authentification et
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffl'autorisation.</p>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p>Vous trouverez davantage d'informations à propos du langage de
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffprogrammation Lua sur <a href="http://www.lua.org/">le site web de
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<note><code>mod_lua</code> est encore au stade expérimental. Son mode
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffd'utilisation et son comportement pourront changer à tout moment jusqu'à
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffce qu'il passe au stade stable, et ce même entre deux versions stables
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff2.4.x. N'oublez pas de consulter le fichier CHANGES avant toute mise à
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<section id="basicconf"><title>Configuration de base</title>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p>La directive de base pour le chargement du module est</p>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<code>mod_lua</code> fournit un gestionnaire nommé
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<code>lua-script</code> qui peut être utilisé avec une directive
599c6d44f4d41aab5d3da98214492eb26e674b65Michael GraffAddHandler lua-script .lua
599c6d44f4d41aab5d3da98214492eb26e674b65Michael GraffCeci aura pour effet de faire traiter les requêtes pour les fichiers
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffdont l'extension est <code>.lua</code> par <code>mod_lua</code> en
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffinvoquant cette fonction de <code>gestion</code> de fichier.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p>Pour plus de détails, voir la directive
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<section id="writinghandlers"><title>Ecrire des gestionnaires</title>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p>Dans l'API du serveur HTTP Apache, un gestionnaire est une sorte de
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffpoint d'accroche (hook) spécifique responsable de la génération de la
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffréponse. <module>mod_proxy</module>, <module>mod_cgi</module> et
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<module>mod_status</module> sont des exemples de modules comportant un
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffgestionnaire.</p>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p><code>mod_lua</code> cherche toujours à invoquer une fonction Lua pour le
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffgestionnaire, plutôt que de simplement évaluer le corps d'un script dans
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffle style de CGI. Une fonction de gestionnaire se présente comme suit :</p>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff-- exemple de gestionnaire
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffrequire "string"
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff Il s'agit du nom de méthode par défaut pour les gestionnaires Lua ;
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff voir les noms de fonctions optionnels dans la directive
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff LuaMapHandler pour choisir un point d'entrée différent.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Grafffunction handle(r)
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff r:puts("Hello Lua World!\n")
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff if r.method == 'GET' then
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff for k, v in pairs( r:parseargs() ) do
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff r:puts( string.format("%s: %s\n", k, v) )
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff elseif r.method == 'POST' then
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff for k, v in pairs( r:parsebody() ) do
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff r:puts( string.format("%s: %s\n", k, v) )
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff r:puts("Unsupported HTTP method " .. r.method)
599c6d44f4d41aab5d3da98214492eb26e674b65Michael GraffCe gestionnaire se contente d'afficher les arguments codés d'un uri ou
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffd'un formulaire dans un page au format texte.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael GraffCela signifie que vous pouvez (et êtes encouragé à) avoir plusieurs
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffgestionnaires (ou points d'entrée, ou filtres) dans le même script.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<title>Ecriture de fournisseurs d'autorisation</title>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p><module>mod_authz_core</module> fournit une interface d'autorisation
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffde haut niveau bien plus facile à utiliser que dans les hooks
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffcorrespondants. Le premier argument de la directive <directive
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffmodule="mod_authz_core">Require</directive> permet de spécifier le
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Grafffournisseur d'autorisation à utiliser. Pour chaque directive <directive
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<module>mod_authz_core</module> appellera le fournisseur d'autorisation
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffspécifié, le reste de la ligne constituant les paramètres. Le
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Grafffournisseur considéré va alors vérifier les autorisations et fournir le
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffrésultat dans une valeur de retour.</p>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p>En général, le fournisseur authz est appelé avant l'authentification.
599c6d44f4d41aab5d3da98214492eb26e674b65Michael GraffS'il doit connaître le nom d'utilisateur authentifié (ou si
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffl'utilisateur est appelé à être authentifié), le fournisseur doit
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffrenvoyer <code>apache2.AUTHZ_DENIED_NO_USER</code>, ce qui va
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffdéclancher le processus d'authentification et un deuxième appel du
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Grafffournisseur authz.</p>
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graff<p>La fonction du fournisseur authz ci-dessous accepte deux arguments,
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffune adresse IP et un nom d'utilisateur. Elle autorise l'accès dans le
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffcas où la requête provient de l'adresse IP spécifiée, ou si
599c6d44f4d41aab5d3da98214492eb26e674b65Michael Graffl'utilisateur authentifié correspond au second argument :</p>
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
return apache2.AUTHZ_DENIED
LuaAuthzProvider foo authz_provider.lua authz_check_foo
if r.uri == "/translate-name" then
return apache2.OK
return apache2.DECLINED
un apache2.DECLINED pour permettre à un autre interpréteur d'URL de
if r.uri == "/translate-name" then
return apache2.DECLINED
return apache2.DECLINED
les mêmes champs que la structure request_rec (voir httpd.h en
<dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2
ou une constante définie dans le module apache2 : apache2.OK,
d'entre eux renvoie apache2.OK. Si un hook n'effectuer pas la
traduction, il doit juste renvoyer apache2.DECLINED. Si le
if r.uri == "/" then
return apache2.OK
return apache2.DECLINED
auth = r.headers_in['Authorization']
r.user = 'foo'
if r.user == nil then
r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
elseif r.user == "foo" then
r:debug("authcheck: user='" .. r.user .. "'")
r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
return apache2.OK
LuaAuthzProvider foo authz.lua authz_check_foo