Ce document a pour but d'expliquer succintement comment configurer un serveur apache2 pour heberger un ou plusieurs sites web. Ce document traite des serveurs virtuels (virtual host), du protocole https (web sécurisé SSL) ainsi que de la sécurisation avec les htaccess.
Il est possible d'utiliser plusieurs types de gestion du serveur :
Pour installer apache2 sous Debian :
Pour heberger des pages dynamique écrites en php :
Pour utiliser les script Perl (cgi) avec apache2 :
En général, le repertoire de configuration se situe dans /etc/apache2. Il contient les fichiers et repertoires suivant :
Pour éviter les Dénis de Services (DoS), il est important de régler quelques paramètres dans /etc/apache2/apache2.conf selon votre connexion :
# KeepAlive: Autoriser les connexions permanentes KeepAlive On # MaxKeepAliveRequests: Nombres de connexion permanentes (il est conseillé de # laisser une valeur élevée sauf si vous utilisez une machine peu performante) MaxKeepAliveRequests 50 # KeepAliveTimeout: TimeOut d'une connexion permanente (laisser tel quel) KeepAliveTimeout 15 ## ## Server-Pool Size Regulation (MPM specific) ## # prefork MPM !!!PAS UTILISE : apache2-mpm-prefork!!! <IfModule prefork.c> StartServers 3 MinSpareServers 3 MaxSpareServers 10 MaxClients 15 MaxRequestsPerChild 0 </IfModule> # pthread MPM !!! apache2-mpm-worker !!! # StartServers ......... Nombre de processus serveur lancé au démarrage # MaxClients ........... Nb de maximum processus serveur autorisé (nb de clients) # MinSpareThreads ...... Nombre minimum de threads disponibles # MaxSpareThreads ...... Nombre maximum de threads disponibles # ThreadsPerChild ...... Nombre constant de threads par serveur # MaxRequestsPerChild .. Nombre Maximum de requetes acceptées par serveur # # Ces paramètres sont à configurer selon la puissance de votre machine # et le débit de votre connexion internet. Si vous souhaitez utiliser # apache avec un petite connexion (128kb/s d'upload), divisez par 2 voire 3 # les paramètres MaxClients, MinSpareThreads, MaxSpareThreads et ThreadsPerChild # <IfModule worker.c> StartServers 2 MaxClients 100 MinSpareThreads 20 MaxSpareThreads 65 ThreadsPerChild 20 MaxRequestsPerChild 0 </IfModule> # perchild MPM !!!PAS UTILISE : apache2-mpm-perchild!!! <IfModule perchild.c> NumServers 3 StartThreads 3 MinSpareThreads 3 MaxSpareThreads 10 MaxThreadsPerChild 20 MaxRequestsPerChild 0 AcceptMutex fcntl </IfModule>
Lorsqu'une requetes ou une de vos pages génére une erreur, apache affiche une page d'erreur. La fameuse erreur 404 pour une page inexistante.
Vous pouvez utilisez les pages par défault de apache ou créer une page personnalisée. Cette dernière est toujours plus conviviale et montre que vous soigner votre site. Vous pouvez aussi créer un script qui envoye par exemple un email avec des informations (page référente...).
Il y a plusieurs manières de configurer ces pages.
Remplacer, par exemple, la ligne de apache2.conf :
par celle-ci en écrivant entre guillemets ce que vous voulez afficher :
Je vous conseille de creer un nouveau repertoire /var/www/erreur dans lequel vous mettrait vos pages d'erreur.
Dans ce cas il faut changer les lignes de apache2.conf:
Alias /error/ "/usr/share/apache2/error/" <Directory "/usr/share/apache2/error">
par
Alias /error/ "/var/www/error/" <Directory "/var/www/error">
Pour ne pas avoir de problème, copier dans un premier temps les pages d'erreurs par défault dans ce répertoire :
puis affecter l'utilisateur apache (www-data) comme propriétaire du repertoire et de ses fichiers :
Le nom des pages est du type HTTP_NomErreur.html.var .
Vous pouvez personnaliser ces pages :
Content-language: fr Content-type: text/html; charset=ISO-8859-1 Body:----------fr-- <!--#set var="CONTENT_LANGUAGE" value="fr" -->
devant le corps de votre page de la langue choisie (ici fr : français).
Pour mettre une autre langue, ajoutez un autre bloc du meme type et le corps correspondant à la suite ...
et en ajoutant la ligne correspondante:
Meme principe que la redirection locale sauf que le serveur va chercher les pages d'erreur sur un autre serveur. Exemple :
Supposons que votre serveur héberge plusieurs sites.
Dans le cas général, pour accéder à vos différents sites vous tapez une adresse tel que http://mondomaine.com/site1, http://mondomaine.com/site2 ... Grace aux hotes virtuels d'apache2 vous pouvez par exemple acceder à ces sites avec les adresse http://site1.mondomain.com, http://site2.mondomain.com, ...
Je vous conseille de stocker vos sites dans /var/www/ (i.e. : /var/www/site1/, /var/www/site2/).
Comme expliqué plus haut, les fichiers de config des virtual hosts ce trouvent dans /etc/apache2/sites-available/. Allez dans ce repertoire. Pour commencer la configuration le plus simple est de copier la configuration par default puis la modifier :
cd /etc/apache2/site-available cp default site1
Editez site1 :
# Nom du Virtualhost : port ( ici site1:80 (port http) )
<VirtualHost site1:80>
ServerAdmin webmaster@mondomain.com
# Nom du serveur
ServerName site1
# Définition du répertoire racine du site toto
DocumentRoot /var/www/site1/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
# Définition du répertoire racine du site1
<Directory /var/www/site1/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# Pour inserer un repertoire de script (cgi)
# Enlever cette section si vous n'utilisez pas de tel script
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
# Si on veut un fichier de logs d'erreur propre à site1
ErrorLog /var/log/apache2/error_site1.log
LogLevel warn
# Si on veut un fichier de logs d'accès propre à site1
CustomLog /var/log/apache2/access_site1.log combined
ServerSignature On
# Insere le repertoire contenant les icones correspondant
# aux type MIME
Alias /icons/ "/usr/share/apache2/icons/"
<Directory "/usr/share/apache2/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# Insere le repertoire contenant la documentation apache
# ce repertoire n'est accessible qu'en local
# Section à enlever sur un serveur de production
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Pour activer ce site, il vous faire le lien symbloqiue vers ce fichier dans /etc/apache/sites-enabled et relancez apache :
ln -s /etc/apache2/sites-available/site1 /etc/apache2/sites-enabled/ /etc/init.d/apache2 reload
Pour tester, il suffit de tapez http://site1.mondomain.com. Et là, çà marche pas !!
C'est normal, car votre ordinateur ne sait pas résoudre site1.mondomain.com (obtenir l'adresse ip).
Pour resoudre ce problème, soit vous installez un serveur DNS (cf howto Bind) si vous souhaitez que votre serveur virtuel soit accessible depuis l'extérieur, soit pour tester modifiez votre /etc/hosts (ajoutez site1.mondomain.com à la fin de la ligne de l'ip du serveur ):
Relancez Apache et cela devrait marcher cette fois-ci.
Vous pouvez faire çà autant de fois que vous voulez avoir d'hôtes virtuels.
Sous Debian, pour générer les certificats de votre site, utiliser la commande :
Je vous laisse le soin si vous le souhaiter de générer vos certificats vous-memes. Par contre, il est conseillé de mettre ces certificats dans le repertoire /etc/apache2/ssl/.
Apache 2 est installé avec le module ssl sous Sarge. Il ne s'agit pas d'un paquet supplémentaire.
Il suffit de le charger (il existe 2 manières):
Il vous faut ensuite éditer le fichier ssl.conf. Ajouter simplement une ligne à la fin du fichier (avant le </IfModule>):
Ensuite, ajoutez au fichier ports.conf la ligne suivante :
Deux possibilités :
NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin yourmail@mail.com
SSLEngine on
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews AllowOverride None
Order allow,deny allow from all
RedirectMatch ^/$ /apache2-default/
</Directory>
</VirtualHost>
Les fichiers “.htaccess” permettent de donner des directives au serveur apache. Je vais aborder seulement le côté limitation d'accès aux fichiers. Ces fichiers sont mis dans le répertoire ou un sous repertoire des sources du site. Les directives définies dans ce fichier sont applicables au répertoire dans lequel il se trouve et dans ses sous-répertoires.
Rmq : Sous unix, le fichier .htaccess est un fichier caché. (vous pouvez le lister dans un repertoire avec la commande “ls -a”).
Cette directive permet de définir l'ordre d'évaluation des directives Deny et Allow
Par default, l'ordre est Deny,Allow.
Attention il ne faut aucun espace entre Allow et Deny, seulement une virgule.
Cette directive définie les clients autorisés à accéder au serveur. Le client peut être un nom de machine, une adresse ou une plage d'IP. Le premier argument de cette directive est toujours from :
Les arguments suivants peuvent être de 3 formats différents. Si “Allow from all” est spécifié, tous les clients ont le droit d'accès. Pour autoriser l'accès seulement à certaines machines ou groupes de machines, celles-ci doivent être définies comme suit :
Cette directive définie les clients interdit d'accès au serveur. Le client peut être un nom de machine, une adresse ou une plage d'IP. Les arguments sont identiques à la directive Allow.
On peut limiter l'accès au serveur aux utilisateurs ayant un mot de passe. Pour cela, il faut un fichier .htpasswd et rajouter quelques directives dans le fichier .htaccess correspondant au répertoire devant être protégé. Il est possible de filtrer aussi par groupe d'utilisateur avec le fichier .htgroup.
Ce fichier contient le nom des utilisateurs et leur mot de passe associé (au format CRYPT). Pour ajouter un utilisateur à ce fichier, il faut utiliser la commande htpasswd2 (pour apache2) comme ceci :
htpasswd2 -c .htpasswd utilisateur #une première fois (lorque le fichier n'existe pas) htpasswd2 .htpasswd utilisateur
Ce fichier contient la liste des groupes et les utilisateurs correspondants. Le format est :
groupe1: utilisateur1 utilisateur2 groupe2: utilisateur1 utilisateur3
Pour activer la protection, il suffit d'ajouter ces lignes dans le fichier .htaccess :
AuthName "Il faut un pwd pour entrer !!!" AuthUserFile /rep/ou/se/trouve/.htpasswd AuthGroupFile /rep/ou/se/trouve/.htgroup AuthType Basic require group groupe1 require user utilisateur5