Apache
Apache est un serveur http.
Aux temps de la préhistoire du web (première moitié des années 1990), il existait deux logiciels serveurs http concurrents: celui du CERN (www.cern.ch) d'une part, le logiciel créé par le N.C.S.A. (National Center for Super Computing Applications http://www.ncsa.uiuc.edu) d'autre part. Un groupe d'informaticiens a alors modifié ("patché") le code du NCSA pour l'améliorer. Cela a donné "a patchy server", d'où un jeu de mots plus tard le nom Apache.
Apache est un logiciel très performant et très robuste. Il est configurable grâce à un fichier de configuration bien documenté. On peut par exemple, en insérant des directives dans ce fichier, spécifier quels répertoires seront publiquement accessibles, ou au contraire fermés à certaines adresses, accessibles après authentification, etc. La directive Include permet d'inclure un nombre arbitraire de fichiers, ce qui permet de structurer la configuration: un fichier par application web, ou encore un fichier par hôte virtuel, ... Il est possible de recharger le fichier de configuration sans arrêter apache, ce qui est intéressant pour un serveur de production. Signalons enfin qu'il est possible de déposer un fichier de configuration (.htaccess: généralement quelques directives seulement) dans chaque répertoire du site web exporté: cela permet à l'administrateur système de laisser les utilisateurs (concepteurs de sites) reconfigurer le serveur selon leurs besoins... sachant que l'administrateur peut interdire certaines directives. Une très grande souplesse, donc.
Apache reconnaît la notion d' "hôte virtuel": une machine peut avoir plusieurs noms, voire même plusieurs adresses IP (à condition bien sûr que cela soit enregistré proprement dans le DNS). Configurer plusieurs "hôtes virtuels" permet d'associer à chaque nom de machine une configuration complète (par exemple le répertoire dans lequel se trouveront les sites webs, le nom du fichier de log, etc.). De la sorte, une seule machine n'exécutant qu'une seule instance d'Apache peut publier un nombre arbitraire de serveurs web; du point-de-vue des logiciels clients mais aussi dans une certaine mesure du point-de-vue de l'administrateur tout se passe comme s'il y avait plusieurs machines.
Apache est conçu comme un "cœur" entouré de modules, qui peuvent être liés statiquement avec le programme, mais seront de préférence utilisés en tant que bibliothèque partagée. Les modules les plus importants sont livrés avec apache, cependant si la fonctionnalité correspondante n'est pas utilisée on peut (et il est conseillé de) ne pas les installer tous. De nombreux modules "tierces parties" sont par ailleurs disponibles. Parmi les principaux modules, on peut citer:
- mod_rewrite: Fourni avec apache, ce module permet de "réécrire" une url en utilisant des règles qui peuvent être très complexes, de sorte qu'il n'y ait plus aucun rapport entre l'url proprement dite et l'emplacement du fichier correspondant. Sans compter que ce fichier peut être inexistant (base de données). Tout ce fonctionnement restera inconnu du client.
- mod_ssl: fourni lui aussi avec apache, permet d'utiliser la bibliothèque openSSL ( cf fiche PLUME http://www.projet-plume.org/fr/fiche/openssl ) afin de crypter toutes les transactions (https).
- mod_php: le célèbre langage de script est livré sous forme d'un module apache distinct.
- mod_perl, mod_python, etc. Ces modules permettent d'embarquer du code perl ou python dans la page web, ils constituent donc une alternative à php.
- mod_security: Permet de filtrer les requêtes http, et ainsi d'améliorer la sécurité
- mod_proxy: Relai Apache pour des fonctions de sécurité
- modXLDAPAuth Filtre d'accès à un serveur Apache basé sur les certificats
Un module livré sous forme de bibliothèque partagée peut être recompilé séparément d'Apache (et réciproquement, tant qu'on reste dans une même branche d'Apache. cf. plus loin). Cela est extrêmement intéressant, car on peut mettre à jour un module sans toucher à l'installation d'Apache elle-même (on doit cependant redémarrer le serveur). De la même manière, on peut changer la version d'Apache tout en gardant les modules déjà installés, si ceux-ci n'ont pas évolué.
Il existe actuellement trois branches d'Apache: les versions 1.3.x, 2.0.x, et 2.2.x sont en effet toujours maintenues, et de nouvelles révisions sont régulièrement publiées (correction de bogues pour l'essentiel). La version 2 a constitué un saut technologique important, qui se caractérise par:
- Une meilleure portabilité, grâce à une "couche de compatibilité" appelée Apr (Apache portable runtime). Apr est aujourd'hui un projet de la fondation Apache. On retrouve cette bibliothèque dans dans d'autres applications (par exemple subversion), car elle permet de concevoir assez facilement des applications portables.
- Une meilleure gestion des modules. Le revers de la médaille est la réécriture de l'API, de sorte que les modules ont dû être réécrits lors du passage à la version 2.
- Un meilleur support du multitâche, avec l'implémentation de différents algorithmes, permettant de "coller" au plus près avec le système d'exploitation.
La version 2.2 est simplement une optimisation de la version 2.0. Il est conseillé d'utiliser la version 2.2, qui est la plus aboutie, en particulier sous Windows.
Au LIPM, nous développons essentiellement des applications avec interface web, tous nos serveurs, qu'ils soient destinés à l'intranet comme à l'internet, sont tous équipés d'Apache.
Commentaires
Responsable thématique précédent
Cette fiche a d'abord été suivie par le responsable thématique Jacquelin Charbonnel. Thierry Dostes l'a reprise en février 2012.
Protection contre les robots
Lorsque certains robots saturent un site par des accès sur certaines parties inutiles d'indexer et qui peuvent engendrer des fortes charges d'accès à une base de données... :
La possibilité d'avoir un fichier interprété par les robots (les très connus en tienne compte) qui indique de ne pas indexer une partie du site ou un temps minimum entre chaque accès : cf http://www.robotstxt.org/faq.html
Utilisé sur la plateforme PLUME entre autres.