Ceci est une ancienne révision du document !


Installation et configuration d'Apache

Retour à la liste des tutoriels

Apache est le logiciel qui va envoyer les pages de votre site web à vos visiteurs.
Prérequis
  • Aucun prérequis pour ce tutoriel.


Installation d'Apache

apt-get install apache2

Une fois Apache correctement installé, une page web par défaut (It work's) s'affiche dans le navigateur lorsque l'on tape l'url @HTTPIP@ .


Choix des modules (extensions)

Les modules

Par défaut, Apache charge plusieurs dizaines de modules. Tous ne sont pas utiles en fonction du site web que vous souhaitez héberger.
Dans mon cas, à terme je souhaite héberger l'ensemble de mes sites, utilisant du HTML, CSS, PHP, MySQL.

Pour connaître tous les modules Apache chargés :

apache2ctl -t -D  DUMP_MODULES

Voila les modules chargés par défaut sur mon installation :
La valeur entre parenthèses signifie :

  • static : le module est intégré à Apache (et ne peut donc pas être désactivé, sauf par compilation d'Apache à partir du code source)
  • shared : le module est rajouté à Apache, et peut donc être désactivé (voir plus loin la méthode)
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 reqtimeout_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

Détails des rôles des modules

Voici le rôle détaillé de chaque module chargé :

  • core_module (static)

Module de base (cœur), toujours disponible (cœur d'Apache).
Doc. Apache

  • log_config_module (static)

Permet l'enregistrement (log) des actions effectuées sur le serveur. (error.log, access.log)
Doc. Apache

  • logio_module (static)

Requiert le module log_config.

Permet de quantifier les données reçues / transmises pour chaque requête du serveur (1 page du site est plusieurs requêtes : le html; le css, une image…).
Cette valeur prend en compte les entêtes échangées (communication uniquement entre le serveur et votre navigateur, ces informations ne sont pas affichées).
A noter que par défaut les logs (access.log) contiennent déjà la taille des données envoyées par le serveur au navigateur. (suffisant pour utiliser un script tel Webalizer)
Doc. Apache

  • mpm_prefork_module (static)

Composant de base qui s'occupe d'écouter et répondre aux requêtes pour le serveur web.
Forums ApacheFrance - Module prefork ou worker
Doc. wikitwist
Doc. Apache

  • http_module (static)

Permet la gestion du protocole http, donc le bon fonctionnement du serveur !
Doc. Apache

  • so_module (static)

Autorise le chargement de modules au lancement d'apache (les fameux shared). Ces modules sont des fichiers de type .so
Doc. Apache

  • alias_module (shared)
  1. Création de répertoires virtuels : le répertoire /stats n'existe pas sur le site. En saisissant cette url, nous serrons redirigé vers /var/www/stats/
  2. Redirection vers une autre page du site, voir un autre site


Doc. Apache

  • auth_basic_module (shared)

Permet de définir des utilisateurs spécifiques autorisés à accéder à un répertoire, un fichier, … (le plus souvent par le biais des fichiers .htaccess)
A lui seul ce module ne gère pas les listes d'utilisateurs autorisés !
Doc. Apache

  • authn_file_module (shared)

Permet l'utilisation de fichiers (.htpasswd) pour authentifier les utilisateurs (cf auth_basic_module).
Doc. Apache

  • authz_default_module (shared)

Module de secours pour les autorisations d'accès : rejette systématiquement toutes les demandes.
Utile en cas de non configuration d'un module de gestion des autorisations d'accès (sécurité) !
Doc. Apache

  • authz_groupfile_module (shared)

Permet la gestion de groupes d'utilisateurs et de droits associés.
Doc. Apache

  • authz_host_module (shared)

Permet la gestion de droits associés à une adresse IP ou un nom de domaine.
Doc. Apache

  • authz_user_module (shared)

Permet la gestion de droits associés à un utilisateur.
Doc. Apache

  • autoindex_module (shared)

Gère le listing des fichiers / répertoires présents en cas d'absence de fichier index.*
Doc. Apache

  • cgi_module (shared)

Autorise l'exécution de scripts CGI, et retourne le résultat.
Doc. Apache

  • deflate_module (shared)

Permet la compression gzip sur le contenu avant de l'envoyer au client. Gain de bande passante / perte de processeur.
S'active au cas par cas en fonction du type mime des fichiers.
Doc. Apache

  • dir_module (shared)

Ajoute automatiquement un “/” à la fin de l'url demandée par le visiteur s'il s'agit d'un répertoire. (sécurité)
Doc. Apache

  • env_module (shared)

Modifie la configuration fournie aux scripts CGI (cf mod_cgi) et aux pages SSI (en vulgarisant des fichiers de templates spécifiques)
Doc. Apache

  • mime_module (shared)

Gestion des types mime et des informations délivrées au navigateur du visiteur des fichiers en fonction de leur extension.
Doc. Apache

  • negotiation_module (shared)

Permet de délivrer le contenu le plus opportun à un utilisateur; par exemple dans le cas d'un site comprenant plusieurs langues.
Doc. Apache

  • reqtimeout_module (shared)

Définit la durée au bout de laquelle une connexion est considérée comme perdue.
Doc. Apache

  • setenvif_module (shared)

Permet de définir des variables d'environnement liées à l'User-Agent du visiteur.
Doc. Apache

  • status_module (shared)

Donne des informations sur l'état du serveur Apache.
Doc. Apache

Désactivation des modules non requis

Moins de modules seront chargés, moins de failles potentielles seront ouvertes sur notre serveur Apache, plus la sécurité sera renforcée !

Attention toutefois à ne pas désactiver un maximum de modules, ce qui pourrait compromettre la bonne exécution de vos sites !

Il convient de ne conserver que les modules qui seront utiles pour les sites internet !
J'ai choisi de désactiver cgi_module, env_module et setenvif_module qui ne me servaient pas.
Pour ce faire, une commande simple existe :

a2dismod cgi
a2dismod env
a2dismod setenvif

Si vous ne réussissez pas à trouver le nom du module pour le désactiver, regardez son nom dans le répertoire /etc/apache2/mods-enabled.

La commande pour réactiver un module est :
a2enmod module

Il faut relancer apache pour activer notre nouvelle configuration :

service apache2 restart

Configuration d'Apache

Nous allons maintenant modifier la configuration d'Apache afin de le rendre moins verbeux, et plus adapté à notre site.
Pour ce faire, il faut éditer le fichier /etc/apache2/apache2.conf
Pensez à faire une sauvegarde du fichier avant de le modifier !

Timeout

Le timeout est le temps maximal qu'attends Apache lorsque le dialogue avec le navigateur du visiteur est interrompu, ou lorsqu'il reçoit une requête.
Par défaut, le timeout est configuré à 300 secondes, ce qui est très élevé ! Nous allons le réduire à 15 secondes.

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 15

Sur un très gros serveur cette valeur peut-être encore réduite à 10, voir 5 secondes. De plus, cela permet d'éviter certaines formes d'attaques.
Doc. Apache

KeepAlive

Le KeepAlive permet de ne pas fermer la connexion entre le serveur Apache et le navigateur du client, afin de gagner du temps si le visiteur envoi une seconde requête (page web, image, css, …).
On parle alors de connexion persistante.

MaxKeepAliveRequests

Il s'agit du nombre maximal de requêtes que peut effectuer un client durant sa connexion persistante.

Par défaut le nombre maximal est de 100. Ayant une machine aux capacités très réduites (128Mo de RAM, 256Mhz), je le réduit à 5.

Si vous avez beaucoup de visiteurs, n'hésitez pas à augmenter cette valeur (en faisant attention à la mémoire utilisée par processus apache lancé !) Doc. Apache

KeepAliveTimeout

Le KeepAliveTimeout définit le temps qu'attend Apache avant de fermer la connexion persistante.

Par défaut le délai est de 15 secondes, je le diminue à 10.

Si vous avez beaucoup de visiteurs, n'hésitez pas à réduire cette valeur jusqu'à 5, voire 1 : cela évitera de monopoliser des ressources pour rien ! Doc. Apache

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 5
 
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 10

prefork MPM

J'ai définit le module prefork précédemment : “Composant de base qui s'occupe d'écouter et répondre aux requêtes.”.

Il s'agit du composant qui s'occupe d'écouter et de délivrer le contenu aux visiteurs. Il est primordial de bien le configurer !

Concrètement, Apache lance des processus (appelés fils). Chacun des processus fils écoutera et délivrera du contenu à un seul client simultanément.

StartServers

Il s'agit du nombre de processus fils qui sont créés au lancement du serveur Apache.
Par défaut, la valeur est de 5.
Doc. Apache

MinSpareServers

Il s'agit du nombre minimal de processus fils disponibles pour de nouvelles requêtes.
Si le nombre de processus disponibles est inférieur à cette valeur, Apache créera de nouveaux processus fils, au plus 1 par seconde.
Par défaut la valeur est de 5.
Pour être cohérente, cette valeur doit-être égale à celle de StartServers .
Doc. Apache

MaxSpareServers

Il s'agit du nombre maximal de processus fils disponibles pour de nouvelles requêtes.
La valeur par défaut est de 10.
Cette valeur n'a pas à être modifiée, sauf pour les très gros sites (configurer à 50, voire 100)
Apache assure automatiquement une cohérence entre cette MinSpareServers et MaxSpareServers.
Doc. Apache

MaxClients

Nombre maximum de requêtes à traiter simultanément. Les requêtes supplémentaires sont mise en attente jusqu'à ce qu'un processus se libère.
Par défaut cette valeur est de 150.
Cette valeur dépend du succès de vos sites, on peut monter cette valeur à 250 voire 300 (attention à la consommation de mémoire !)
Si on souhaite augmenter cette valeur à plus de 256, il faudra définir également ServerLimit.
Doc. Apache

MaxRequestsPerChild

Nombre maximal de requêtes traitées par un processus avant qu'il ne s'arrête.
Le principal intérêt de ce paramètre est en cas de fuite de mémoire sur les modules : on évite d'utiliser tout la mémoire du serveur en recyclant régulièrement le processus.
La valeur par défaut est 0 (aucune limite de requêtes), je vais la configurer à 60 afin de ne pas tuer mes processus trop fréquemment.
Doc. Apache

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers       10
    MaxClients           150
    MaxRequestsPerChild  60
</IfModule>

HostnameLookups

Cette option permet de faire une résolution DNS des adresses IP de nos visiteurs.
C'est à dire qu'au lieu de voire apparaitre @IP@ dans mon access.log je verrais @URL@ .
Attention ce paramétrage est lourd pour le serveurs (une requête nslookup par requête Apache !)
Laissons le à Off (valeur par défaut). Si besoin, nous pourrons toujours utiliser l'outil logresolve ultérieurement (par tâche cron dans la nuit par exemple :))
Doc. Apache

Relancer Apache

Voila, notre serveur web est un minima adapté à nos besoins en performance et en sécurité.

Afin que notre nouvelle configuration soit prise en considération, on relance Apache en douceur :

service apache2 reload


Le reload permet de faire relire le fichier de configuration à Apache une fois que chaque processus fils à fini son travail.
Le restart stoppe immédiatement le processus fils pour relancer le serveur (interruption du service pour le client)


Liens