Table of Contents
Apache, la suite
Exercice: creation d'un hote virtuel
- créer le répertoire /var/www/hote_virtuel
mkdir /var/www/hote_virtuel
- créer un hôte virtuel dans /etc/apache2/sites-available/
vi /etc/apache2/sites-available/hote_virtuel
contenant: <code><VirtualHost *> Servername www.hote-virtuel.com DocumentRoot /var/www/hote_virtuel/
</VirtualHost></code>
- faire un lien symbolique du fichier crée dans /etc/apache2/sites-enabled
ln -s /etc/apache2/sites-available/hote_virtuel /etc/apache2/sites-enabled/hote_virtuel
- ajouter une entrée dans /etc/hosts
127.0.0.1 ww.hote-virtuel.com
- tester la configuration
apache2ctl configtest
- relancer Apache
/etc/init.d/apache2 reload
- tester avec un browser
La directive Options
- ajouter un sous-répertoire testdir contenant 2 fichiers file1 et file2
mkdir /var/www/hote_virtuel/testdir touch /var/www/hote_virtuel/testdire file1 touch /var/www/hote_virtuel/testdire file2
- surfer sur http://www.hote-virtuel.com/testdir/
on obtient une erreur:
Forbidden You don't have permission to access /testdir/ on this server.
- pour permettre de browser dans les répertoires ne contenant pas de DirectoryIndex (index.html, index.php, etc. comme défini dans /etc/apache2/apache2.conf), il faut ajouter dans la directive VirtualHost du fichier /etc/apache2/sites-available/hote_virtuel ce qui suit:
<Directory /var/www/hote_viruel> Options Indexes
et ensuite redémarrer apache:
/etc/init.d/apache reload
Pour avoir plus d'infos, cf. l'excellente documentation en local (http://localhost/manual/) installée par le paquet apache2-doc également disponible sur le site officiel d'apache: http://httpd.apache.org/docs-2.0/
Dans ce cas-ci, il faut lire http://httpd.apache.org/docs-2.0/mod/core.html#options
On y voit que par défaut, toutes les options sont activées (Default All).
Si on utilise la directive Options pour activer une ou plusieurs options, toutes les autres sont désactivées.
Comment désactiver explicitement?
Il suffit de mettre un signe moins (-) devant l'option:
Options -Indexes
Pour activer explicitement, il suffit de mettre un signe plus (+) devant l'option:
Options +Indexes
Ces options sont héritées des répertoires parents et de la configuration Apache au niveau serveur.
Fichiers .htaccess
Il est préférable de mettre les directives dans les fichiers de configuration /etc/apache2:
- pour de meilleures performances: à chaque requête, il doit regarder dans le répertoire s'il y a un fichier .htaccess → perte de temps
- pour faciliter l'administration: c'est plus simple d'avoir toutes les directives dans /etc/apache2
Cependant, si on n'y a pas accès, on peut utiliser un fichier nommé .htaccess dans le répertoire où doivent s'appliquer sur les directives.
L'administrateur Apache peut interdire ou restreindre l'utilisation de fichiers .htaccess. cf. la directive AllowOverride: http://httpd.apache.org/docs-2.0/mod/core.html#allowoverride Il faut la mettre dans une directive <Directory>. Dans notre cas (ferme de serveurs), on va imaginer qu'il y a plusieurs types d'abonnement et donc faire la restriction au niveau de l'hôte virtuel. Ici, nous allons empêcher l'utilisateur des fichiers .htaccess Editer /etc/apache2/sites-enabled/hote_virtuel
<VirtualHost *> ServerName www.hote-virtuel.com DocumentRoot /var/www/hote_virtuel/ <Directory /var/www/hote_virtuel/> Options +Indexes +FollowSymLinks AllowOverride None </Directory> </VirtualHost>
et redemarrer apache:
/etc/init.d/apache2 reload
Pour vérifier, créons un fichier .htaccess dans /var/www/hote_virtuel/testdir/ contenant:
<Directory /var/www/hote_virtuel/testdir/> Options -Indexes </Directory>
Si ça fonctionne correctement, on doit pouvoir visionner le contenu du répertoire (puisque la directive dans le .htaccess est ignorée et que dans le VirtualHost on l'a autorisé).
Authentification avec .htaccess
Mettre dans l'hôte virtuel
AllowOverride AuthConfig
au lieu de
AllowOverride None
pour prendre les .htaccess en compte. Ajouter dans /var/www/hote_virtuel/testdir/.htaccess:
Request valid-user AuthUserFile /home/linux/htpasswd
Ensuite, il faut créer la liste des utilisateurs autorisés (identifiant et mot de passe) dans le fichier /home/linux/htpasswd:
htpasswd -c /home/linux/htpasswd toto
et entrer le mot de passe (deux fois). l'argument -c signifie crée le fichier /home/linux/htpasswd.
Redémarrer apache:
/etc/init.d/apache2 reload
HOWTO sur le site d'Apache.
Activation de sites personnels
Pour activer le site de l'utilisateur linux de la machine, il faut d'abord créer le répertoire /home/linux/public_html/ qui sera la racine du site de l'utilisateur linux:
mkdir /home/linux/public_html/
Ensuite, il faut juste s'assurer que le module userdir est activé:
ls -l /etc/apache2/mods-enabled/ total 0 lrwxrwxrwx 1 root root 40 Jun 16 08:03 actions.load -> /etc/apache2/mods-available/actions.load lrwxrwxrwx 1 root root 36 Jun 16 08:01 cgi.load -> /etc/apache2/mods-available/cgi.load lrwxrwxrwx 1 root root 37 Jun 16 08:01 php4.conf -> /etc/apache2/mods-available/php4.conf lrwxrwxrwx 1 root root 37 Jun 16 08:01 php4.load -> /etc/apache2/mods-available/php4.load lrwxrwxrwx 1 root root 40 Jun 16 15:16 rewrite.load -> /etc/apache2/mods-available/rewrite.load lrwxrwxrwx 1 root root 40 Jun 16 08:01 userdir.conf -> /etc/apache2/mods-available/userdir.conf lrwxrwxrwx 1 root root 40 Jun 16 08:01 userdir.load -> /etc/apache2/mods-available/userdir.load
Et vérifier son contenu:
<IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory> </IfModule>
Et surfer sur: http://localhost/~linux/
Si ça ne fonctionne pas, s'assurer que l'utilisateur www-data a accès en exécution à tous les répertoires jusqu'à /home/linux/public_html (donc /home et /home/linux).