Administration réseau sous Linux: Apache
Source: Wikilivres
Apache est un serveur HTTP libre. Un serveur HTTP permet d’héberger des sites web qui seront accessibles avec un navigateur tel que Mozilla Firefox, Internet Explorer ou encore Chrome.
Un site web peut fournir tout type de contenu (des fichiers textes, HTML, Flash, zip…). Ce contenu peut être statique (le serveur transmet un fichier au navigateur) ou dynamique (le contenu est généré par un programme exécuté par le serveur). Les sites web contiennent généralement plusieurs types de documents, certains étant statiques et d’autres dynamiques.
Nous traiterons ici d’Apache 2.2 sur un système Debian (et ses dérivés, comme Ubuntu).
Fichiers log
Par défaut sous Debian, Apache enregistre les erreurs dans le fichier /var/log/apache2/error.log
. Quand quelque chose ne fonctionne pas, ce fichier fournit souvent des pistes pour trouver la solution.
Il enregistre également toutes les requêtes dans /var/log/apache2/access.log
.
Configuration de base
Sous Debian, Apache se lance automatiquement lorsqu’on l’installe et à chaque démarrage du système. Lorsqu’on modifie sa configuration, il faut lui faire prendre connaissance des changements avec la commande
/etc/init.d/apache2 reload
Pour l’arrêter, le lancer ou le relancer on utilisera la même commande avec stop
, start
ou restart
.
Pour d’autres systèmes il faudra consulter la documentation du système ou celle d’Apache [archive].
Configuration du serveur
La configuration [archive] du serveur se trouve dans /etc/apache2/apache2.conf
. Ce fichier contient des instructions Include
[archive] qui permettent de déplacer certaines parties de la configuration dans d’autres fichiers. Debian utilise cette fonctionnalité pour les modules [archive] (comme PHP) et la gestion des serveurs virtuels [archive] :
Configuration des modules
Le répertoire /etc/apache2/mods-available
contient les modules installés. Le répertoire /etc/apache2/mods-enabled
contient les modules activés. Les modules activés sont des liens symboliques vers les modules installés.
Pour activer ou désactiver un module, on peut manipuler directement les liens ou utiliser les commandes a2enmod
et a2dismod
(voir les pages de man).
Configuration des sites
De la même manière, le répertoire /etc/apache2/sites-available
contient les sites web disponibles et /etc/apache2/sites-enabled
les sites activés. Il en existe un préinstallé : le site default
.
Les sites peuvent s’activer ou se désactiver en manipulant les liens dans sites-enabled
ou en utilisant a2ensite
et a2dissite
.
Quelques directives classiques
La syntaxe d’Apache est assez simple. On trouve des blocs (ou contextes) comme par exemple :
<VirtualHost ...> # début de bloc VirtualHost ... <Directory ...> # début de bloc Directory ... </Directory> # fin de bloc Directory ... </VirtualHost> # fin de bloc VirtualHost
et des directives comme par exemple
Include /etc/apache2/sites-enabled/
Les directives qui permettent de configurer le serveur lui-même sont généralement placées dans apache2.conf
. Celles qui ne concernent qu’un site web sont déportées dans le fichier de configuration du site (sites-available/mon-site-web
).
La directive DocumentRoot [archive] fixe la racine du serveur Web, c’est-à-dire le répertoire de base où se trouvent les documents. Par exemple avec la directive DocumentRoot /var/www/html
, si le navigateur demande la page http://serveur/repertoire/fichier.txt
, le serveur cherchera le fichier /var/www/html/repertoire/fichier.txt
.
UserDir [archive] permet d’indiquer le répertoire personnel des utilisateurs du système. La directive UserDir public_html
signifie qu’un utilisateur peut publier ses pages web personnelles dans un sous-répertoire public_html
de son répertoire personnel. Pour l’utilisateur toto, c’est généralement /home/toto/public_html
. Sa page d’accueil sera alors accessible par l’URL spéciale http://serveur/~toto
.
DirectoryIndex [archive] indique la liste des fichiers qu’Apache cherchera à afficher si l’URL n’en précise pas. Par exemple si la configuration contient DirectoryIndex index.html index.php
et qu’on demande l’URL http://serveur/repertoire/
, Apache va chercher dans le répertoire un fichier index.html
ou index.php
. Si un de ces fichiers existe, il sera affiché. Sinon, Apache affichera soit la liste des fichiers, soit une erreur (suivant la présence de Indexes
dans la directive Options [archive]).
AccessFileName [archive] définit le nom du fichier qu’on peut placer dans un répertoire pour en modifier sa configuration. Cela permet, par exemple, d’interdire localement l’affichage de la liste des fichiers, ou de protéger par mot de passe un répertoire et ses sous répertoires.
Listen [archive] indique à Apache sur quel port TCP il doit écouter. Le port par défaut du protocole HTTP est 80.
ServerName [archive] indique à Apache son nom de domaine et éventuellement son port. Il s’en sert lorsqu’il doit communiquer son adresse au client (le navigateur). C’est le cas par exemple lorsqu’on demande l’adresse http://serveur/repertoire
sans slash (/
) à la fin. Comme ce n’est pas une URL valide (l’URL d’un répertoire doit se terminer par un slash), Apache utilise la directive ServerName
pour reconstruire une adresse avec un slash et la renvoi au client.
Gestion du nombre d’instances d’Apache
Le serveur Apache utilise plusieurs processus et prends en charge plusieurs types de stations multi-processeurs en utilisant les modules MPM (multi processing modules).
Le premier module prefork utilise des processus (pour systèmes stables ou plus anciens), le deuxième worker utilise des threads, et le dernier des threads par processus. Le dernier module perchild est en cours de développement et n’est pas recommandé.
Celui utilisé par défaut sous Linux est prefork.
Exemple commenté
La partie du fichier de configuration traitant la gestion du nombre de processus et la suivante:
##
## Server-Pool Size Regulation (MPM specific) ##
# prefork MPM
# StartServers ......... nb de processus serveur au demarrage
# MinSpareServers ...... nb minimum de processus serveurs '''libres''' instanciés
# MaxSpareServers ...... nb maximum de processus serveurs '''libres''' instanciés. S'il y en a MaxSpareServers+1 on les tues
# MaxClients ........... nb maximum de processus serveurs qui peuvent demarrer
# MaxRequestsPerChild .. nb maximum de requètes gérées par processus serveur.
# Apres MaxRequestsPerChild requètes, le processus meurt.
# Si MaxRequestsPerChild=0, alors le processus n'expire jamais.
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 20
MaxRequestsPerChild 0
</IfModule>
# pthread MPM # StartServers ......... initial number of server processes to start
# MaxClients ........... maximum number of server processes allowed to start
# MinSpareThreads ...... minimum number of worker threads which are kept spare
# MaxSpareThreads ...... maximum number of worker threads which are kept spare
# ThreadsPerChild ...... constant number of worker threads in each server process
# MaxRequestsPerChild .. maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM # NumServers ........... constant number of server processes
# StartThreads ......... initial number of worker threads in each server process
# MinSpareThreads ...... minimum number of worker threads which are kept spare
# MaxSpareThreads ...... maximum number of worker threads which are kept spare
# MaxThreadsPerChild ... maximum number of worker threads in each server process
# MaxRequestsPerChild .. maximum number of connections per server process (then it dies)
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
AcceptMutex fcntl
</IfModule>
Paramétrage des répertoires
Chaque répertoire auquel Apache accède peut être configuré indépendamment (et ses sous-répertoires en héritent).
Le paramétrage d’un répertoire se met dans un “conteneur” délimité par <Directory chemin_du_répertoire>
et </Directory>
. La configuration s’applique au répertoire et à tous ses sous répertoires. Si un sous-répertoire possède également sa propre configuration, elle vient s’ajouter à celle du parent.
Voici quelques exemples de contrôle d’accès. Plus de détails sont donnés dans la section “Un exemple de configuration”.
# Configuration du répertoire racine du système <Directory /> # On n'autorise aucune option particulière Options None # Aucune modification n'est autorisé dans les fichiers .htaccess AllowOverride None </Directory> # Pour la racine du serveur: <Directory /var/www/html> # Quelques options Options Indexes Includes FollowSymLinks # Les options peuvent être changées dans un .htaccess AllowOverride All # Permet à tout le monde d'accéder aux documents Allow from All # Spécifie comment appliquer la règle précédente Order allow,deny </Directory> # Le répertoire contenant des exécutables CGI <Directory /usr/lib/cgi-bin> AllowOverride None Options ExecCGI </Directory>
Les paramètres possibles de la directive Options [archive] sont : “None”, “All”, “Indexes”, “Includes”, “FollowSymLinks”, “ExecCGI”, ou “MultiViews”.
Gérer les pages Web personnelles
Il est possible de permettre aux utilisateurs du système de diffuser des pages personnelles sans avoir à créer un site par utilisateur. Il faut pour cela utiliser le module userdir
.
Le répertoire contenant le site web doit être créé dans le home de l’utilisateur et doit être accessible en lecture pour tous. Le nom du répertoire est défini par la directive UserDir [archive]. Par défaut il s’agit du répertoire public_html
.
L’adresse pour accéder à ces sites personnels est le nom de l’utilisateur précédé d’un tilde (~
).
Par exemple un utilisateur toto sur le serveur www.iut.clermont.fr peut créer les pages de son site dans le répertoire /home/toto/public_html
, et on pourra y accéder avec l’adresse : http://www.iut.clermont.fr/~toto/.
Il est possible de n’autoriser que certains utilisateurs à bénéficier du UserDir
. Par exemple pour n’autoriser que sasa et toto à avoir un site personnel :
UserDir disabled UserDir enabled sasa toto
Pour définir les options de ces répertoires, on peut utiliser une clause Directory
pour le répertoire /home/*/public_html
:
<Directory /home/*/public_html> Order allow,deny Allow from all </Directory>
La clause UserDir public_html
ne fonctionne que pour des utilisateurs ayant un compte sur le système. L’URL http://www.iut.clermont.fr/~toto ne fonctionne que si toto est un véritable utilisateur (auquel cas l’expression Unix ~toto
a un sens), pas seulement si le répertoire /home/toto/public_html
existe.
On peut utiliser une autre forme de UserDir pour autoriser les répertoires sans forcément qu’il y ait un compte unix associé :
UserDir /home/*/public_html
Le CGI (Common Gateway Interface) est une norme permettant à Apache d’exécuter des programmes écrits en n’importe quel langage (Bash, C, Java, Perl, PHP, Python…), du moment qu’il est exécutable et qu’il respecte certaines contraintes d’entrées/sortie.
Configurer l’accès aux scripts CGI
Pour qu’Apache prenne en charge les scripts, il est nécessaire d’effectuer un minimum de paramétrage dans la configuration du site.
Activer le module
a2enmod cgi
ScriptAlias
La directive (de httpd.conf) :
ScriptAlias /cgi-bin/ /chemin des scripts/
précise le nom du répertoire où Apache est autorisé à exécuter des scripts CGI[1].
Exemple Unix :
ScriptAlias /cgi-bin/ /var/www/cgi-bin
Exemple Windows, utiliser le format URL (pas d’antislash) :
ScriptAlias /cgi-bin/ "C:/wamp/bin/apache/apache2.2.27/cgi-bin/"
En fait le chemin /cgi-bin/
n’existe pas vraiment, il est dirigé vers le chemin des scripts défini par la directive, et cela permet d’écrire des URL comme http://serveur/cgi-bin/mon_script
.
ExecCGI
La clause suivante active l’option ExecCGI
dans /var/www/cgi-bin
, ce qui autorise Apache à exécuter les scripts sur le serveur :
<Directory /var/www/cgi-bin> Options ExecCGI </Directory>
Par exemple : vous écrivez un script essai.cgi
, et vous voulez que /home/httpd/cgi-bin
contienne les scripts.
Il faut donc au moins écrire :
<Directory /home/httpd/cgi-bin> Options ExecCGI </Directory>
L’appel à un script essai.cgi sera effectué par l’URL : http://serveur/cgi-bin/essai.cgi
AddHandler
Cette clause permet de choisir les extensions de fichiers qui seront autorisés, ex :
AddHandler cgi-script .cgi .exe .pl .py .vbs
Récapitulatif
Exemple complet sur Windows, dans la configuration Apache :
ScriptAlias /cgi-bin/ "E:/www/cgi-bin/" <Directory "E:/www/cgi-bin/"> Options FollowSymLinks Indexes AllowOverride All Order deny,allow Allow from all Require all granted </Directory>
Dans E:/www/cgi-bin/.htaccess
:
AddHandler cgi-script .cgi .exe .pl .py .vbs
Écrire un programme CGI
La contrainte principale concerne la sortie du programme. Si un programme CGI génère des données sur sa sortie standard, il doit les précéder d’un en-tête HTTP permettant de les identifier.
Bash
Voici un exemple de programme CGI écrit en bash :
#!/bin/bash
# Header
echo "Content-type: text/html"
# Fin du header
echo ""
# Contenu à afficher dans le navigateur
echo "<html><body>Hello World!</body></html>"
Ce script génère une page HTML.
Perl
#!c:/perl/perl/bin/perl.exe -w
use CGI;
my $query = new CGI;
my $Name = $query->param('Name');
print $query->header();
print "Hello World!"
Python
#!C:\Program Files (x86)\Python\python.exe
# -*- coding: UTF-8 -*-
print "Content-Type: text/plain;charset=utf-8"
print
print "Hello World!"
- Pour plus de détails voir : Programmation Python/L’interface CGI.
VBS
Pour Windows[2].
'!c:/windows/system32/cscript //nologo
Wscript.Echo "Content-type: text/html" & vbLF & vbLF
WScript.Echo "Hello World!"
Wscript.Quit 0
Erreurs connues
- Error 500 Erreur du serveur! : remplacer un
Deny from all
par unAllow from all
. Sinon, regarder les logs (tail /var/log/apache2/error.log
). Par exemple, cela peut provenir desuexec policy violation
=> commenter la directiveSuexecUserGroup
. - Error 403 Accès interdit : lister ce répertoire est interdit, il faut donc connaitre l’URL des fichiers qu’il contient.
- Le code source du fichier à exécuter s’affiche dans le navigateur, ou ce dernier propose de le télécharger : le
Addhandler
est manquant (exemple dans le .htaccess ci-dessus). Sinon c’est le module qui n’est pas activé (a2enmod cgi). - couldn’t create child process : remplacer le chemin après le shebang. Par exemple :
#!/usr/bin/perl
par#!c:/perl/perl/bin/perl.exe -w
.#!/usr/bin/env python
par#!C:\Program Files (x86)\Python\python.exe
.
- End of script output before headers : en-tête manquante dans le contenu affiché par le script (ex : déplacer l’importation avant
print "Content-Type: text/plain;charset=utf-8"
). Mais cela peut aussi être dû à un message d’erreur dans le script à exécuter. - malformed header from script: Bad header: : l’en-tête n’est pas adaptée (ex : remplacer
#print "Content-Type: text/plain;charset=utf-8"
parprint "Content-type: text/html\n\n"
s’il y a unprint "<html>"
après).
Sinon consulter les logs Apache…
Le module PHP
PHP a normalement été intégré au serveur Apache sous forme d’un module chargeable situé comme tous les autres modules d’Apache dans /usr/lib/apache2/modules
.
Les fichiers /etc/apache2/mods-availiable/php.load
et /etc/apache2/mods-availiable/php.conf
contiennent les directives LoadModule
et AddType
qui permettent à Apache d’exécuter du PHP quand on demande un fichier se terminant par .php
. Ils doivent être liés dans /etc/apache2/mods-enabled
pour activer PHP. On peut utiliser pour cela la commande a2enmod
.
En marge de Apache, PHP possède lui aussi son fichier de configuration, souvent /etc/php.ini
. Il n’est pas particulièrement conseillé d’y intervenir sauf si on sait ce que l’on fait. On peut néanmoins y observer que PHP prend bien en compte le module d’extension MySQL, contenant les fonctions d’accès au “moteur” de base de données MySQL (qui a dû être installé à part), par la présence de extension=mysql.so
.
En cas de modification d’un fichier de configuration, comme PHP fonctionne comme module d’Apache, il faut redémarrer Apache pour qu’il réinitialise PHP par la lecture de php.ini.
/etc/init.d/apache2 restart
Principe
Pour protéger un répertoire en particulier (et ses sous-répertoires), il suffit de placer un fichier nommé .htaccess
dedans. Apache appliquera instantanément ensuite les règles qu’il contient, uniquement dans cette arborescence.
Par exemple, pour interdire de visualiser les fichiers d’un répertoire qui n’a pas d’index (ex : .html, .php), ajouter le code : Options -Indexes
.
Protection par provenance
De nombreux robots tentent quotidiennement de pirater des bases de données (par exemple via PhpMyAdmin). Pour s’en prémunir on peut n’autoriser que deux IP à lire ce répertoire :
deny from all
allow from 127.0.0.1
allow from 127.0.0.2
Si les plages d’autorisation chevauchent celles d’interdiction, il est possible de préciser leur précédence (l’ordre des lignes dans le fichier ne change rien) :
order allow, deny
- commence par les autorisation puis démarre les interdictions au risque d’interdire ce qui était autorisé.
order deny, allow
- le contraire est moins restrictif.
Protection par mot de passe
Configuration de l’authentification
Il est impératif que la modification des paramètres d’authentification soit autorisée dans la configuration d’Apache.
Il faut que la directive AllowOverride [archive] d’un répertoire parent contienne l’option AuthConfig
.
Les directives à placer dans le .htaccess
sont les suivantes :
AuthType basic
- type d’authentification communément adopté mais peu sécurisé
AuthName "Mon message"
- affichera le texte comme invite dans la boîte de dialogue
AuthUserFile /etc/apache2/my_passwd
- indique où vont se trouver les mots de passe
Require valid-user
- précise qu’il faut un compte dans le fichier de mots de passe pour accéder au répertoire
On peut aussi utiliser Require user toto sasa
pour n’autoriser que les comptes toto et sasa.
Le type d’authentification basic fait circuler les mots de passe en clair. Il existe d’autres types plus sécurisés comme digest, qu’il est recommandé de combiner à HTTPS. Voir l’article sur wikipédia pour plus de détails sur le fonctionnement.
La première requête adressée à ce répertoire protégé provoquera l’affichage d’une boîte de dialogue par laquelle l’utilisateur devra s’identifier (nom et mot de passe) :
- Si le mot de passe saisi est invalide, la boite de dialogue s’affichera de nouveau.
- S’il est valide, le navigateur l’enregistre et ne le demandera plus.
Il faudra relancer le navigateur pour qu’il le demande de nouveau.
Fichier de mots de passe
Pour créer un fichier stockant les mots de passe permettant de lire un site, nommé /etc/apache2/default-passwd
avec comme 1er utilisateur toto, on utilisera la commande
htpasswd -c /home/user/www/.htpasswd toto
Pour ajouter ou modifier un utilisateur à un fichier de mots de passe existant :
htpasswd /home/user/www/.htpasswd sasa
Pour que le .htaccess active le .htpasswd, y ajouter les directives :
AuthName "Page protégée" AuthType Basic AuthUserFile "/home/user/www/.htpasswd" Require valid-user
Redirections
La syntaxe est la même que dans le fichier de configuration générale d’Apache, sauf que cela n’affectera que le répertoire du fichier .htaccess.
Problèmes connus
Si le .htaccess ne produit aucune redirection, vérifier que le module Apache est bien activé :
a2enmod rewrite
Et que la directive suivante figure au moins dans un répertoire parent du .htaccess :
AllowOverride All
Puis relancer Apache.
Serveurs virtuels (virtual hosts)
Principe
Apache peut gérer plusieurs sites web simultanément. Ils seront tous accessibles à partir de la même adresse IP et du même port.
Pour les différencier, Apache se sert de l’adresse demandée par le navigateur.
Par exemple si site1.com et site2.com pointent sur la même adresse IP, les URL http://site1.com/ et http://site2.com/ aboutiront sur le même serveur.
Mais au moment de la requête, le navigateur précise qu’il a demandé l’adresse http://site1.com/ ou http://site2.com/.
Apache se sert de cette information pour savoir quel site afficher. On parle de serveur virtuel ou virtual host.
Pour indiquer à Apache quel site correspond à un nom de domaine, on utilise une section <VirtualHost *>
. Sous Debian, il y a généralement un fichier par section VirtualHost
dans le répertoire /etc/apache2/sites-available
.
La section devra contenir une directive ServerName [archive] qui indiquera le nom associé à ce serveur virtuel.
Elle pourra également contenir une directive ServerAlias [archive] si on veut que d’autres noms aboutissent à ce site.
Par exemple :
- En Windows éditer
C:\Program Files (x86)\EasyPHP\binaries\conf_files\httpd.conf
- En Unix-like :
/etc/apache2/httpd.conf
<VirtualHost MonIP:MonPort>
ServerAdmin admin@site1.com
DocumentRoot /home/site1/racine
ServerName site1.com
ServerAlias www.site1.com
AccessLog /home/site1/access.log
ErrorLog /home/site1/error.log
<Directory /home/site1/racine>
AllowOverride All
</Directory>
</VirtualHost>
Pour affecter tous les sites et ports, remplacer ceux-ci dans la première balise par *.
En cas d’erreur Apache d’ajouter une “directive” lors de sa relance, ajouter une ligne NameVirtualHost MonIP:MonPort.
La documentation d’Apache sur les serveurs virtuels [archive] contient des informations détaillées sur le sujet.
Pour que ce serveur virtuel fonctionne, il est impératif que les noms site1.com et www.site1.com soient connus par la machine qui tente d’y accéder (celle qui lance le navigateur).
Pour cela il y a plusieurs méthodes :
- acheter le nom de domaine en question et le configurer pour qu’il pointe sur la bonne adresse IP
- utiliser un serveur DNS qui renverra la bonne IP pour ce domaine
- modifier le fichier
hosts
sur la machine cliente pour faire correspondre ce domaine à la bonne adresse IP (voir le livre Installation et configuration d’une carte réseau)
Problèmes connus
Les problèmes suivants peuvent survenir lors des relances Apache.
Invalid command 'SuexecUserGroup'
La directive SuexecUserGroup
précise les permissions des internautes dans le système de fichier. Toutefois elle n’est pas installée par défaut :
apt-get install apache2-suexec
a2enmod suexec
apache2: bad user name Utilisateur1
Un utilisateur Unix appelé dans la configuration n’existe pas. Il faut donc le créer :
useradd Utilisateur1
apache2: bad group name Groupe1
Un groupe Unix appelé dans la configuration n’existe pas. Il faut donc le créer :
groupeadd Groupe1
No such file or directory:
… Cannot access directory '/etc/apache2/logs/'
… Configuration check failed
Un répertoire Unix appelé dans la configuration n’existe pas. Il faut donc le créer :
mkdir /etc/apache2/logs
exit signal Segmentation fault (11)
Cela peut survenir quand PHP rencontre une erreur. Pour la connaitre précisément, il faut lancer le script en shell (sans Apache). Exemple :
su www-data
php5 -q SendMail.php
SMTP Error: Could not connect to SMTP host.
# Ou encore en écrivant le script sans .php :
php5 -r "chown('/home/Compte2', 'Compte1');"
PHP Warning: chown(): Operation not permitted in Command line code on line 1
# Vérification en shell
chown Compte1 /home/Compte2
chown: modification du propriétaire de «/home/Compte2»: Opération non permise
Exemples de configuration
Voici quelques exemples de configuration. L’ensemble des directives possibles peut être consulté ici : http://httpd.apache.org/docs/2.2/mod/directives.html
Pensez que les directives doivent parfois se trouver dans apache2.conf
, parfois dans le contexte VirtualHost
d’un site donné.
ServerType
ServerType standalone
Cette ligne indique si le serveur Apache se lance en ‘autonome’ (standalone) ou via inetd
(TCP_WRAPPER). Pour la plupart des configuration, c’est en standalone. Cette directive a disparu de Apache2, qui dispose d’un autre moyen pour définir cela. Le comportement est en fait choisi d’après le MTM (Multi-processing module) choisi.
ServerRoot
ServerRoot /etc/apache2
(config serveur uniquement, pas dans un VirtualHost)
Vous indiquez ici le répertoire d’installation d’Apache. Normalement les scripts d’installation ont bien renseigné cette ligne. Vérifiez quand même.
LockFile
LockFile /var/run/httpd.lock
(config serveur uniquement, pas dans un VirtualHost)
Laissez cette ligne comme elle est, c’est à dire en commenté pour 90% des cas (# devant).
PidFile
PidFile /var/run/httpd.pid
(config serveur uniquement, pas dans un VirtualHost)
Vérifiez bien que cette ligne est décommentée. Elle indique au script de démarrage d’enregistrer le numéro de processus d’Apache pour que lors de l’arrêt du système le processus Apache soit stoppé correctement.
ScoreBoardFile
ScoreBoardFile /var/run/httpd.scoreboard
(config serveur uniquement, pas dans un VirtualHost)
Ce fichier stocke des informations pour le bon fonctionnement d’Apache.
Timeout
Timeout 300
(config serveur uniquement, pas dans un VirtualHost)
Temps en secondes avant que le serveur n’envoie ou ne reçoive un timeout . Quand le serveur attend une “réponse” (ex : script CGI, connexion\ldots), si au bout de ce temps, il ne reçoit pas de réponse, il va s’interrompre et prévenir l’utilisateur de l’erreur. Laissez cette valeur par défaut à moins que vous n’effectuiez des traitements dépassant cette limite. Ne pas monter trop haut cette valeur non plus car si le programme externe à “planté”, ou si une erreur est survenue, vous risquez de rendre inaccessible le serveur Apache pour trop de temps (il est toujours désagréable d’attendre pour rien).
KeepAlive
KeepAlive on
Autorise ou non les connexions persistantes (plusieurs requêtes par connexions). En fait cela permet aux utilisateurs de votre serveur de lancer plusieurs requêtes à la fois, et donc d’accélérer les réponses du serveur. Laissez cette valeur par défaut la plupart du temps. Pour de petits serveurs laissez cette option sur on . Pour un serveur très sollicité, dès que vous vous apercevez que le système ralentit énormément ou devient indisponible assez souvent, essayez avec la valeur off . Mais avant, essayez de baisser la valeur de l’option suivante.
MaxKeepAliveRequests
MaxKeepAliveRequests 100
En combinaison avec l’option précédente, indique le nombre de requêtes pour une connexion. Laissez cette valeur assez haute pour de très bonnes performances. Si vous mettez 0 comme valeur, vous en autorisez en fait un nombre illimité (attention donc). Laissez la valeur par défaut là aussi.
KeepAliveTimeout
KeepAliveTimeout 15
Valeur d’attente en secondes avant la requête suivante d’un même client, sur une même connexion, avant de renvoyer un timeout. Là aussi laisser la valeur par défaut.
MinSpareServers & MaxSpareServer
MinSpareServers 5 MaxSpareServer 10
(config serveur uniquement, pas dans un VirtualHost)
Ces valeurs servent à l’auto-régulation de charge du serveur. En fait le serveur Apache contrôle lui même sa charge, suivant le nombre de clients qu’il sert et le nombre de requêtes que demandent chaque client. Il fait en sorte que tout le monde puisse être servi et ajoute tout seul un certain nombre d’instances Apaches “idle”, c’est-à-dire qui ne font rien, mais sont prêtes à servir de nouveaux clients qui se connecteraient. Si ce nombre est inférieur à MinSpareServers
il en ajoute une (ou plusieurs). Si ce nombre dépasse la valeur de MaxSpareServer
il en arrête une (ou plusieurs). Ces valeurs par défaut conviennent à la plupart des sites.
Listen
Listen 3000 Listen 12.34.56.78 Listen 12.34.56.78:3000
Indique au serveur des ports ou des adresses IP (il y en a une par interface réseau du serveur!), ou les deux, où il doit “écouter” les demandes de connexions, EN PLUS de l’adresse et port par défaut. Voir la directive VirtualHost
plus loin.
BindAdress
BindAdress *
Redondant avec Listen
, cela permet de spécifier des adresses IP d’interfaces réseau, pour écouter les requêtes. Cette directive a disparu dans Apache 2.
Port
Port 80
Redondant avec Listen
, cela permet de spécifier le port d’écoute (80 par défaut). Cette directive a disparu dans Apache 2.
LoadModule, ClearModuleList & AddModule
LoadModule xxxxxx.mod libexec/yyyyyy.so ClearModuleList AddModule zzzz.c
(config serveur uniquement, pas dans un VirtualHost)
Support pour les modules DSO (Dynamic Shared Object). LoadModule
permet de charger un module. Avant Apache 2, les directives ClearModuleList
et AddModule
permettaient de spécifier l’ordre d’exécution des modules, à cause de problèmes de dépendances. Apache 2 peut maintenant faire cela automatiquement, car les APIs de modules leur permet de spécifier eux-mêmes leur ordre. Sous Apache 1.*, il faut cependant y prêter une grande attention, et le maintenir à jour à l’ajout de tout nouveau module.
ExtendedStatus
ExtendedStatus on
(config serveur uniquement, pas dans un VirtualHost)
Indique si le serveur doit renvoyer des informations complètes de status (on ) ou des informations réduites (off ). off par défaut. Laissez cette valeur par défaut sauf en cas de développement et de debuggage.
User & Group
User nobody Group nobody
Une fois le serveur démarré, il serait dangereux de lui laisser les droits root
pour répondre aux requêtes. Il est donc possible de modifier l’utiliseur et le groupe du processus pour lui donner un minimum de droits sur la machine du serveur. (En fait si quelqu’un arrive à “exploiter” votre serveur, par exemple s’il arrive a faire exécuter du code par le serveur Apache, il hérite des droits du serveur lui même. Donc si c’est nobody
il n’a aucun droit spécifique. Si c’est root
ou un utilisateur réel, il aura alors des droits lui permettant d’endommager votre système.)
ServerAdmin
ServerAdmin root@localhost.domainname
Adresse e-mail de l’administrateur du site. Cette adresse est affichée par le serveur par exemple en cas d’erreur, pour que les utilisateurs puissent en avertir l’administrateur.
ServerName
ServerName www.domainname
Adresse que le serveur va renvoyer au client web. Il est préférable de mettre une adresse résolue par DNS au lieu du nom de la machine réelle, pour que les visiteurs ne voient pas le nom réel de votre machine (utile pour la sécurité aussi).
DocumentRoot
DocumentRoot /var/lib/apache/htdocs
Répertoire racine ou se trouve vos pages Web.
Directory
<Directory /var/lib/apache/htdocs> Options Indexes FollowSymlinks Multiviews AllowOverride None Order allow,deny Allow from all </Directory>
Change les paramètres du repertoire /var/lib/apache/htdocs
. On peut placer à l’intérieur les directives suivantes :
Options
on définit les options pour ce répertoire. Les options possibles sont les suivantes :
None | Désactive toutes les options. |
All | Active toutes les options SAUF Multiviews. |
Indexes | Permet aux utilisateurs d’avoir des indexs généré par le serveur.C’est à dire si l’index du répertoire (index.html le + souvent) est manquant, cela autorise le serveur a lister le contenu du répertoire (dangereux suivant les fichiers contenu dans ce répertoire). |
FollowSymLinks | Autorise a suivre les liens symboliques. |
ExecCGI | Autorise à exécuter des scripts CGI à partir de ce répertoire. |
Includes | Autorise des fichiers include pour le serveur. |
IncludesNOEXEC | Permet mais les includes mais empêche la commande EXEC (qui permet d’executer du code). |
MultiViews | Autorise les vue multiples suivant un contexte.Par exemple permet d’afficher les pages dans un language suivant la configuration du language du client. |
SymLinksIfOwnerMatch | Autorise a suivre les liens seulement si l’user ID du fichier (ou répertoire) sur lequel le lien pointe est le même que celui du lien. |
AllowOverride
définit comment sont gérés les fichiers .htaccess de ce répertoire :
All | Gère tout ce qui est dans .htaccess |
AuthConfig | Active les directives d’autorisations AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, etc. |
FileInfo | Active les directives contrôlant le type de document (ErrorDocument, LanguagePriority, etc.) |
Limit | Active la directive d’autorisation Limit |
None | Ne lit pas le fichier .htaccess et laisse les droits “Linux” de ce répertoire. |
Options | Active la directive Option |
Order
Donne l’ordre d’application des règles Allow/Deny :
deny,allow | Si le client ne correspond à aucune règle deny , mais correspond à une règle allow , alors on autorise (allow par défaut). |
allow,deny | Si le client ne correspond à aucune règle allow , mais correspond à une règle deny , on interdit (deny par defaut).\hline |
Allow/Deny
Nom d’hôte | Autorise/Refuse les hôtes spécifié, les adresses IP, le nom de domaine, etc… |
All | Autorise/Refuse tout le monde |
A vous de placer vos règles suivant le contenu de vos répertoire accessibles par le Web. Il existe les mêmes règles pour les fichiers (<Files> </Files>) et les locations (<Location> </Location>). Voir un exemple pour les fichiers (file) plus bas.
DirectoryIndex
DirectoryIndex index.html index.htm index.php index.php5
Indique le ou les fichiers à charger lorsqu’on accède à un répertoire sans préciser de fichier. Dans cet exemple, si on accède à http://example.com/repertoire/, Apache cherchera un des fichiers mentionnés (index.html, index.htm…) et s’il en trouve un il l’affichera. S’il n’en trouve pas, il affichera la liste des fichiers ou interdira l’accès (suivant la présence ou non de l’option Indexes sur le répertoire).
AccessFileName
AccessFileName .htaccess
Nom du fichier des règles d’accès pour les règles AllowOverride. Un conseil: placez comme vu précédemment une règle file du style:
<Files .ht*> #pour interdire aux visiteurs de voir le contenu des Order allow,deny #fichiers .ht qui contiennent les règles de Deny from all #sécurité. </Files>
CacheNegotiatedDocs
#CacheNegotiatedDocs
Autorise ou pas les proxies à mettre en cache les documents (pour autoriser, enlevez le commentaire # en début de ligne)
UseCanonicalName
UseCanonicalName On
Placé sur on , réécrit l’URL par rapport aux valeurs Server
et Port
spécifiées plus haut dans le fichier httpd.conf.
Sur off , l’URL reste celle donnée par le client.
Attention, mettez sur on si vous utilisez des CGI avec des variables SERVER_NAME, car si l’URL du client n’est pas la même que celle du CGI, votre script CGI ne marchera pas.
DefaultType
DefaultType text/plain
Type mime par défaut que le serveur renvoie au clients. Convient dans la plupart des cas.
HostNameLookups
HostNameLookups off
Sur on , le serveur le nom du client grâce à une requête DNS inverse. Sinon, il se contente de l’adresse IP, ce qui génère beaucoup moins de trafic réseau.
ErrorLog
ErrorLog /var/log/error_log
Chemin complet du fichier où les erreurs seront enregistrées.
LogLevel
LogLevel warn
Niveau d’enregistrement des erreurs avec comme valeurs possibles, par ordre décroissant d’importance, donc croissant en bavardage:
emerg | urgence : le serveur devient inutilisable |
alert | une intervention est nécessaire |
crit | erreurs critiques (accès réseau impossible par exemple) |
error | les erreurs dans les pages, scripts |
warn | les erreurs non bloquantes (pages mal codées, scripts comportant des erreurs non blocantes… |
notice | événement normal mais méritant d’être remarqué |
info | informations utiles (comme “serveur très chargé”) |
debug | Enregistre TOUT ce qui peut se passer sur le serveur |
Le niveau crit
est le minimum recommandé, et on monte généralement à warn
.
ServerSignature
ServerSignature on
on | ajoute la signature (version, OS…) du serveur lorsqu’il génère des pages lui-même (index manquant, erreur de script, etc.) |
off | ne montre que l’erreur. |
email | ajoute un lien vers l’email définit par ServerAdmin |
Alias
Alias faux_nom nom_réel
permet de faire des alias de répertoires (des liens en quelque sorte) (similaire à ScriptAlias /cgi-bin chemin_complet_des_cgi
AddType
AddType type extensions
(sous Apache2, cette directive devrait être dans un fichier mods-availabe/nom_module.conf, au lieu de
apache2.conf
)
Spécifie que des fichiers utilisant de telles extensions sont du type précisé. Cela permet de décider quoi en faire. Pour ajouter le support PHP, le fichier mods-enabled/php5.conf
contient par exemple :
AddType application/x-httpd-php .php .phtml .php3 AddType application/x-httpd-php-source .phps
AddHandler
AddHandler cgi-script .cgi
Pour utiliser les scripts CGI.
http://wiki.uniformserver.com/index.php/CGI:_VBScript_CGI