From 906c370c6282bab88553a917557b19ea523e92ab Mon Sep 17 00:00:00 2001
From: Lucien Gentis Tout fichier pris en compte par le gestionnaire
- Comme introduction à l'utilisation des scripts CGI avec Apache,
+ Comme introduction à l'utilisation des scripts CGI avec Apache,
voir notre tutoriel Les contenus
dynamiques avec CGI. Le module Le module À des fins de compatibilité ascendante, le gestionnaire
- cgi-script sera également activé pour tout fichier possédant le type
+ à des fins de compatibilité ascendante, le gestionnaire
+ cgi-script sera également activé pour tout fichier possédant le type
MIME cgi-script
sera traité en tant que script CGI et
- exécuté par le serveur, sa sortie étant renvoyée au client. Les
- fichiers sont associés à ce gestionnaire soit parce qu'ils possèdent
- un nom contenant une extension définie par la directive application/x-httpd-cgi
. L'utilisation du type
- MIME magic est obsolète.
Le serveur va définir les variables d'environnement CGI comme - décrit dans la Spécification CGI, de la - manière suivante :
+Le serveur va définir les variables d'environnement CGI comme + décrit dans la Spécification CGI, de la + manière suivante :
off
. Par défaut, si la
- directive off
. Par défaut, si la
+ directive On
.On
.
on
(elle est à off
par défaut), et si
- une recherche DNS inverse sur l'adresse IP de l'hôte client
- aboutit effectivement à un nom d'hôte.on
(elle est à off
par défaut), et si
+ une recherche DNS inverse sur l'adresse IP de l'hôte client
+ aboutit effectivement à un nom d'hôte.on
, et si l'hôte client supporte le
+ est définie à on
, et si l'hôte client supporte le
protocole ident. Notez que l'on ne peut accorder une confiance
- aveugle au contenu de cette variable car il peut être aisément
- falsifié, et si un mandataire s'intercale entre le client et le
+ aveugle au contenu de cette variable car il peut être aisément
+ falsifié, et si un mandataire s'intercale entre le client et le
serveur, il est totalement inutilisable.Ce module utilise aussi les fonctions de base ap_add_common_vars + et ap_add_cgi_vars + pour ajouter des variables d'environnement comme :
+Pour une liste exhaustive de ces variables, vous pouvez écrire un script + CGI basique qui extrait toutes les variables d'environnement passées par + Apache selon un format adapté. +
Le débogage des scripts CGI était difficile par le passé,
- principalement parce qu'il n'était pas possible d'étudier la sortie
- (sortie standard et erreurs) des scripts dont l'exécution échouait.
- Ces directives permettent une journalisation plus détaillée des
+ Le débogage des scripts CGI était difficile par le passé,
+ principalement parce qu'il n'était pas possible d'étudier la sortie
+ (sortie standard et erreurs) des scripts dont l'exécution échouait.
+ Ces directives permettent une journalisation plus détaillée des
erreurs. Lorsqu'il est configuré, le journal des erreurs CGI enregistre
- la sortie de tout programme CGI dont l'exécution ne s'effectue pas
- correctement. Un script CGI dont l'exécution échoue provoque la
- journalisation d'une grande quantité d'informations. Les deux
- premières lignes possèdent toujours le format suivant : Lorsqu'il est configuré, le journal des erreurs CGI enregistre
+ la sortie de tout programme CGI dont l'exécution ne s'effectue pas
+ correctement. Un script CGI dont l'exécution échoue provoque la
+ journalisation d'une grande quantité d'informations. Les deux
+ premières lignes possèdent toujours le format suivant : Si le script CGI n'a pas pu démarrer, le fichier journal
- contiendra les deux lignes supplémentaires suivantes : Si le script CGI n'a pas pu démarrer, le fichier journal
+ contiendra les deux lignes supplémentaires suivantes :
- %% état HTTP nom du script CGI
+ %% [date] requête
+ %% état HTTP nom du script CGI
@@ -138,16 +167,16 @@ CGI
Par contre, si l'erreur provient du renvoi par le script - d'informations incorrectes dans les en-têtes (dû souvent à une - bogue du script), les informations suivantes sont journalisées + d'informations incorrectes dans les en-têtes (dû souvent à une + bogue du script), les informations suivantes sont journalisées :
(Les parties %stdout et %stderr seront absentes si le script - n'a rien envoyé sur la sortie standard ou la sortie + n'a rien envoyé sur la sortie standard ou la sortie d'erreurs).
@@ -171,13 +200,13 @@ CGILa directive
La directive
Ce journal sera ouvert par l'utilisateur sous lequel les
- processus enfants s'exécutent, c'est à dire l'utilisateur spécifié
+ processus enfants s'exécutent, c'est à dire l'utilisateur spécifié
par la directive du serveur
Notez que l'on ne doit activer la journalisation des scripts - qu'à des fins de débogage lors de l'écriture de scripts CGI, et non - de manière permanente sur un serveur en production. Elle n'est pas - optimisée en ce qui concerne la vitesse et l'efficacité, et peut - présenter des problèmes de sécurité si on l'utilise dans un cadre - autre que celui pour lequel elle a été conçue.
+ qu'à des fins de débogage lors de l'écriture de scripts CGI, et non + de manière permanente sur un serveur en production. Elle n'est pas + optimisée en ce qui concerne la vitesse et l'efficacité, et peut + présenter des problèmes de sécurité si on l'utilise dans un cadre + autre que celui pour lequel elle a été conçue.La directive
Cette directive limite la taille du corps de toute - entité PUT ou POST qui sera enregistrée dans le journal, afin - de prévenir une croissance trop importante et trop rapide du fichier - journal due à la réception de corps de requête de grandes tailles. + entité PUT ou POST qui sera enregistrée dans le journal, afin + de prévenir une croissance trop importante et trop rapide du fichier + journal due à la réception de corps de requête de grandes tailles. Cette directive modifie cette taille maximale, dont la - valeur par défaut est de 1024 octets.
+ valeur par défaut est de 1024 octets.Le module
Le module DEFLATE
qui permet de comprimer la sortie de
- votre serveur avant de l'envoyer au client sur le réseau.
Le seul codage supporté est Le seul codage supporté est gzip
afin d'assurer une complète
- compatibilité avec les anciens navigateurs. Le codage deflate
- n'est donc pas supporté ; voir à ce sujet la gzip
afin d'assurer une complète
+ compatibilité avec les anciens navigateurs. Le codage deflate
+ n'est donc pas supporté ; voir à ce sujet la documentation de zlib
- pour une explication détaillée.
+ pour une explication détaillée.
Certaines applications web sont vulnérables à une attaque pour +
Certaines applications web sont vulnérables à une attaque pour vol d'informations lorsqu'une connexion TLS transporte des - données compressées par deflate. Pour plus de détails, + données compressées par deflate. Pour plus de détails, documentez-vous sur la famille d'attaques "BREACH".
Voici un exemple simple de configuration qui permet de comprimer - les types de contenu à base de texte.
+ les types de contenu à base de texte.Certaines applications web sont vulnérables à une attaque pour +
Certaines applications web sont vulnérables à une attaque pour vol d'informations lorsqu'une connexion TLS transporte des - données compressées par deflate. Pour plus de détails, + données compressées par deflate. Pour plus de détails, documentez-vous sur la famille d'attaques "BREACH".
La compression est implémentée par le La compression est implémentée par le filtre DEFLATE
. La
directive suivante active la compression des documents dans le
- conteneur où elle est placée :
Si vous voulez limiter la compression à certains types MIME +
Si vous voulez limiter la compression à certains types MIME
particuliers, vous pouvez utiliser la directive
DEFLATE
est toujours inséré après les
+ Le filtre DEFLATE
est toujours inséré après les
filtres RESOURCE comme PHP ou SSI. Il n'affecte jamais les
- sous-requêtes internes.
+ sous-requêtes internes.
force-gzip
, définie à
+ La variable d'environnement force-gzip
, définie Ã
l'aide de la directive Le module INFLATE
dans la chaîne de filtrage en sortie via la
+ permettant de décomprimer un corps de réponse comprimé par gzip.
+ Pour activer cette fonctionnalité, vous devez insérer le filtre
+ INFLATE
dans la chaîne de filtrage en sortie via la
directive
Dans cet exemple, les sorties comprimées par gzip en - provenance de example.com seront décomprimées afin de pouvoir - être éventuellement traitées par d'autres filtres. +
Dans cet exemple, les sorties comprimées par gzip en + provenance de example.com seront décomprimées afin de pouvoir + être éventuellement traitées par d'autres filtres.
Le module Le module Désormais, si une requête contient un en-tête
+ Désormais, si une requête contient un en-tête
Si vous évaluez vous-même la taille du corps de requête,
- ne faites pas confiance à l'en-tête
- Si vous évaluez vous-même la taille du corps de requête,
+ ne faites pas confiance à l'en-tête
+ DEFLATE
dans la chaîne de filtrage en entrée via la
+ DEFLATE
dans la chaîne de filtrage en entrée via la
directive Content-Encoding: gzip
, son corps sera
- automatiquement décomprimé. Peu de navigateurs sont actuellement
- en mesure de comprimer les corps de requêtes. Cependant,
- certaines applications spécialisées supportent les requêtes
- comprimées, comme par exemple certains clients WebDAV.Content-Length
Content-Length
! L'en-tête
- Content-Length indique la longueur des données en provenance du
- client, et non la quantité d'octets que représente le
- flux de données décompressé.Content-Length
! L'en-tête
+ Content-Length indique la longueur des données en provenance du
+ client, et non la quantité d'octets que représente le
+ flux de données décompressé.
Le module Vary: Accept-Encoding
pour avertir les
- mandataires qu'une réponse enregistrée dans le cache ne doit être
- envoyée qu'aux clients qui ont envoyé l'en-tête de requête
- Accept-Encoding
approprié. Ceci permet d'éviter l'envoi
- d'un contenu comprimé à un client qui ne sera pas en mesure
- de l'interpréter.
Si vous avez défini des exclusions spécifiques dépendant, par
- exemple, de l'en-tête User-Agent
, vous devez
- ajouter manuellement des données à l'en-tête Vary
afin
- d'informer les mandataires des restrictions supplémentaires. Par
- exemple, dans la configuration classique où l'addition du filtre
- DEFLATE
dépend du contenu de l'en-tête
- User-Agent
, vous devez spécifier :
Le module Vary: Accept-Encoding
pour avertir les
+ mandataires qu'une réponse enregistrée dans le cache ne doit être
+ envoyée qu'aux clients qui ont envoyé l'en-tête de requête
+ Accept-Encoding
approprié. Ceci permet d'éviter l'envoi
+ d'un contenu comprimé à un client qui ne sera pas en mesure
+ de l'interpréter.
Si vous avez défini des exclusions spécifiques dépendant, par
+ exemple, de l'en-tête User-Agent
, vous devez
+ ajouter manuellement des données à l'en-tête Vary
afin
+ d'informer les mandataires des restrictions supplémentaires. Par
+ exemple, dans la configuration classique où l'addition du filtre
+ DEFLATE
dépend du contenu de l'en-tête
+ User-Agent
, vous devez spécifier :
Si votre décision de comprimer le contenu dépend d'autres
- informations que celles contenues dans les en-têtes de la requête
- (par exemple la version HTTP), vous devez attribuer à l'en-tête
- Vary
la valeur *
, ce qui permet d'empêcher
+
Si votre décision de comprimer le contenu dépend d'autres
+ informations que celles contenues dans les en-têtes de la requête
+ (par exemple la version HTTP), vous devez attribuer à l'en-tête
+ Vary
la valeur *
, ce qui permet d'empêcher
les mandataires compatibles de tout mettre en cache.
Comme
Comme
La directive
Pour extraire des informations plus précises de vos journaux, - vous pouvez utiliser l'argument type pour spécifier le - type de données de la note enregistrée dans le journal. +
Pour extraire des informations plus précises de vos journaux, + vous pouvez utiliser l'argument type pour spécifier le + type de données de la note enregistrée dans le journal. type peut prendre une des valeurs suivantes :
Input
Output
Ratio
sortie/entrée *
- 100
) dans la note. Il s'agit de la valeur par défaut si
+ sortie/entrée *
+ 100
) dans la note. Il s'agit de la valeur par défaut si
l'argument type est omis.Vous pouvez donc configurer votre journalisation de la manière +
Vous pouvez donc configurer votre journalisation de la manière suivante :
-La directive
Transfer-Encoding
prend la valeur
+ Chunked
), ceci ayant comme effet de bord de ne définir aucun
+ en-tête HTTP Content-Length
. Il est important de connaître ce
+ comportement, particulièrement lorsque httpd travaille derrière des
+ mandataires inverses avec mise en cache, ou lorsque httpd est configuré pour
+ utiliser Content-Length
peuvent ne pas
+ être mises en cache.
La directive
La directive
La directive
La valeur doit être comprise entre 1 (compression minimale) et 9 +
La valeur doit être comprise entre 1 (compression minimale) et 9 (compression maximale).
La directive
Ajoute la méthode de compression à la fin de l'en-tête, ce - qui a pour effet d'attribuer un en-tête ETag unique aux - représentations compressées et non compressées. C'est l'option par - défaut depuis la version 2.4.0, mais empêche de servir des - codes d'état "HTTP Not Modified" (304) en réponse aux requêtes pour un - contenu compressé.
Ajoute la méthode de compression à la fin de l'en-tête, ce + qui a pour effet d'attribuer un en-tête ETag unique aux + représentations compressées et non compressées. C'est l'option par + défaut depuis la version 2.4.0, mais empêche de servir des + codes d'état "HTTP Not Modified" (304) en réponse aux requêtes pour un + contenu compressé.
Ne modifie pas l'en-tête ETag dans une réponse compressée. - C'était l'option par - défaut avant la version 2.4.0, mais cela ne respectait pas la - préconisation HTTP/1.1 selon laquelle chaque représentation de la - même ressource doit posséder un en-tête ETag unique.
Ne modifie pas l'en-tête ETag dans une réponse compressée. + C'était l'option par + défaut avant la version 2.4.0, mais cela ne respectait pas la + préconisation HTTP/1.1 selon laquelle chaque représentation de la + même ressource doit posséder un en-tête ETag unique.
Supprime l'en-tête ETag dans les réponses compressées, ce qui - a pour effet de rendre impossibles certaines requêtes - conditionnelles, mais permet d'éviter les inconvénients des options - précédentes.
Supprime l'en-tête ETag dans les réponses compressées, ce qui + a pour effet de rendre impossibles certaines requêtes + conditionnelles, mais permet d'éviter les inconvénients des options + précédentes.
La directive
La directive
La directive
Le module
Le module
Les directives sont interprétées selon l'ordre dans lequel elles - apparaîssent dans les fichiers de configuration. Ainsi, des - séquences plus complexes peuvent être utilisées, comme dans cet - exemple qui définit netscape si le navigateur est Mozilla et non + caractéristique de la requête correspond ou non aux expressions + rationnelles que vous spécifiez. Ces variables d'environnement + peuvent être utilisées par d'autres parties du serveur pour prendre + des décisions quant aux actions à entreprendre, et pour déterminer + si les scripts CGI et les pages SSI doivent pouvoir y accéder.
+ +Les directives sont interprétées selon l'ordre dans lequel elles + apparaîssent dans les fichiers de configuration. Ainsi, des + séquences plus complexes peuvent être utilisées, comme dans cet + exemple qui définit netscape si le navigateur est Mozilla et non MSIE.
Lorsque le serveur cherche un chemin via une
La directive User-Agent
. Les deux lignes suivantes produisent le même
+ module="mod_setenvif">SetEnvIf, qui définit des variables
+ d'environnement en fonction du contenu de l'en-tête de requête HTTP
+ User-Agent
. Les deux lignes suivantes produisent le même
effet :
Quelques exemples supplémentaires :
+Quelques exemples supplémentaires :
La directive
La directive
La directive
Host
,
+ plus d'information à leur propos) ; par exemple : Host
,
User-Agent
, Referer
, ou
Accept-Language
. Il est possible d'utiliser une
- expression rationnelle pour spécifier un jeu d'en-têtes de
- requête.Remote_Host
- le nom d'hôte (s'il est disponible)
- du client qui effectue la requêteRemote_Host
- le nom d'hôte (s'il est disponible)
+ du client qui effectue la requêteRemote_Addr
- l'adresse IP du client qui effectue
- la requêteServer_Addr
- l'adresse IP du serveur qui a reçu
- la requête (uniquement à partir des versions supérieures à
+ Server_Addr
- l'adresse IP du serveur qui a reçu
+ la requête (uniquement à partir des versions supérieures Ã
2.0.43)Request_Method
- Le nom de la méthode HTTP
- utilisée (GET
, POST
, et
+ Request_Method
- Le nom de la méthode HTTP
+ utilisée (GET
, POST
, et
cetera...)Request_Protocol
- le nom et la version du
- protocole utilisé pour la requête (par exemple "HTTP/0.9",
+ protocole utilisé pour la requête (par exemple "HTTP/0.9",
"HTTP/1.1", etc...)Request_URI
- la ressource demandée dans la ligne
- de requête HTTP -- en général la partie de l'URL suivant le
- protocole et le nom du serveur, sans la chaîne d'arguments. Voir
+ Request_URI
- la ressource demandée dans la ligne
+ de requête HTTP -- en général la partie de l'URL suivant le
+ protocole et le nom du serveur, sans la chaîne d'arguments. Voir
la directive SetEnvIf[NoCase]
précédentes sont disponibles pour
-effectuer des tests de cette manière. 'Précédentes' signifie qu'elles se
-trouvent à un niveau plus global de la configuration (par exemple au
+résultat de comparaisons précédentes. Seules les variables
+d'environnement définies par des directives
+SetEnvIf[NoCase]
précédentes sont disponibles pour
+effectuer des tests de cette manière. 'Précédentes' signifie qu'elles se
+trouvent à un niveau plus global de la configuration (par exemple au
niveau du serveur principal), ou plus haut chronologiquement dans le
contexte de la directive. Les variables d'environnement ne seront prises
-en compte que si aucune correspondance n'a été trouvée parmi les
-caractéristiques de la requête, et si attribut n'a pas été
-spécifié sous la forme d'une expression rationnelle.Le second argument (regex) est une
Le reste des arguments constitue les noms des variables à définir, -ainsi que les valeurs optionnelles qui doivent leur être affectées. Ils -peuvent se présenter sous les formes suivantes :
+Le reste des arguments constitue les noms des variables à définir, +ainsi que les valeurs optionnelles qui doivent leur être affectées. Ils +peuvent se présenter sous les formes suivantes :
nom-variable
, ornom-variable=valeur
Dans la première forme, la valeur sera définie à "1". Dans la
- seconde forme, la variable sera supprimée si elle a été définie au
- préalable, et dans la troisième forme, la variable sera définie à la
- valeur littérale spécifiée par valeur
. Depuis
- la version 2.0.51, Apache httpd reconnaît les occurrences de variables
- $1
..$9
à l'intérieur de
+
Dans la première forme, la valeur sera définie à "1". Dans la
+ seconde forme, la variable sera supprimée si elle a été définie au
+ préalable, et dans la troisième forme, la variable sera définie à la
+ valeur littérale spécifiée par valeur
. Depuis
+ la version 2.0.51, Apache httpd reconnaît les occurrences de variables
+ $1
..$9
à l'intérieur de
valeur
, et les remplace par les
- sous-expressions entre parenthèses correspondantes de
- regex.
$0
permet d'accéder à l'ensemble de la chaîne
+ qui correspond à ce modèle.
Les trois premières lignes définissent la variable +
Les trois premières lignes définissent la variable
d'environnement objet_est_une_image
si l'objet de la
- requête est un fichier image, et la quatrième définit la variable
- référant_intra_site
si la page référante se trouve
+ requête est un fichier image, et la quatrième définit la variable
+ référant_intra_site
si la page référante se trouve
quelque part dans le site web
www.mon-domaine.example.com
.
La dernière ligne définit la variable d'environnement
- HAVE_TS
si la requête contient un en-tête dont le nom
- commence par "TS" et dont la valeur commence par tout caractère du
+
La dernière ligne définit la variable d'environnement
+ HAVE_TS
si la requête contient un en-tête dont le nom
+ commence par "TS" et dont la valeur commence par tout caractère du
jeu [a-z].
La directive ap_expr
. Cette
- expression est évaluée à l'exécution, et utilise les variables
- d'environnement env-variable de la même manière que la
+ expression est évaluée à l'exécution, et utilise les variables
+ d'environnement env-variable de la même manière que la
directive
Dans cet exemple, la variable d'environnement
- iso_delivered
est définie chaque fois que notre
+ iso_delivered
est définie chaque fois que notre
application tente de l'envoyer via X-Sendfile
.
Il pourrait être plus utile de définir une variable rfc1918 si - l'adresse IP distante est une adresse privée au sens de la RFC 1918 +
Il pourrait être plus utile de définir une variable rfc1918 si + l'adresse IP distante est une adresse privée au sens de la RFC 1918 :
La directive
Cette ligne va définir la variable d'environnement +
Cette ligne va définir la variable d'environnement
site
avec la valeur "example
" si le champ
- d'en-tête de requête HTTP Host:
est présent et contient
+ d'en-tête de requête HTTP Host:
est présent et contient
Example.Org
, example.org
, ou une autre
- combinaison des mêmes caractères, sans tenir compte de la casse.
Sur les systèmes d'exploitation sélectionnés, ce module peut être - utilisé pour charger des modules dans le serveur HTTP Apache en cours d'exécution - grâce au mécanisme des Dynamic Shared Object ou Objets Partagés - Dynamiquement (DSO), et évite ainsi de devoir effectuer une +
Sur les systèmes d'exploitation sélectionnés, ce module peut être + utilisé pour charger des modules dans le serveur HTTP Apache en cours d'exécution + grâce au mécanisme des Dynamic Shared Object ou Objets Partagés + Dynamiquement (DSO), et évite ainsi de devoir effectuer une recompilation.
-Sous Unix, le code chargé provient en général de fichiers objet
- partagés possèdant en général l'extension .so
, alors
- que sous Windows, l'extension peut être soit .so
, soit
+
Sous Unix, le code chargé provient en général de fichiers objet
+ partagés possèdant en général l'extension .so
, alors
+ que sous Windows, l'extension peut être soit .so
, soit
.dll
.
En général, les modules compilés pour une version majeure du +
En général, les modules compilés pour une version majeure du serveur HTTP Apache ne fonctionneront pas avec une autre (par - exemple de 1.3 à 2.0 ou 2.0 à 2.2). D'une version majeure à l'autre, - il y a souvent des modifications d'API qui nécessitent des + exemple de 1.3 à 2.0 ou 2.0 à 2.2). D'une version majeure à l'autre, + il y a souvent des modifications d'API qui nécessitent des modifications du module pour qu'il puisse fonctionner avec la nouvelle version.
Sous Windows, où les modules chargeables possèdent en général +
Sous Windows, où les modules chargeables possèdent en général
l'extension de nom de fichier .dll
, les modules Apache
httpd se nomment mod_nom-module.so
, tout comme sur les
autres plates-formes. Vous trouverez cependant encore des modules
@@ -69,40 +69,40 @@ Windows
.dll
.
Bien que mod_so
puisse encore charger des modules
- possèdant un nom du style ApacheModuleFoo.dll
,
- il est préférable d'utiliser la
+ possèdant un nom du style ApacheModuleFoo.dll
,
+ il est préférable d'utiliser la
nouvelle convention de nommage ; si vous modifiez votre module
chargeable pour la version 2.0, veuillez aussi modifier son nom pour
respecter cette nouvelle convention.
Les API des modules Apache httpd sous Unix et Windows sont identiques. Alors que certains modules s'appuient sur certains - aspects de l'architecture Unix non présents dans Windows, et ne - fonctionneront donc pas sur cette dernière plate-forme, de nombreux + aspects de l'architecture Unix non présents dans Windows, et ne + fonctionneront donc pas sur cette dernière plate-forme, de nombreux modules fonctionnent sous Windows avec peu ou pas de modification - par rapport à leur version Unix.
+ par rapport à leur version Unix. -Lorsqu'un module fonctionne, il peut être ajouté au serveur de - deux manières. Sous Unix, il peut être compilé dans le serveur. +
Lorsqu'un module fonctionne, il peut être ajouté au serveur de
+ deux manières. Sous Unix, il peut être compilé dans le serveur.
Comme Apache httpd pour Windows ne dispose pas du programme
- Configure
propre à Apache httpd pour Unix, le fichier source
- du module doit être ajouté au fichier projet Apache de base, et ses
- symboles ajoutés au fichier os\win32\modules.c
.
La seconde méthode consiste à compiler le module en tant que DLL,
- à savoir une bibliothèque partagée qui pourra être chargée dans le
- serveur en cours d'exécution via la directive
-
. Ces modules DLL
- peuvent être distribués et exécutés sur toute installation d'Apache
- httpd pour Windows, sans avoir à recompiler le serveur.
Pour créer un module DLL, il est nécessaire d'apporter une légère
- modification à son fichier source : l'enregistrement du module doit
- être exporté depuis la DLL (qui sera elle-même créée plus tard ;
+ Configure
propre à Apache httpd pour Unix, le fichier source
+ du module doit être ajouté au fichier projet Apache de base, et ses
+ symboles ajoutés au fichier os\win32\modules.c
.
La seconde méthode consiste à compiler le module en tant que DLL,
+ à savoir une bibliothèque partagée qui pourra être chargée dans le
+ serveur en cours d'exécution via la directive
+
Pour créer un module DLL, il est nécessaire d'apporter une légère
+ modification à son fichier source : l'enregistrement du module doit
+ être exporté depuis la DLL (qui sera elle-même créée plus tard ;
voir plus loin). Pour ce faire, ajoutez la macro
- AP_MODULE_DECLARE_DATA
(définie dans les fichiers
- d'en-têtes d'Apache httpd) à la définition de l'enregistrement de votre
- module. Par exemple, si votre module est déclaré comme suit :
AP_MODULE_DECLARE_DATA
(définie dans les fichiers
+ d'en-têtes d'Apache httpd) à la définition de l'enregistrement de votre
+ module. Par exemple, si votre module est déclaré comme suit :
Notez que cette macro ne sera prise en compte que sous Windows,
- si bien que le module poura être utilisé sans changement sous Unix,
- si besoin est. Alternativement, si vous êtes familier avec les
+ si bien que le module poura être utilisé sans changement sous Unix,
+ si besoin est. Alternativement, si vous êtes familier avec les
fichiers .DEF
, vous pouvez les utiliser pour exporter
l'enregistrement du module.
Maintenant, nous sommes prêts à créer une DLL contenant notre - module. Il va falloir pour cela la lier avec la bibliothèque - d'export libhttpd.lib qui a été créée au cours de la compilation de - la bibliothèque partagée libhttpd.dll. Il sera peut-être aussi - nécessaire de modifier la configuration du compilateur pour - s'assurer que les fichiers d'en-têtes d'Apache httpd seront correctement - localisés. Vous trouverez cette bibliothèque à la racine du - répertoire des modules de votre serveur. Il est souhaitable +
Maintenant, nous sommes prêts à créer une DLL contenant notre + module. Il va falloir pour cela la lier avec la bibliothèque + d'export libhttpd.lib qui a été créée au cours de la compilation de + la bibliothèque partagée libhttpd.dll. Il sera peut-être aussi + nécessaire de modifier la configuration du compilateur pour + s'assurer que les fichiers d'en-têtes d'Apache httpd seront correctement + localisés. Vous trouverez cette bibliothèque à la racine du + répertoire des modules de votre serveur. Il est souhaitable d'utiliser un fichier de module .dsp existant dans l'arborescence afin de s'assurer que l'environnement de compilation est - correctement configuré, mais vous pouvez aussi comparer les options - de compilation et d'édition de liens à votre fichier .dsp.
+ correctement configuré, mais vous pouvez aussi comparer les options + de compilation et d'édition de liens à votre fichier .dsp. -Ceci devrait créer une version DLL de votre module. Il vous
- suffit maintenant de l'enregistrer dans le répertoire
- modules
à la racine de votre serveur, et d'utiliser la
+
Ceci devrait créer une version DLL de votre module. Il vous
+ suffit maintenant de l'enregistrer dans le répertoire
+ modules
à la racine de votre serveur, et d'utiliser la
directive
La directive LoadFile permet de lier le fichier objet ou la - bibliothèque spécifié au serveur lors du démarrage ou du redémarrage +
La directive
Par exemple:
@@ -169,7 +170,7 @@ spécifiéLa directive LoadModule permet de lier le fichier objet ou la - bibliothèque nom-fichier avec le serveur, et d'ajouter la - structure de module nommée module à la liste des modules +
La directive module
dans le fichier, et est référencé comme module dans le fichier, et est référencé comme Identificateur de
- module dans la documentation des modules. Exemple :
Par exemple :
charge le module spécifié depuis le sous-répertoire des modules - situé à la racine du serveur.
+charge le module spécifié depuis le sous-répertoire des modules + situé à la racine du serveur.