Serveur Apache HTTP Version 2.4
Vue d'ensemble des nouvelles fonctionnalités de la version 2.4 du serveur HTTP Apache
Ce document décrit les modifications majeures apportées par la version 2.4 du serveur HTTP Apache. Pour les nouvelles fonctionnalités ajoutées par la version 2.2, se référer au document Nouvelles fonctionnalités de la version 2.2.
Améliorations du noyau
- Modules multiprocessus (MPMs) chargeables à l'exécution
- Plusieurs MPMs peuvent maintenant être compilés en tant que modules
chargeables. Le choix du MPM à utiliser s'effectue
à l'exécution via la directive
LoadModule
. - MPM Event
- Le MPM Event n'en est plus au stade expérimental et est maintenant pleinement supporté.
- Support du mode asynchrone
- Le support des lectures/écritures asynchrones pour les MPMs et les plateformes qui l'implémentent a été amélioré.
- Configuration du niveau de journalisation (LogLevel) par module et par répertoire
- La directive
LogLevel
peut maintenant être définie par module et par répertoire. Les nouveaux niveauxtrace1
àtrace8
ont été ajoutés au dessus du niveau de journalisationdebug
. - Sections de configuration au niveau requête
- Les sections
If
,<ElseIf>
et<Else>
permettent de définir une configuration en fonction de critères liés à la requête. - Interpréteur d'expressions à usage général
- Un nouvel interpréteur d'expressions permet de spécifier des
conditions complexes via des directives à
syntaxe commune comme
SetEnvIfExpr
,RewriteCond
,Header
,<If>
, etc... - KeepAliveTimeout en millisecondes
- Il est maintenant possible de définir la directive
KeepAliveTimeout
en millisecondes. - Directive NameVirtualHost
- Cette directive n'est plus nécessaire et est maintenant obsolète.
- Directives autorisées dans les fichiers
.htaccess
- La nouvelle directive
AllowOverrideList
permet de contrôler de manière plus précise la liste des directives autorisées dans les fichiers.htaccess
. - Variables dans les fichiers de configuration
- La directive
Define
permet de définir des variables dans les fichiers de configuration, améliorant ainsi la clareté de la présentation si la même valeur est utilisée en plusieurs points de la configuration. - Diminution de la mémoire utilisée
- Bien qu'elle propose de nombreuses nouvelles fonctionnalités, la version 2.4.x tend à utiliser moins de mémoire que la version 2.2.x.
Nouveau modules
mod_proxy_fcgi
- Mise à disposition du protocole FastCGI pour
mod_proxy
. mod_proxy_scgi
- Mise à disposition du protocole SCGI pour
mod_proxy
. mod_proxy_express
- Ajoute à
mod_proxy
la configuration dynamique de mandataires inverses en masse. mod_remoteip
- Remplace l'adresse IP distante et le nom d'hôte apparents du client pour la requête courante par la liste d'adresses IP présentée par un mandataire ou un répartiteur de charge via les en-têtes de la requête.
mod_heartmonitor
,mod_lbmethod_heartbeat
- Permet à
mod_proxy_balancer
de répartir la charge en fonction du nombre de connexions actives sur les serveurs d'arrière-plan. mod_proxy_html
- Anciennement module tiers, il supporte la correction des liens HTML dans une situation de mandat inverse, où le serveur d'arrière-plan génère des URLs qui ne sont pas valides du point de vue des clients du mandataire.
mod_sed
- Une amélioration de
mod_substitute
qui permet d'éditer le corps de la réponse avec toute la puissance de la commande sed. mod_auth_form
- Implémente une authentification à base de formulaire.
mod_session
- Permet de conserver les données de sessions des clients sous forme de cookies ou dans une base de données.
mod_allowmethods
- Permet de restreindre l'utilisation de certaines méthodes HTTP sans interférer avec l'authentification et l'autorisation.
mod_lua
- Embarque le langage Lua dans httpd pour la configuration et les fonctions logiques courantes (Expérimental).
mod_log_debug
- Permet d'introduire une journalisation personnalisée à différentes phases du traitement de la requête.
mod_buffer
- Fournit un tampon pour les piles des filtres en entrée et en sortie.
mod_data
- Convertit un corps de réponse en URL de type données RFC2397.
mod_ratelimit
- Permet de limiter la bande passante pour certains clients.
mod_request
- Fournit des filtres permettant de gérer et de mettre à disposition les corps des requêtes HTTP.
mod_reflector
- Permet de renvoyer comme réponse le corps de la requête via la pile du filtre de sortie.
mod_slotmem_shm
- Met à disposition un fournisseur de mémoire partagée à base de slots (du style tableau de bord).
mod_xml2enc
- Anciennement module tiers, il supporte l'internationalisation dans les modules de filtrage basés sur libxml2 (support du markup)
mod_macro
(disponible à partir de la version 2.4.5)- Permet d'utiliser des macros au sein des fichiers de configuration.
mod_proxy_wstunnel
(disponible à partir de la version 2.4.5)- Support des tunnels web-socket.
mod_authnz_fcgi
(disponible à partir de la version 2.4.10)- Permet aux applications d'autorisation FastCGI d'authentifier et/ou autoriser les clients.
mod_http2
(disponible à partir de la version 2.4.17)- Support de la couche transport HTTP/2.
mod_proxy_hcheck
(disponible à partir de la version 2.4.21)- Support d'un bilan de santé dynamique indépendant pour les serveurs d'arrière-plan mandatés distants.
Améliorations des modules
mod_ssl
mod_ssl
peut maintenant vérifier la validité des certificats clients en se connectant à un serveur OCSP. Il est possible de définir un répondeur par défaut, et de choisir si l'on préfère le répondeur désigné dans le certificat client.- En outre,
mod_ssl
supporte maintenant l'estampillage OCSP (OCSP stapling), qui permet au serveur d'attester la validité de son certificat auprès du client au cours de la phase de négociation de la connexion. - Enfin,
mod_ssl
peut maintenant être configuré pour que celui-ci partage les données de session SSL entre les serveurs via memcached. - Le support des clés EC a été ajouté à celui des clés RSA et DSA.
- Support de TLS-SRP (disponible à partir de la version 2.4.4).
mod_proxy
- La directive
ProxyPass
est maintenant configurée de manière optimale dans les sectionsLocation
ouLocationMatch
, et offre un gain de performances important par rapport à la syntaxe traditionnelle à deux paramètres lorsqu'elle est présente en grand nombre. - Il est maintenant possible de configurer l'adresse source dans les requêtes mandatées.
- Support des sockets de type Unix vers le serveur d'arrière-plan (disponible à partir de la version 2.4.7).
mod_proxy_balancer
- Le gestionnaire de répartition de charge propose de nouvelles fonctionnalités. Ainsi, les possibilités de configuration des membres du groupe de répartition de charge pendant l'exécution ont été améliorées (possibilité d'ajout d'un membre supplémentaire).
- Configuration à l'exécution d'un sous-ensemble de paramètres de répartition de charge.
- Les membres du groupe de répartition peuvent être définis à 'Drain' de façon à ce qu'ils ne répondent qu'aux sessions persistantes existantes, ce qui permet de les mettre hors ligne en douceur.
- Les règlages du répartiteur de charge peuvent être rendus persistants après redémarrage.
mod_cache
- Le filtre CACHE du module
mod_cache
peut être inséré à un certain point de la chaîne de filtrage pour contrôler plus finement la mise en cache. mod_cache
peut maintenant mettre en cache des requêtes HEAD.- Chaque fois que cela est possible, les directives de
mod_cache
peuvent maintenant être définies au niveau du répertoire, et non plus seulement au niveau du serveur principal. - L'URL de base des URLs en cache peut être personnalisée de façon à ce qu'un cluster de caches puisse partager le même préfixe d'URL.
mod_cache
peut maintenant servir du contenu non mis à jour lorsqu'un serveur d'arrière-plan n'est pas disponible (erreur 5xx).mod_cache
peut maintenant insérer HIT/MISS/REVALIDATE dans un en-tête X-Cache.mod_include
- Support de l'attribut 'onerror' dans un élément 'include', permettant de renvoyer un message d'erreur personnalisé à la place du message d'erreur par défaut.
mod_cgi
,mod_include
,mod_isapi
, ...- La traduction des en-têtes en variables d'environnement est plus stricte qu'avant, ce qui permet de diminuer l'exposition aux attaques de type cross-site-scripting via injection d'en-têtes. Les en-têtes contenant des caractères invalides (comme les caractères de soulignement) sont maintenant ignorés. Le document Les variables d'environnement dans Apache présente quelques pistes pour contourner ce problème avec les clients anciens qui nécessitent de tels en-têtes (Ceci affecte tous les modules qui utilisent ces variables d'environnement).
mod_authz_core
Conteneurs de logique d'autorisation- La directive
Require
et les directives de conteneurs associées, comme<RequireAll>
, permettent de définir une logique d'autorisation avancée. mod_rewrite
- La directive
RewriteRule
dispose maintenant des drapeaux[QSD]
(Query String Discard) et[END]
qui permettent de simplifier les scénarios de réécriture courants. - Possibilité d'utiliser des expressions booléennes complexes
dans la directive
RewriteCond
. - Possibilité d'utiliser des requêtes SQL en tant que fonctions
dans la directive
RewriteMap
. mod_ldap
,mod_authnz_ldap
mod_authnz_ldap
ajoute le support des groupes imbriqués.mod_ldap
apporte les directivesLDAPConnectionPoolTTL
etLDAPTimeout
, ainsi que d'autres améliorations dans le traitement des délais. Ceci s'avère utile pour les configurations où un pare-feu à mémoire d'état (stateful) rejète les connexions inactives vers le serveur LDAP.mod_ldap
propose la directiveLDAPLibraryDebug
qui permet de journaliser les informations de débogage fournies par la boîte à outils LDAP utilisée.mod_info
mod_info
est maintenant capable d'afficher la configuration préinterprétée sur stdout au cours du démarrage du serveur.mod_auth_basic
- Nouveau mécanisme générique permettant d'effectuer une authentification basique (disponible à partir de la version 2.4.5).
Améliorations des programmes
fcgistarter
- Nouvel utilitaire pour le démarrage des démons FastCGI.
htcacheclean
- Les URLs présentes dans le cache peuvent maintenant être affichées, accompagnées éventuellement de leurs métadonnées.
- Possibilité de supprimer explicitement des URLs individuelles présentes dans le cache.
- Les tailles de fichiers peuvent maintenant être arrondies au multiple de la taille de bloc donnée, les limites de taille collant de ce fait d'avantage à la taille réelle sur disque.
- La taille du cache peut maintenant être limitée par le nombre d'inodes, en plus de la possibilité de limitation par la taille des fichiers.
rotatelogs
- Possibilité de créer un lien vers le fichier journal courant.
- Possibilité d'invoquer un script personnalisé après la rotation.
htpasswd
,htdbm
- Support de l'algorithme bcrypt (disponible à partir de la version 2.4.4).
Documentation
- mod_rewrite
- La documentation du module
mod_rewrite
a été réorganisée et presque entièrement réécrite en mettant l'accent sur les exemples et l'utilisation courante, ainsi que sur l'incitation à utiliser d'autres solutions lorsque cela s'avère plus approprié. Le document Rewrite Guide constitue maintenant une section de premier niveau ; il est mieux organisé et contient beaucoup plus de détails. - mod_ssl
- La documentation du module
mod_ssl
a été grandement améliorée, avec plus d'exemples et un niveau "Bien démarrer" qui s'ajoutent aux détails techniques déjà présents dans la précédente documentation. - Caching Guide
- Le Guide de la mise en cache a
été réécrit afin de bien faire la différence entre les
fonctionnalités de mise en cache de la RFC2616 HTTP/1.1 fournies
par le module
mod_cache
, et la mise en cache générique de type clé/valeur fournie par l'interface socache, mais aussi pour couvrir la mise en cache spécialisée fournie par des mécanismes tels que ceux du modulemod_file_cache
.
Modifications concernant les développeur de modules
- Ajout de code pour la vérification de la configuration
- Une nouvelle fonction,
check_config
, a été ajoutée et s'exécute entre les fonctionspre_config
etopen_logs
. Elle s'exécute aussi avant la fonctiontest_config
si l'option-t
est passée au démonhttpd
. La fonctioncheck_config
permet aux modules de vérifier l'interdépendance des valeurs des directives de configuration et d'ajuster ces valeurs, alors que les messages du serveur peuvent encore être affichés sur la console. L'utilisateur est ainsi averti des erreurs de configuration avant que la fonction du noyauopen_logs
ne redirige les sorties de la console vers le journal des erreurs. - Ajout d'un analyseur syntaxique d'expressions
- Nous disposons à présent d'un analyseur générique d'expressions, dont l'API
est décrite dans ap_expr.h. Il s'agit d'une adaptation de
l'analyseur qu'on trouvait auparavant dans
mod_ssl
. - Conteneurs de logique d'autorisation
- Afin de fournir une logique d'autorisation avancée via des
directives telles que
<RequireAll>
, les modules d'autorisation s'enregistrent maintenant en tant que fournisseur par le biais de ap_register_auth_provider(). - Interface de mise en cache des petits objets
- Le fichier d'en-têtes ap_socache.h fournit une
interface à base de fournisseur pour la mise en cache des petits
objets de données, en s'inspirant de
l'implémentation précédente
du cache de session par
mod_ssl
. Sont supportés actuellement : les fournisseurs utilisant un tampon cyclique en mémoire partagée, les fichiers dbm sur disque, et les caches distribués de type memcache. - Ajout du point d'ancrage Cache Status
- Le module
mod_cache
inclut maintenant un nouveau point d'ancrage,cache_status
, qui est appelé lorsque la décision à propos de la mise en cache est connue. Il en existe une implémentation par défaut qui ajoute les en-têtes optionnelsX-Cache
etX-Cache-Detail
à la réponse.
La documentation du développeur contient une liste détaillée des modifications de l'API.