« Apache » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
(SSL)
Ligne 223 : Ligne 223 :
  SSLCertificateKeyFile /chemin/vers/clé
  SSLCertificateKeyFile /chemin/vers/clé


Le vhost fonctionnera alors en SSL.
Ensuite il faut activer le SSL avec la commande :
 
a2enmod ssl
 
Puis on redémarre le serveur. Le vhost fonctionnera alors en SSL.
Vous pouvez regarder les commentaires du vhost SSL par défaut (/etc/apache2/sites-available/default-ssl) pour voir les autres options disponibles avec SSL.
Vous pouvez regarder les commentaires du vhost SSL par défaut (/etc/apache2/sites-available/default-ssl) pour voir les autres options disponibles avec SSL.



Version du 16 octobre 2011 à 10:13

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

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...

Contenu dynamique avec CGI

Le CGI permet de faire du web dynamique facilement. Le principe est simple : apache exécute un script ou un programme qui va générer le code HTML d'une page. Le script doit être exécutable par l'utilisateur www-data, et écrire sur sa sortie standard :

Content type text/html; charset=utf-8

suivi du code HTML de la page à afficher.

Attention : À chaque interrogation de la page, apache lance un nouveau processus qui exécute le script, ce qui consomme des ressources systèmes à chaque fois. On peut limiter l'utilisation des ressources avec Fast-CGI, mais le mieux est d'utiliser un module qui permettra de lancer des scripts avec un interpréteur intégré à apache, sans créer de nouveau processus à chaque fois. On trouvera par exemple mod_php (pour les scripts php) ou mod_perl (pour les scripts perl). C'est ce qui est le plus utilisé aujourd'hui...

Pour utiliser du CGI avec Apache, il y a deux méthodes. La première est d'ajouter dans <Directory> :

Options +ExecCGI
Add-Handler cgi-script .cgi .pl

Ainsi les script nommés en .cgi ou .pl seront exécutés au lieu d'être affiché. La seconde méthode est plus sécurisée car elle permet de mettre les scripts dans un dossier à part, qui n'est pas dans la racine du site. Pour celà, on met dans <VirtualHost>

ScriptAlias /cgi-bin/ /chemin/vers/scripts/
<Directory "/chemin/vers/scripts">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
 </Directory>

En allant à http://adresse_du_site/cgi-bin on est alors redirigé vers le dossier où sont situés les scripts CGI.


Modules

Les modules apache

Apache permet d'ajouter des modules qui apportent de nouvelles fonctionnalités. Certains sont installés et activés par défaut, comme par exemple le module auth_basic qui permet l'authentification ou le mod_deflate qui permet de compresser certains fichiers.

Les modules sont installés dans /etc/apache2/mods-available. Pour chaque module, vous trouverez un fichier .load qui contient la directive pour charger le module, et un fichier .conf qui contient sa configuration (que vous pouvez adapter à vos besoins).

On active et désactive un module avec les commandes a2enmod et a2dismod, qui crééront des liens dans /etc/apache2/sites-enabled. Il vous faudra redémarrer apache pour que ce soit pris en compte :

# /etc/init.d/apache2 restart

userdir : un site par utilisateur

Le module mod_userdir permet à chaque utilisateur d'avoir un site. Pour celà il faut activer le module :

# a2enmod userdir

Une fois le module activé, chaque utilisateur peut placer un site dans un dossier ~/public_html. Par exemple, http://adresse_du_site/~foo pointera vers /home/foo/public_html.

Pour le désactiver, il suffit de faire

# a2dismod userdir

(n'oubliez pas de redémarrer apache)

suexec : droits plus fin sur les CGI

Une fois activé, mod_suexec permet de lancer les scripts CGI avec les droits de l'utilisateur auquel appartient le script, au lieu de www-data. Ainsi, vous pouvez donner donner des droits sur le systèmes à certains utilisateurs, et pas à d'autres.

Autres modules

En plus des modules installés par défaut dans /etc/apache2/mods-available, il vous est possible d'installer des modules supplémentaires via APT. Voyez le résultat de :

aptitude search ^libapache2-mod

pour avoir la liste des modules disponibles, parmi lesquels :

  • mod_php : pour faire des sites dynamiques en php
  • mod_perl : pour faire des sites dynamiques en perl
  • mod_evasive : apporte une protection contre les attaques DOS
  • et plein d'autres...

Chiffrement avec SSL

Pour utiliser SSL avec Apache, il vous faut obtenir un certificat SSL. Un certificat autosigné vous est fourni lors de l'installation d'apache dans /etc/ssl/certs (ssl-cert-snakeoil.pem pour le certificat et ssl-cert-snakeoil.key pour la clé). Cependant, vous souhaiterez probablement que le certificat corresponde à l'adresse de votre site. Vous pouvez alors en créer un avec openssl ou en obtenir un auprès d'une autorité de certification.

Une fois votre certificat obtenu, il vous suffit de créer un vhost sur le port 443, en y ajoutant les directives suivantes :

SSL Engine On
SSLCertificateFile    /chemin/vers/certificat
SSLCertificateKeyFile /chemin/vers/clé

Ensuite il faut activer le SSL avec la commande :

a2enmod ssl

Puis on redémarre le serveur. Le vhost fonctionnera alors en SSL. Vous pouvez regarder les commentaires du vhost SSL par défaut (/etc/apache2/sites-available/default-ssl) pour voir les autres options disponibles avec SSL.

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