Maintenir et garder une configuration propre lorsque l’on héberge plusieurs sites Internet ou plusieurs logiciels n’est pas chose aisée. En effet, il existe bon nombre de fichiers de configuration depuis la version 2 de Apache. Ce Guide vous expliquera comment créer des fichiers de configuration afin de garder une certaine harmonie et surtout quel syntaxe utiliser.
Il est recommandé de vous expérimenter sur un serveur de test, car une mauvaise configuration de votre serveur Apache peut affecter les sites déjà fonctionnels.
Avant de vous lancer, il est également conseillé de faire des sauvegardes de vos fichiers avec la commande suivante.
cp -R /etc/apache2/ /etc/apache2.backup/
Vous pourrez ainsi facilement revenir à la configuration d’orignine en tapant la commande suivante.
rm -rf /etc/apache2/ # < Supprime tous les fichiers de configurations Apache
cp -R /etc/apache2.backup/ /etc/apache2/ # < Copie tous les fichiers depuis la sauvegarde
Afin de bien comprendre le contenu de ce guide, il est nécessaire de connaitre quelques termes utilisé dans Apache.
Lorsque vous hébergez plusieurs sites web sur le même serveur, chaque site est nommé Hôte virtuel. Ainsi, il est possible d’héberger plusieurs sites avec du contenu différent pour chaque site avec une seule installation d’Apache.
Note : Votre serveur Apache est la plupart du temps accessible aussi bien via une adresse IP que via son nom d’hôte ou encore un nom de domaine. Dans tous les cas, il faudra créer un Hôte virtuel dans chacun de ces cas de figure. Il est donc possible de mettre un site différent lorsqu’on tape l’adresse IP du serveur ou bien si on tape le nom d’hôte.
Voici un exemple de syntaxe d’hôte virtuel :
<Virtualhost *:80>
ServerName "Nom_de_domaine.com"
DocumentRoot "Chemin_racine"
</Virtualhost>
Par défaut, lorsque vous tapez /nom_de_dossier derrière une adresse de votre serveur, le serveur va chercher un dossier du même nom dans la racine de votre site. Si vous souhaitez que /nom_de_dossier pointe vers un autre dossier, vous devrez créer un alias avec la syntaxe suivante :
Alias /url_source /chemin_de_destination
L’Alias est particulièrement pratique lorsque vous installez une application web dans un emplacement différent de celui de votre site racine.
Lorsque vous installez Apache pour la première fois, il existe déjà un certain nombre de fichiers de configurations. Nous allons décrire le rôle de chacun des fichiers ou dossiers.
Lorsque vous installez une application web (comme phpmyadmin, roundcube ou autre), il est recommandé de créer un fichier de configuration dans le dossier /etc/apache2/conf.d/ qui est dédié pour cet usage.
Note : lorsque vous installez un logiciel via le système de paquetage de votre distribution linux, la plupart créer le fichier de configuration pour vous à cet emplacement. Vérifiez donc que vous n’allez pas créer un doublon dans ce cas précis.
Admettons maintenant que nous ayons un logiciel installé dans le dossier /usr/share/monlogiciel/ et que nous souhaitons accéder à ce logiciel avec l’url http://serveur/monlogiciel/ il sera nécessaire de faire la commande suivante :
nano /etc/apache2/conf.d/monlogiciel
Puis de coller les lignes suivantes :
# Création d'un alias pour le logiciel monlogiciel
Alias /monlogiciel /usr/share/monlogiciel/
Il est nécessaire ensuite de redémarrer Apache pour que le nouveau fichier de configuration soit pris en compte.
/etc/init.d/apache2 restart
Désormais, votre logiciel est disponible à l’adresse http://ip_du_serveur/monlogiciel/ ou http://nom_du_serveur/monlogiciel ou encore http://domaine_du_serveur/monlogiciel
Lorsque vous souhaitez héberger plusieurs domaines différents sur un même serveur Apache, vous devrez créer des hôtes virtuels. La bonne pratique veut que l’on crée un fichier dans le dossier /etc/apache2/sites-available, le nom importe peu, mais nous conseillons d’utiliser le nom de votre domaine.
Vous souhaitez par exemple configurer exemple1.com et exemple2.com, dans ce cas, créez deux fichiers dans /etc/apache2/sites-available :
# Fichier /etc/apache2/sites-available/exemple1.com
<VirtualHost *:80>
DocumentRoot /var/www/exemple1.com/
Servername exemple1.com
</VirtualHost>
# Fichier /etc/apache2/sites-available/exemple2.com
<VirtualHost *:80>
DocumentRoot /var/www/exemple2.com/
Servername exemple2.com
</VirtualHost>
Vous devrez ensuite activer ces fichiers de configurations :
a2ensite exemple1.com exemple2.com
Vous pourrez facilement désactiver un site si vous ne souhaitez plus l’utiliser ou si le fichier de configuration est faux avec la commande :
a2dissite exemple1.com
Enfin pour prendre en compte tous les changements, il faut redémarrer apache :
/etc/init.d/apache2 restart
Si vos hôtes virtuels ne fonctionnent pas, vérifier que le fichier /etc/apache2/ports.conf contient la ligne
NameVirtualHost *:80
Lorsque vous souhaitez utiliser le port https (443) avec ssl, vous devrez configurer apache afin qu’il prenne en compte vos certificats.
Avant de pouvoir utiliser ssl, vous devrez créer une paire de certificat, un privé et un public. Le certificat public est envoyé au navigateur qui souhaite crypter la session. Lorsque le navigateur souhaite envoyer des informations au serveur tel que des informations bancaires, il crypte les données à l’aide du certificat public qui ne permet pas de décrypter l’information ensuite. Seul le certificat privé permet ensuite de décrypter les données. Il est donc évident que le certificat privé ne doit être en aucun divulgué.
Création du dossier qui contiendra les certificats :
mkdir -p /etc/apache2/ssl/ctr/
mkdir -p /etc/apache2/ssl/key/
Le certificat ne fonctionnant que pour un hôte virtuel, nous allons donner au certificat le nom du domaine (ici exemple1.com).
cd /etc/apache2/ssl/key
openssl genrsa -out exemple1.com.key 1024
cd /etc/apache2/ssl/ctr
openssl req -new -x509 -days 365 -key ../key/exemple1.com.key -out exemple1.com.crt
Saisissez ensuite les informations demandé
Enter PEM pass phrase: Un mot de passe de votre choix
Verifying - Enter PEM pass phrase: Confirmer votre mot de passe
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: Ma région
Locality Name (eg, city) []:Ma région
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Mon nom ou société
Organizational Unit Name (eg, section) []: Mon secteur d'activité
Common Name (eg, YOUR name) []:exemple1.com
Email Address []: Mon email
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: Laisser vide
An optional company name []:Laisser vide
Enfin, si vous voulez faire signer la clef auprès d’une autorité (verisign, geotrust,…) vous devrez lui fournir le contenu de la clef publique :
cat /etc/apache2/ssl/crt/exemple1.crt
Copiez/collez dans le champs dédié lors du paiement de votre certificat. Vous devriez ensuite recevoir deux clefs :
mv /etc/apache2/ssl/crt/exemple1.com.crt /etc/apache2/ssl/crt/exemple1.com.crt.origin
nano /etc/apache2/ssl/crt/exemple1.com.crt
Dans l’éditeur, collez votre clef, puis quittez en tapant CTRL+X puis o pour sauvegarder.
nano /etc/apache2/ssl/crt/intermediate.crt
Dans l’éditeur, collez votre clef intermédiaire, puis quittez en tapant CTRL+X puis o pour sauvegarde.
Si vous avez déjà le fichier /etc/apache2/sites-available/exemple1.com éditez ce fichier, et ajoutez les lignes suivantes :
<VirtualHost *:443>
ServerName exemple1.com
DocumentRoot /var/www/exemple1.com/
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/crt/exemple1.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/key/exemple1.com.key
SSLCACertificateFile /etc/apache2/ssl/crt/intermediate.crt
</VirtualHost>
Vérifiez éventuellement que vous ayez bien les lignes suivantes dans le fichier /etc/apache2/ports.conf ou quelque part dans votre configuration :
<IfModule mod_ssl.c>
Listen 443
</IfModule>
Enfin redémarrez Apache et vérifiez que votre configuration fonctionne :
/etc/init.d/apache2 restart
Il est intéressant maintenant de combiner ce qui a été dit précédemment. Voici quelques exemples.
Dans cet exemple, on inclut un Alias dans un Hôte virtuel :
<VirtualHost *:80>
DocumentRoot /var/www/exemple1.com/
Servername exemple1.com
Alias /images /usr/share/images/
</VirtualHost>
Ainsi, lorsqu’on tape dans le navigateur l’adresse http://exemple1.com/images/, Apache ne va plus chercher dans /var/www/exemple1.com/images mais bien dans /usr/share/images. Ceci est particulièrement pratique si vous avez une librairie partagées pour plusieurs applications.
On notera que cet Alias ne fonctionnera que pour le domaine exemple1.com, si nous avons exemple2.com, l’alias ne sera pas défini.
Si vous souhaitez par exemple que l’adresse exemple1.com et www.exemple1.com (qui est considéré comme un sous-domaine) soit configuré sur le même hôte virtuel, il suffit d’utiliser l’exemple suivant :
<VirtualHost *:80>
DocumentRoot /var/www/exemple1.com/
Servername exemple1.com
ServerAlias www.exemple1.com
</Virtualhost>
Si pour des raisons diverses vous souhaitez utiliser des fichiers htaccess, il faut l’autoriser dans votre configuration. Ajouter les lignes suivantes dans votre VirtualHost par exemple :
Comme ceci :
<VirtualHost *:80>
DocumentRoot /var/www/exemple1.com/
Servername exemple1.com
ServerAlias www.exemple1.com
# On autorise ici l'utilisation des fichiers .htaccess
<Directory /var/www/exemple1.com/
AllowOverride All
</Directory>
</Virtualhost>
On remarque ici l’utilisation de la balise Directory qui permet de spécifier des règles pour un dossier en particulier. Comme l’utilisation de AllowOverride affecte ici l’utilisation des fichiers stockés localement, on doit utiliser cette balise.
Il existe bien évidemment de nombreuses autres configurations et options possibles, mais elles seront généralement basée sur le même principe que ceux fournis dans ce guide.
N’hésitez pas à rechercher sur Internet ce que vous souhaitez faire ou bien encore consulter la documentation officielle à la page suivante :