Apache

De Le Wiki du Forum-Debian.fr
Révision datée du 11 décembre 2010 à 18:49 par Kna (discussion | contributions) (authentification)
Aller à la navigation Aller à la recherche

Installation

# aptitude install apache2

La configuration par défaut est déjà fonctionnelle. Vous pouvez le vérifier avec un navigateur en allant sur http://localhost (ou http://adresse_de_la_machine à partir d'un autre poste). Le message « It works ! » doit apparaitre. C'est la page par défaut, elle se trouve dans /var/www. Il vous suffit alors de mettre les fichiers de votre site dans ce répertoire pour qu'il soit utilisable...

Configuration

Un site par utilisateur

Le mod_userdir est activé par défaut. Si un utilisateur a dans son répertoire personnel un dossier ~/public_html, il sera accessible à l'adresse http://adresse_de_la_machine/~nom_de_l'utilisateur

Configuration des sites : Hôtes virtuels

Apache fonctionne avec des hôtes virtuels (virtual hosts) pour permettre d'héberger plusieurs sites sur une même machine. Pour créer un site, il faut créer un fichier dans /etc/apache2/sites-available (le site par défaut s'y trouve déjà). La configuration d'un site se présente sous cette forme :

<VirtualHost *:80>
       ServerAdmin webmaster@example.org
       ServerName  www.example.org
       ServerAlias foo.example.org bar.example.org
       DocumentRoot /var/www

       <Directory /var/www/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
       </Directory>
  
	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
       LogLevel warn

       CustomLog ${APACHE_LOG_DIR}/access.log combined
       ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

Hôtes virtuels

Le site se place entre deux balises <Virtualhost [IP:port]>...</Virtualhost>. Nous remplaçons [IP:port] par l'adresse IP et le port d'écoute du site. Si votre machine est accessible par plusieurs IP, vous pouvez donc mettre plusieurs sites, ayant chacun une adresse IP différente. Si vous voulez que votre site réponde quelque soit l'adresse IP, il suffit de mettre '*', comme dans l'exemple. Vous pouvez de la même façon avoir des sites différents en fonction du port intérrogé, par exemple un site sur le port 80 et le port 8080.

Les directives ServerName et ServerAlias permette de faire des hôtes virtuels, non plus en fonction de l'IP ou du port, mais en fonction du nom de domaine utilisé par le client. Vous pouvez alors héberger plusieurs sites sur le port 80 avec une seule IP, si plusieurs noms de domaines pointent sur cette IP. C'est l'utilisation la plus courante des hôtes virtuels. ServerName ne prend qu'un seul nom de domaine. Si vous voulez que votre site réponde à plusieurs noms de domaine, il vous faut ajouter les domaines supplémentaires avec ServerAlias.

Enfin, la directive DocumentRoot indique le chemin du dossier où se trouve le site.

Répertoires

Les balises <Directory [/chemin/vers/dossier] > ... </Directory> permettent de configurer les option du dossier, notamment via la directive Options :

  • Indexes permet de voir le contenu du dossier avec le navigateur s'il n'y a pas de index.html à la racine
  • FollowSymLinks permet de suivre les liens symboliques
  • MultiViews permet d'avoir des contenus différents en fonction de ce que le navigateur envoie (par exemple dans des langues différentes, comme c'est le cas pour http://www.debian.org)

Pour désactiver une option, il suffit de la faire précéder d'un '-' (par exemple : -Indexes empêchera de voir le contenu du dossier)

La directive AllowOverride permet d'autoriser l'utilisation de fichiers .htaccess. Ainsi si vous hébergez un site mais que vous n'en êtes pas le développeur, vous pouvez laisser la possibilité au développeur de configurer un dossier sans lui laisser l'accès au fichier de configuration d'Apache. Il lui suffira de mettre la configuration dans un fichier .htaccess à la racine du dossier. Le fichier est lu à chaque appel du site, le développeur n'a donc pas besoin de vous demander de recharger apache après avoir changé la configuration. Mais c'est donc plus couteux en performances, ainsi qu'en sécurité. Avec AllowOverride None, les .htaccess sont ignorés. Avec AllowOverride All, ils sont pris en compte. Vous pouvez aussi n'autoriser que certaines configurations, voir http://httpd.apache.org/docs/2.2/fr/mod/core.html#allowoverride

