Administration de serveurs apache : virtualhost

Bonsoir …

<pour les l33ts>
Histoire de se passer de l’article et de passer à l’essentiel :

echo "alias apctl='/etc/init.d/apache2'">> ~/.bashrc
echo 'function ap_gen_virt { cat /etc/apache2/sites-enabled/000-default | sudo sed "/^[#t].*/ d" | sed "s/<VirtualHost [a-z.*]*/<VirtualHost $1/"|sed "1a\tServerName $1ntDocumentRoot /var/www/$1" > /etc/apache2/sites-enabled/$1.conf; }"' >> ~/.bashrc
sudo ap_gen_virt monsite.fr  && apctl restart

</pour les l33ts>

Pour les autres 😉 :

Les virtualhosts d’apache, à quoi ça peut servir ??? à héberger plusieurs sites sur le même ordinateur de façon « transparente ». On peut même y rajouter des options genre des Handlers différent, des règles de sécurité à part (via le mod_security, …)

Simple exemple : sur le même ordinateur on pourrait héberger le site 192.168.0.10 et monsite.fr … sans avoir à installer plusieurs serveurs … (manquerait plus que ça :p).

Configuration pour le site à l’ip 192.168.0.10 (inutile, mais juste pour l’exemple)

Pour mon premier exemple donc on choisit de « rediriger » (pas le bon mot, puisque c’est directement le DocumentRoot, donc la personne n’accedra à rien d’autre.) les requêtes faites sur l’ip vers le dossier /var/www/pirate … pourquoi pirate ?? en générale, lorsque quelqu’un accède à un serveur via une ip … soit c’est l’admin qui fait son kikoo, soit c’est un pirate qui vient de trouver votre serveur par un scan.

Donc on créer le dossier pirate dans /var/www et on y met un petit fichier html citant pas exemple les différent articles contre des intrusions ou la tentative d’intrusions sur des systèmes de traitements de données automatisées (genre Article 323-1 à 7 du code pénal … ça m’étonnerait que ça calme le pirate, mais ça fait toujours bien de citer les peines encouru ;)).

On va créer un fichier nommé 192.168.0.10.conf dans le dossier /etc/apache2/sites-enabled

<VirtualHost 192.168.0.10:80>
ServerName 192.168.0.10
DocumentRoot /var/www/pirate
</VirtualHost>

Pour la génération de la configuration, on peut utiliser cette commande si on aime bien faire son l33t (à exécuter dans le dossier /etc/apache2/sites-enabled/ en root) :

cat 000-default | sed "/^[#t].*/ d" | sed "s/<VirtualHost [a-z.*]*/<VirtualHost 192.168.0.10/"|sed "1a\tServerName 192.168.0.10ntDocumentRoot /var/www/pirate">192_168._0_10.conf

Configuration pour l’accès monsite.fr

Ensuite, on crée la conf pour l’accès à monsite.fr (à peu près pareil), sauf que le dossier de contenu ce trouve maintenant dans /var/www/mon_site ce qui donne la config suivante à mettre dans le fichier /etc/apache2/sites-enabled/mon_site.fr :

<VirtualHost monsite.fr:80>
ServerName 192.168.0.10
DocumentRoot /var/www/mon_site
</VirtualHost>

et pis là si on a une dizaine de sites à configurer (et que l’on ne veut pas utiliser le superbe module vhostalias qui permettrait de ce passer de ce genre de configuration) … créer les fichiers un par un c’est bof même avec la commande filé plus haut d’autant plus qu’il faut la modifier à chaque fois …

La superbe fonction bash du kikoo qui veut pas se taper les configs à la main

donc une solution existe … faire une fonction bash … ça donne  :

function ap_gen_virt { cat /etc/apache2/sites-enabled/000-default | sudo sed "/^[#t].*/ d" | sed "s/<VirtualHost [a-z.*]*/<VirtualHost $1/"|sed "1a\tServerName $1ntDocumentRoot /var/www/$1" > /etc/apache2/sites-enabled/$1.conf; }

(à exécuter directement dans un terminal, le mieux étant de la rajouter au .bashrc, pour y avoir accès après chaque démarrage), il suffit alors de faire :

sudo ap_gen_virt 192.168.0.10

(pour générer le virtualhost de 192.168.0.10 dans /etc/apache2/sites-enabled/192.168.0.10.conf)

sudo ap_gen_virt monsite.fr

(pour générer le virtualhost de monsite.fr dans /etc/apache2/sites-enabled/monsite.fr.conf)

et voilà … il suffit maintenant de redémarrer le serveur apache pour profiter de ces nouvelles configs :

sudo /etc/init.d/apache2 restart

à noter que là aussi faire un sudo /etc/init.d/apache2 restart c’est pas très sexy, donc on peut exécuter la commande :

alias apctl=’/etc/init.d/apache2′

et là on peut donc redémarrer le serveur apache en tapant :

apctl restart

Voilà … terminé 😉

A noter que la convention voudrait que l’on fassent ça de façon plus propre en passant par un ServerName et/ou un ServerAlias genre :

<VirtualHost 192.168.0.10:80>
ServerName monsite.fr
ServerAlias www.monsite.fr
DocumentRoot /var/www/monsite.fr
</VirtualHost>