Comment passer d'apache à Apache2: Configuration Suite à la panne, d'un serveur «web» qui tournait avec Apache sous Etch, le problème de passer sous la dernière version de Debian (Lenny) s'est posé. Rien de bien dramatique à priori si ce n'est que Lenny ne propose plus que les paquets d'apache2. Je n'ai trouvé sur Internet que peu de documentations permettant de comprendre les opérations à effectuer pour faire ce passage rapidement. J'espère que ce document apporte un petit plus dans cette démarche finalement assez simple. Apache2: Présentation rapide Apache2 est plus «modularisé» qu'apache, ce qui rend l'exploitation des modules et sites plus «lisibles». Les fichiers de configuration se situent dans le répertoire /etc/apache2. Le fichier de configuration général est /etc/apache2/apache2.conf. Il contient de nombreux Include, dont les plus importants : # Include module configuration: Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf # Include all the user configurations: Include /etc/apache2/httpd.conf # Include ports listing Include /etc/apache2/ports.conf Puis en fin de fichier les lignes : # Include generic snippets of statements Include /etc/apache2/conf.d/ # Include the virtual host configurations: Include /etc/apache2/sites-enabled/ Le fichier /etc/apache2/ports.conf contient la liste des ports en écoute. Les fichiers concernant les modules installés se situent dans le répertoire /etc/apache2/modsavailable. Les fichiers *.load chargent les modules dynamiques et les fichiers *.conf sont utilisés pour la configuration de ceux-ci. Les modules sont appelés dans le fichier /etc/apache2/apache2.conf par les lignes Include /etc/apache2/mods-enabled/*.load et Include /etc/apache2/mods-enabled/*.conf. Pour les modules, comme pour les sites, la règle est la suivante : Les modules disponibles sont stockés dans un répertoire mods-available. Pour activer un module il suffit de faire un lien sur le fichier module correspondant dans le répertoire modsenabled ou d'utiliser la commande a2enmod (a2dismod pour le désactiver).
De même, pour les sites hébergés : sites-available pour les sites disponibles et sites-enabled pour les sites activés, avec la commande a2ensite pour les activer et a2dissite pour les désactiver. Remarque : Les fichiers dans les répertoires enabled ne sont en fait que des liens vers des fichiers des répertoires available. Chaque module est associé à un fichier. Ainsi pour le module php le fichier est php5.conf, son contenu est : <IfModule mod_php5.c> AddType application/x-httpd-php.php.phtml.php3 AddType application/x-httpd-php-source.phps </IfModule> a2enmod php5 active le module php, il est nécessaire de redémarrer le serveur Apache2 (/etc/ init.d/apache2 restart). Pour la ligne Include /etc/apache2/sites-enabled/ : Ce répertoire doit donc contenir les fichiers de configuration pour chaque site hébergé. Remarque : Il est possible de modifier cette ligne et rajouter *.conf (Include /etc/apache2/sitesenabled/*.conf) pour que tous les fichiers en.conf soit lu et associé à un site. Les directives de configuration dans ces fichiers sont les mêmes que pour Apache mais il est important de signaler que la directive de configuration <VirtualHost adresse_ip> a été transformée en <VirtualHost adresse_ip:80> Quelques informations supplémentaires : Apache2 ne se lance plus qu'en standalone, la directive ServerType n'existe plus. Devant cette «multitude» de fichiers de configuration il peut être très difficile de localiser une directive de configuration, la commande peut être utile: grep -nir scriptalias * -n préfixe chaque ligne de sortie avec un numéro. -R permet de faire une recherche récursive. -i ignore la casse. Installation d'apache2 L'installation est très simple, elle s'apparente beaucoup à celle d'apache pour ce qui est des modules. J'utilise l'outil dselect pour choisir les paquets à installer. J'installe donc sur le serveur les modules nécessaires: Opt web apache2 Opt web php5 Opt web php5-mysql Opt web php5-gd Opt web php5-cgi Opt web php5-imagick Opt web php5-mcrypt Opt web php5-squid Ou la commande apt-get install noms_paquets.
Configuration d'apache2 Après l'installation de ces paquets, le module php5 est normalement activé. Il suffit de regarder dans le répertoire mods-enabled si les fichiers php5.* sont présents. Le site activé par défaut est le site default, si nous listons le contenu du répertoire /etc/apache2/sites-enabled nous voyons un lien (000-default) sur le fichier /etc/apache2/sites-available/default lrwxrwxrwx 1 root root 36 2009-06-30 14:49 000-d -> /etc/apache2/sitesavailable/ Les pages de mon site par défaut se situent dans le répertoire /var/www/html (j'ai gardé au fil des années une ancienne configuration). Il est donc nécessaire de modifier la ligne DocumentRoot dans le fichier 000-default, et au passage la ligne ServerAdmin. ServerAdmin webmaster@ies.univ-montp2.fr DocumentRoot /var/www/html/ <Directory /> Options FollowSymLinks <Directory /var/www/html/> Options Indexes FollowSymLinks MultiViews allow from all On remarque aussi que tous les paramètres sont contenus entre des directives Virtualhost qui sont utilisés pour gérer les sites hébergés. Comme vu plus haut, voici le contenu du fichier /etc/apache2/ports.conf # If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default # This is also true if you have upgraded from before 2.2.9-3 (i.e. from # Debian etch). See /usr/share/doc/apache2.2-common/news.debian.gz and # README.Debian.gz NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost statement here Listen 443 </IfModule> Ici Apache2 est en écoute sur le port 80.
L'ancien fichier de configuration du serveur Apache était httpd.conf. On retrouve l'inclusion de ce fichier dans /etc/apache2/apache2.conf. Pour commencer la transition, il suffit d'ôter dans le fichier httpd.conf toutes les lignes concernant la configuration proprement dite d'apache, comme les modules, les répertoires spéciaux et de ne conserver que ceux qui concernent les différents sites ou répertoires qui ont des modalités d'accès différentes (.htaccess, options Indexes ou autres). Puisqu'Apache2 le gère déjà dans son fichier de configuration. On obtient ainsi un fichier épuré ne contenant que la gestion des répertoires et des sites virtuels. Une fois le fichier obtenu il est nécessaire (si vous ne l'avez pas déjà fait) de désigner l'utilisateur qui sera utilisé pour lancer le service. Là aussi, aucune surprise, c'est l'utilisateur www-data. Je place donc les lignes suivantes au début de mon fichier httpd.conf. # Configuration de l'utilisateur utilise par Apache2 User www-data Group www-data Fichier httpd.conf Voici des extraits de mon ancien fichier httpd.conf dans lequel je n'ai gardé que mes «rajouts» personnels, exceptés ceux qui concernent la configuration de l'utilisateur et du groupe utilisés par Apache2 pour se lancer. Il est bien sûr indispensable que l'utilisateur www-data ait les bons droits sur les répertoires. # Configuration de l'utilisateur utilise par Apache2 User www-data Group www-data <Directory "/var/www/html/moreau"> Options Includes FollowSymLinks ExecCGI Indexes Allow from all <Directory "/var/www/html/ies"> Options Includes FollowSymLinks ExecCGI Indexes Allow from all Ici sont indiqués le nom et le groupe de l'utilisateur qu'utilise Apache2 pour s'exécuter et des répertoires avec des droits spéciaux, (Indexes pour pouvoir «visualiser» le contenu du répertoire si aucun fichier index.* n'est présent, ignore les fichiers.htaccess).
<Directory /var/www/html/radecsorg/radecs05/restricted> Options Indexes MultiViews AuthUserFile /etc/apache/photosrad AuthName "RADECS 2005" Authtype Basic <Limit GET> require user photos </Limit> <Directory /var/www/html/private> Options Indexes MultiViews Allow from 162.38.134 162.38.135 162.38.133 #Allow from 162.38 Répertoires avec un contrôle d'accès : - par utilisateur (fichier généré par htpasswd), ne pas oublier de déplacer les fichiers contenant les mots de passe ou dans mon cas de copier les fichiers dans un répertoire /etc/apache. - par adresse IP. Gestion des sites (Directive VirtualHost) <VirtualHost adresse_ip> # ServerAdmin webmaster@host.some_domain.com DocumentRoot "/var/www/html/mitea" ServerName mitea.univ-montp2.fr <VirtualHost adresse_ip> # ServerAdmin webmaster@host.some_domain.com DocumentRoot "/var/www/html/capteurs" ServerName capteurs.univ-montp2.fr <VirtualHost adresse_ip> # ServerAdmin webmaster@host.some_domain.com DocumentRoot "/var/www/html/ctm" ServerName www.ctm.univ-montp2.fr
Les différents sites hébergés sur le serveur doivent être séparés, enlevés du fichier httpd.conf et placés dans le répertoire /etc/apache2/sites-available. Pour chaque site un fichier avec la directive VirtualHost. Chaque site pourra être activé par la commande a2ensite nom_fichier_site et désactivé avec la commande a2dissite nom_fichier_site. Il est important de noter que la directive <VirtualHost adresse_ip> a été transformé en <VirtualHost adresse_ip:80> Exemple: Pour le site capteurs.univ-montp2.fr un fichier /etc/apache2/sites-available/capteurs contient les lignes suivantes : <VirtualHost adresse_ip:80> ServerAdmin webmaster@ies.univ-montp2.fr DocumentRoot "/var/www/html/capteurs" ServerName capteurs.univ-montp2.fr #ErrorLog logs/host.some_domain.com-error_log #CustomLog logs/host.some_domain.com-access_log common Pour l'activer, a2ensite /etc/apache2/sites-available/capteurs. Pour valider toutes ces modifications et vérifier que votre serveur fonctionne, relancer le serveur Apache2 /etc/init.d/apache2 restart En fait, il manque la directive NameVirtualHost adresse_ip:80. En se penchant sur le problème, de nombreux pages indiquent qu'il est facile de rajouter plusieurs sites en créant un fichier pour chacun, avec en début la ligne NameVirtualHost adresse_ip:80. Cette directive ne doit apparaître qu'une seule fois sinon Apache2 ne se lancera pas correctement. Je place donc ma directive dans mon fichier /etc/apache2/apache2.conf juste avant la ligne qui fait appel aux sites: # Include generic snippets of statements Include /etc/apache2/conf.d/ # Inclusion des VirtualHosts NameVirtualHost adresse_ip:80 # Include the virtual host configurations: Include /etc/apache2/sites-enabled/ Remarque : Il sera peut être nécessaire (pour ceux qui les auront) de supprimer ces lignes dans le fichier de configuration du site par défaut (/etc/apache2/sites-available/default) pour la gestion des options sur le répertoire /var/www. # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place RedirectMatch ^/$ /apache2-default/
Cette directive redirige automatiquement vers l'affichage par défaut d'apache2 qui est une page blanche avec la belle phrase «It works». Pages webs utilisateurs Chaque utilisateur peut disposer d'un espace réservé sur le serveur. Les pages webs doivent être déposées dans un répertoire public_html du répertoire de l'utilisateur. L'accès à ces pages se fait par l'adresse http://nom_serveur/~utilisateur. Ce module n'est pas activé par défaut. La commande pour activer ce module est a2enmod userdir Ce qui créera un lien dans /etc/apache/mods-available. Il est bien sûr très important de faire attention aux droits attribués aux répertoires de ces utilisateurs. Dans notre cas Apache2 est lancé avec les droits de l'utilisateur www-data (groupe www-data) et chaque utilisateur appartient au groupe www-data. Module Rewrite De la même façon, pour activer le module rewrite qui permet de réécrire les adresses, il est nécessaire d'activer le module par la commande a2enmod rewrite. Il faut bien évidemment penser à modifier dans le fichier de configuration du site la ligne en AllowOverride All Création d'un site supplémentaire Pour être un peu plus complet, voici un exemple de création d'un nouveau site web. Le serveur web héberge un site dans le répertoire /var/www/html/linux qui doit être accessible via http://linux.ies.univ-montp2.fr Création d'un fichier linux dans le répertoire /etc/apache2/sites-available/ <VirtualHost adresse_ip:80> ServerAdmin webmaster@ies.univ-montp2.fr DocumentRoot "/var/www/html/linux" ServerName linux.ies.univ-montp2.fr Activation du site : a2ensite /etc/apache2/sites-available/linux Redémarrage d'apache2 : /etc/init.d/apache2 restart (ou reload pour recharger la nouvelle configuration) Le site est maintenant accessible. Stephane.Arnal@ies.univ-montp2.fr