From: Lucien Gentis Date: Sat, 25 Aug 2012 20:51:18 +0000 (+0000) Subject: Updates. X-Git-Tag: 2.5.0-alpha~6383 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfbe5a63d14f833420926de216d5c369d067aad7;p=thirdparty%2Fapache%2Fhttpd.git Updates. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1377354 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/docs/manual/content-negotiation.xml.fr b/docs/manual/content-negotiation.xml.fr index f645ca1a35a..fe3dcd08928 100644 --- a/docs/manual/content-negotiation.xml.fr +++ b/docs/manual/content-negotiation.xml.fr @@ -3,7 +3,7 @@ - + + @@ -52,6 +52,15 @@ ce qu'il passe au stade stable, et ce même entre deux versions stables 2.4.x. N'oublez pas de consulter le fichier CHANGES avant toute mise à jour. +Avertissement +

Ce module possède une grande capacité d'action sur le fonctrionnement +de httpd, ce qui lui confère une grande puissance, mais peut aussi +induire un risque de sécurité. Il est déconseillé d'utiliser ce module +sur un serveur partagé avec des utilisateurs auxquels vous ne pouvez pas +accorder une confiance absolue, car il peut permettre de modifier le +fonctionnement interne de httpd.

+
+
Configuration de base @@ -196,13 +205,93 @@ LuaAuthzProvider foo authz_provider.lua authz_check_foo 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. Il existe aussi des accroches à usage -général qui s'exécutent simplement à des moments opportuns du cycle -de vie de la requête.

- -

Les fonctions d'accroche acceptent l'objet de la requête comme seul -et unique argument. Elles peuvent renvoyer une valeur, selon la -fonction, mais il s'agit en général d'un +ou la définition de types MIME :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Phase d'accrocheDirective mod_luaDescription
Gestionnaire rapideLuaQuickHandlerIl s'agit de la première accroche appelée lorsqu'une requête + a été associée à un serveur ou un serveur virtuel.
Phase de traductionLuaHookTranslateNameCette phase traduit l'URI de la requête en nom de fichier + sur le système. Ce sont des modules comme + mod_alias et mod_rewrite qui + interviennent au cours de cette phase.
Choix du lieu de stockage de la ressourceLuaHookMapToStorageCette 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.
Autorisation d'accèsLuaHookAccessCheckerCette 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. +
Vérification de l'identifiant utilisateurLuaHookCheckUserIDCette phase vérifie l'identifiant de l'utilisateur ayant + fait l'objet d'une négociation.
Vérification de l'autorisation d'accèsLuaHookAuthChecker + ou + LuaAuthzProviderCette 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... +
Vérification du type de la ressourceLuaHookTypeCheckerCette phase assigne un type de contenu et un gestionnaire à + la ressource.
Derniers réglagesLuaHookFixupsC'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.
Gestionnaire de contenufichiers fx. .lua ou directive LuaMapHandlerC'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.
JournalisationaucuneLorsqu'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.
+ +

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 apache2.OK, apache2.DONE, ou apache2.DECLINED.

@@ -233,8 +322,8 @@ end travailler sur la substitution, y compris l'accroche translate_name de base dont les tables de correspondances se basent sur DocumentRoot. - Note: actuellement, il est impossible de prévoir si cette action - s'exécute avant ou après mod_alias. + Note: utilisez le drapeau early/late de la directive pour + l'exécuter avant ou après mod_alias. --]] require 'apache2' @@ -257,177 +346,338 @@ end

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 (voir httpd.h en - attendant que cette documentation soit plus complète), la + 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).