Order vous permet de choisir comment vous autorisez l'accès à votre site :

  • Order Allow,Deny : le site sera accessible si l'adresse est dans une directive Allow from et n'est pas dans une directive Deny from
  • Order Deny,Allow : le site sera accessible si l'adresse est dans une directive Allow from ou n'est pas dans une directive Deny from

Ainsi, si vous voulez que votre site soit accessible uniquement à partir de votre réseau local 192.168.0.0/24, vous pouvez mettre au choix :

Order Allow,Deny
Allow from 192.168.0.0/24
Order Deny,Allow
Deny from all
Allow from 192.168.0.0/24


Vous pouvez avoir plusieurs balises <Directory> si vous voulez mettre des droits différents sur un sous-dossier de votre site. Il suffit de les mettre à la suite (sans les imbriquer).

Logs

La directive LogLevel permet de choisir le niveau de verbosité des logs parmi : debug, info, notice, warn, error, crit, alert, emerg. CustomLog et ErrorLog permettent de choisir l'emplacement des logs. Vous pouvez ainsi utiliser un fichier de logs par site ou le même, au choix.

Activation du site

Debian fournit deux scripts permettant de facilement activer et désactiver des sites. a2ensite et a2dissite. Une fois votre fichier créé dans /etc/apache2/sites-available, il vous suffit de faire :

# a2ensite nom_du_fichier

pour activer le site. Ceci crééra un lien dans /etc/apache2/sites-enabled, qui sera lu par apache. Pour le désactiver, il faudra faire :

# a2dissite nom_du_fichier

Dans les deux cas, n'oubliez pas de recharger la configuration d'apache après :

# /etc/init.d/apache2 reload


NB : Vous remarquerez que le lien pour le site « default » est 000-default'. Ceci est fait de sorte que ce soit le premier à être lu par apache. Ainsi, si sur tous les sites, aucun ServerName ou ServerAlias ne correspond à l'URL intérrogé par le client, c'est ce site qu'il lui sera envoyé...

Authentification

Pour qu'un dossier ne soit accessible à certaines personnes, il faut créer un fichier de mots de passe. Apache fournit l'utilitaire htpasswd pour celà. Pour créer le fichier, il faut utiliser l'option -c :

# htpasswd -c /chemin/vers/fichier/passwd <nom_de_l'utilisateur>

htpasswd vous demande alors le mot de passe de l'utilisateur. Le fichier htpasswd doit être lisible par l'utilisateur d'apache (www-data sous debian).

Pour restreindre un dossier à cet utilisateur, il faut alors mettre dans le <Directory> :

AuthType Basic
AuthName "Accès privé"
AuthUserFile /chemin/vers/fichier/passwd
Require user <nom_de_l'utilisateur>
  • AuthType Basic indique qu'on utilise une authentification basique
  • AuthName indique le nom de l'identificateur, qui s'affiche lorsque le client doit s'identifier
  • AuthUserFile indique le chemin vers le fichier de mot de passe
  • Require indique qui peut accéder au dossier.

Si vous voulez autoriser plusieurs utilisateurs, il vous suffit de lancer htpasswd (sans -c cette fois) pour rajouter un utilisateur. Il faudra alors mettre, à la place de Require user :

Require valid-user

Si vous utilisez le même fichier de mots de passe pour plusieurs sites, il vous est possible de faire des groupes d'utilisateurs, en créant un fichier groupe de la forme

generic: foo bar baz
crypt: alice bob

Il vous suffit alors d'indiquer :

AuthGroupFile /chemin/vers/fichier/de/groupe
Require group crypt

pour permettre seulement à alice et bob d'accéder au dossier, et non à foo, bar et baz...

Ressources

La documentation d'apache est très bien faite et pour une bonne partie traduite en français, n'hésitez pas à l'utiliser : http://httpd.apache.org/docs/2.2/fr