- +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nom Type Lua ModifiableDescription
allowoverridesstringnonL'option AllowOverride s'applique à la requête courante.
ap_auth_type string nonCe champ contient le type d'authentification effectuée + (par exemple basic)
args string ouiLa chaîne de paramètres de la requête (par exemple + foo=bar&name=johnsmith)
assbackwards boolean noncontient true s'il s'agit d'une requête de style HTTP/0.9 + (par exemple GET /foo (sans champs d'en-tête) )
auth_namestringnonLa chaîne d'identification utilisée pour la vérification + de l'autorisation d'accès (si elle est disponible).
bannerstringnonLa bannière du serveur, par exemple Apache HTTP + Server/2.4.3 openssl/0.9.8c
basic_auth_pwstringnonLe mot de passe pour l'authentification de base envoyé + avec la requête, s'il existe
canonical_filename string nonLe nom de fichier canonique de la requête
content_encoding string nonLe type de codage du contenu de la requête courante
content_type string ouiLe type de contenu de la requête courante, tel qu'il a été + déterminé au cours de la phase type_check (par exemple + image/gif ou text/html)
context_prefix string non
context_document_root string non
document_root string nonLa racine des documents du serveur
err_headers_out table nonL'en-tête MIME de l'environnement pour la réponse, écrit + même en cas d'erreur et conservé pendant les redirections + internes
filename string ouiLe 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.
handler string ouiLe nom du gestionnaire qui + doit traiter la requête, par exemple lua-script + si elle doit être traitée par mod_lua. Cette valeur est en + général définie via les directives AddHandler ou SetHandler, 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. +
headers_in table ouiLes en-têtes MIME de l'environnement de la requête. Il + s'agit des en-têtes comme Host, User-Agent, + Referer, etc...
headers_out table ouiLes en-têtes MIME de l'environnement de la réponse.
hostname string nonLe nom d'hôte, tel que défini par l'en-tête + Host: ou par un URI complet.
is_httpsbooleannonIndique si la requête à été faite via HTTPS
is_initial_reqbooleannonIndique si la requête courante est la requête initiale ou + une sous-requête.
limit_req_bodynumbernonLa taille maximale du corps de la requête, ou 0 si aucune + limite.
log_id string nonL'identifiant de la requête dans les journaux d'accès ou + d'erreur.
method string nonLa méthode de la requête, par exemple GET ou + POST.
notes table ouiUne liste de notes qui peuvent être transmises d'un module + à l'autre.
optionsstringnonLa valeur de la directive Options pour la requête + courante.
path_info string nonLa valeur de PATH_INFO extraite de la requête.
portnumbernonLe port du serveur utilisé par la requête.
protocol string nonLe protocole utilisé, par exemple HTTP/1.1
proxyreq string ouiIndique 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.
range string nonLe contenu de l'en-tête Range:.
remainingnumbernonLe nombre d'octets du corps de la requête restant à lire.
server_builtstringnonLa date de compilation du serveur.
server_namestringnonLe nom du serveur pour cette requête.
some_auth_requiredbooleannonIndique si une autorisation est/était requise pour cette + requête.
subprocess_env table ouiLe jeu de variables d'environnement pour cette requête.
startednumbernonLe moment où le serveur a été (re)démarré, en secondes + depuis epoch (1er janvier 1970)
status number ouiLe code de retour (courant) pour cette requête, par + exemple 200 ou 404.
the_request string nonLa chaîne de la requête telle qu'elle a été envoyée par le + client, par exemple GET /foo/bar HTTP/1.1.
unparsed_uri string nonLa partie URI non interprétée de la requête
uri string ouiL'URI après interprétation par httpd
user string ouiSi une authentification a été effectuée, nom de + l'utilisateur authentifié.
useragent_ip string nonL'adresse IP de l'agent qui a envoyé la requête

La structure request_rec possède (au minimum) les méthodes suivantes :

+ + r:flush() -- vide le tampon de sortie + + r:addoutputfilter(name|function) -- ajoute un filtre en sortie + + r:sendfile(filename) -- envoie un fichier entier au client en + utilisant sendfile s'il est supporté par la plateforme + + r:parseargs() -- renvoie une table Lua contenant la chaîne d'arguments de la requête @@ -435,8 +685,10 @@ end - r:parsebody() -- interprète toutes données POST de la requête et - les renvoie sous forme de table Lua + r:parsebody()([sizeLimit]) -- interprète le corps de la requête + en tant que POST et renvoie une table lua. Un nombre optionnel + peut être fourni pour spécifier le nombre maximal d'octets à + interpréter. La valeur par défaut est 8192. @@ -448,6 +700,11 @@ end r:write("une simple chaîne") -- affichage dans le corps de la réponse + + + r:escape_html("<html>test</html>") -- Echappe le + code HTML et renvoie le résultat + @@ -489,6 +746,9 @@ contenu suivant :

Code d'état HTTP
apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE
Constantes internes utilisées par mod_proxy
+
apache2.AUTHZ_DENIED, apache2.AUTHZ_GRANTED, apache2.AUTHZ_NEUTRAL, apache2.AUTHZ_GENERAL_ERROR, apache2.AUTHZ_DENIED_NO_USER
+
constantes internes utilisées par mod_authz_core
+

Les autres codes d'état HTTP ne sont pas encore implémentés.

@@ -516,9 +776,9 @@ relatifs dans les directives de mod_lua LuaScope -Une valeur parmi once, request, conn, server -- la valeur +Une valeur parmi once, request, conn, thread -- la valeur par défaut est once -LuaScope once|request|conn|server [max|min max] +LuaScope once|request|conn|thread|server [min] [max] LuaScope once server configvirtual host directory.htaccess @@ -539,13 +799,32 @@ par défaut est once
conn:
idem request, mais attaché à connection_rec
+
thread:
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).
+
server:
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 interpréteurs sont stockés dans une liste de ressources - apr. Les arguments min et max ont été prévus pour spécifier une - taille de jeu, mais sont inutilisés pour le moment.
+ ceci, les états lua du serveur sont stockés dans une liste de ressources + apr. Les arguments min et max permettent + de spécifier les nombres minimaux et maximaux d'états lua à stocker + dans la liste. +

En général, les portées thread et server + 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 + thread ou server doivent être utilisées car + elles présenteront de meilleures performances. Alors que la portée + thread fournira les réponses les plus rapides, la portée + server 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 thread. +

@@ -628,7 +907,8 @@ LuaPackagePath /scripts/lib/?/init.lua Configure le cache de code compilé. LuaCodeCache stat|forever|never LuaCodeCache stat -server configvirtual host + +server configvirtual host directory.htaccess All @@ -664,7 +944,6 @@ LuaCodeCache never traduction du traitement de la requête LuaHookTranslateName /chemin/vers/lua/script.lua nom_fonction_hook [early|late] server configvirtual host -directory All Le troisième argument optionnel est disponible depuis la @@ -742,7 +1021,48 @@ traitement de la requête directory.htaccess All -

...

+ +

Identique à la directive + LuaHookTranslateName, 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 :

+ + LuaHookMapToStorage /path/to/lua/script.lua check_cache + + +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 -- 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 + + +
@@ -893,12 +1213,22 @@ parentes sont fusionnées dans les enfants LuaQuickHandler Fournit un point d'entrée pour la gestion rapide du traitement de la requête - +LuaQuickHandler /path/to/script.lua hook_function_name server configvirtual host directory.htaccess All -

...

+ +

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 Location ou + Directory ne + sont pas encore prises en compte, car Les URI n'ont pas encore été + entièrement interprétés. +

Contexte

Cette directive ne peut être utilisée ni à l'intérieur d'une section Directory ou LuaAuthzProvider provider_name /path/to/lua/script.lua function_name server config -Disponible depuis la version 2.5.0 du serveur HTTP Apache +Disponible depuis la version 2.4.3 du serveur HTTP Apache

Lorsqu'une fonction lua a été enregistrée en tant que fournisseur d'autorisation, elle peut être appelée via la directive Require :

- + LuaRoot /usr/local/apache2/lua LuaAuthzProvider foo authz.lua authz_check_foo <Location /> - Require foo bar + Require foo johndoe </Location> - + +require "apache2" +function authz_check_foo(r, who) + if r.user ~= who then return apache2.AUTHZ_DENIED + return apache2.AUTHZ_GRANTED +end +