Apache serveur Web
 

Apache est le serveur le plus utilisé.

Installation :

Sous Debian sur un système vièrge. "apt-get install apache2" :

Tapez "O" (pour oui)

Le Serveur est Installé.

Les fichiers de configuration :

Ils sont situés dans /etc/apache2/

De bases :

  • apache2.conf : Fichier de configuration sur serveur Web proprement dit.

  • envvars : Fichier servant la définition des variables d'environnement du serveur. Sauf en de très rares occasions, vous n'aurez pas besoin de le modifier.

  • httpd.conf : La présence de ce fichier ne sert qu'à maintenir une compatibilité avec d'anciennes applications. Dans la version 2 de apache il n'est plus utilisé.

  • ports.conf : Il sert au paramètrage des ports du serveur. par defaut le serveur écoute sur le port 80, mais on peut très bien le faire écouter sur un autre port en fonction des besoins.

  • sites-available/ : Ce répertoire contient les fichiers de configuration des sites disponibles (mais pas necessairement activés).

  • sites-enabled/ : Ce repertoire contient des liens vers les sites disponibles que l'on désire activer.

  • mods-available/ : Fonctionne sur le même principe que pour sites-available, mais concerne les modules apache qui sont disponibles.

  • mods-enabled/ : Contient de sliens vers les modules qui sont activés.

Le fichier apache2.conf :

Voici quelques éléments du fichier apache2.conf qui peuvent s'avérés utile à modifier pour configurer votre serveur comme vous le souhaité :

  • ServerRoot : Par défaut : ServerRoot "/etc/apache2" . Définit l'emplacement par défaut des fichiers de configuration de apache

  • User www-data et Group www-data : C'est le nom d'utilisateur et le group qui lancera le démon Apache. Par défaut sous Debian il s'agit de www-data.

  • AddDefaultCharset : Par défaut ce paramètre est commenté. Il faut le décommenté surtout s'il l'on veut un site en français. Je vous conseille donc de passer ces paramètres :

AddDefaultCharset ISO-8859-15
et dans le paragraphe ajouter :
AddCharset ISO-8859-15 .iso8859-15 .latin15 .fr

Paramètrage des pages d'erreurs :

Cherchez dans le fichier la la partie avec ce texte :

<IfModule mod_negotiation.c>
<IfModule mod_include.c>
Alias /error/ "/usr/share/apache2/error/"
<Directory "/usr/share/apache2/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
ForceLanguagePriority Prefer Fallback
</Directory>

Afin d'avoir en priorité les erreurs en français il vous faut modifier la ligne "LanguagePriority" afin d'avoir ceci :

LanguagePriority fr en ca cs da de el eo es et he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

Pour avoir des pages d'erreurs personnalisées il faut utilisé la directive ErrorDocument. Cette directive se paramètres avec deux arguments : "le code erreur" et "Document".

Le code erreur est un élément standardisé à tous les serveur web, de façon à ce que les navigateurs puissent les interprétés. L'exemple le plus connu est le code erreur 404 correspondant à une page introuvable.

Voici la liste des codes erreurs :

400 : erreur de syntaxe dans l'adresse du document
401 : pas d'autorisation d'accès au document
402 : accès au document soumis au paiement
403 : pas d'autorisation d'accès au serveur
404 : la page demandée n'existe pas
405 : méthode de requête du formulaire non autorisée
406 : requête non acceptée par le serveur
407 : autorisation du proxy nécessaire
408 : temps d'accès à la page demandée expiré
409 : l'utilisateur doit soumettre à nouveau avec plus d'infos
410 : cette ressource n'est plus disponible
411 : le server a refusé la requête car elle n'a pas de longueur
412 : la précondition donnée dans la requête a échoué
413 : l'entité de la requête était trop grande
414 : l'URI de la requête était trop longue
415 : type de média non géré
500 : erreur interne du serveur
501 : requête faite au serveur non supprimée
502 : mauvaise passerelle d'accès
503 : service non disponible
504 : temps d'accès à la passerelle expiré
505 : version HTTP non gérée

L'autre argument, "Document" peut prendre plusiseurs valeurs en fonction du résultat que l'on veut obtenir :

  • Default : Apache affichera le message d'erreur par défaut
  • "blabla : Apache affichera le texte situé après la double cote et ce jusqu'à la fin de la ligne.
  • /chemin/fichier : Un chemin local vers un fichier permet à apache d'afficher une page web que l'on a créé soit même.
  • http://www.url.fr : Une URL complète permet la redirection vers un site de son choix.

Création d'un site web :

Comme nous l'avons tout à l'heure dans l'énumération des fichiers et dossiers présents dans /etc/apache2/ le sites sont configurés dans sites-available. Apache permet de gérer plusieurs sites internet en fonction du domaine sur lequel l'utilisateur accède au serveur. Ainsi pour une seul adresse IP de votre serveur vous pouvez héberger plusieurs sites internet diffèrents. Par exemple www.nosland.com et www.tt-nogent.fr pointent tous les deux vers la même IP mais en fonction du nom DNS que l'internaute a saisie dans son navigateur, ce ne sont pas les même pages qui sont affichés.

Par soucis de lecture je vous conseille de créé un fichier par sites dans le repertoire sites-available. Dans cette documentation je vais créer un site, monsite.com

Création de monsite.com : lancer vi /etc/apache2/sites-available/monsite.com

Puis ajouter ces lignes :

Code à inserer

Explications
NameVirtualHost *:80 De façon a ce que le site écoute bien sur toutes les adresses IP du serveur sur le port 80
<VirtualHost www.monsite.com:80> Ouverture du bloc "virtualhost". On indique le nom DNS pour lequel est paramètrer ce site.
ServerAdmin webmaster@monsite.com L'adresse e-mail de l'administrateur du site. Il s'agit d'une variable réutilisée notament dans certaines pages d'erreur
DocumentRoot /www/docs/monsite.com/ Emplacement du site proprement dit.Ce sera dans ce répertoire que seront stokées toutes les pages html
ServerName www.monsite.com Le nom du serveur Web pour ce site.
ErrorLog logs/www.monsite.com-error_log Emplacement du ficher de log pour les erreurs
CustomLog logs/www.monsite.com-access_log vcommon Emplacement du fichier de log pour les access. Le paramètre vcommon permet à la fois d'avoir des logs standars réutilisables par exemple dans des outils telque Webtrends ou AWstats et également que l'adresse IP du visisteur soit loguée, et que ce ne soit pas celle d'un éventuel proxy-cache en frontal à votre serveur Web.
</VirtualHost> Fermeture du bloc VirtualHost

Une fois que vous avez créé votre sites, il vous faut l'activer. En fait il faut créé un lien dans sites-enabled.

Il y a une commande qui fait ça très bien : a2ensite (la commande inverse a2dissite existe également), qui permet d'activer le site (en fait c'est un lien symbolique qui se créé).

a2ensite /etc/apache2/sites-available/monsite.com

Puis /etc/init.d/apache2 force-reload

Configuration avancée :

Pour chaques sites vous pouvez affiner la configuration de votre apache. Dans le cas de site à forte affluence, vous pouvez jouer sur des paramètres afin d'optimiser les temps de réponses. Voici quelques pistes :
  • StartServers 5 : Le paramètre StartServers définit le nombre de processus fils créés dès le démarrage du serveur. Le nombre de ces processus étant contrôlé dynamiquement en fonction de la charge, il y a en général peu d'intérêt à modifier la valeur par défaut de ce paramètre sauf dans le cas où le serveur doit à un moment T répondre à énormément de nouveau client. Ceci permet que les clients n'aient pas longtemps à attendre car le processus est deja actif à leur arrivée sur le serveur. (Source Apache.org)

  • ThreadsPerChild 50 :Ce paramètre indique au serveur combien de threads (tâches) il doit lancer. Cela est équivalent au nombre maximum de connexions que le serveur peut traiter simultanément ; soyez sûr de vous et réglez le nombre suffisament haut si votre site est très fréquenté. (Source Apache.org)

  • MinSpareServers & MaxSpareServers : MaxSpareServers et MinSpareServers déterminent combien de processus enfants doivent rester actifs tout en attendant des requêtes. Si MinSpareServers est réglé trop bas et qu'un grand nombre de demandes survient, Apache devra engendrer des processus enfants supplémentaires pour satisfaire les requêtes. Créer des processus enfants est relativement exigeant en mémoire. Si le serveur est occupé à créer des processus enfants, il ne sera pas en mesure de prendre en charge les requêtes des clients immédiatement. MaxSpareServers ne devrait pas être réglé trop haut : trop de processus enfants consommeront des ressources inutilement. Affinez MinSpareServers et MaxSpareServers de façon à ce qu'Apache n'ait pas à engendrer plus de 4 processus enfants par seconde (Apache peut engendrer un maximum de 32 processus enfants par seconde). Si plus de 4 processus enfants par seconde sont engendrés, un message est journalisé dans ErrorLog. (Source Apache.org)

  • ServerLimit 500 : C'est le nombre maximum de connexion qu'acceptera le serveur.

  • MaxClients 500 : La directive MaxClients fixe la limite maximale de requêtes simultanées que le serveur peut prendre en charge ; aucun processus enfant au-delà de ce nombre n'est engendré. Il ne devrait pas être défini à une valeur trop basse, sinon un nombre toujours croissant de connexions sont reportées dans la file d'attente et occasionnent finalement un dépassement du temps imparti, alors que les ressources du serveur restent inutilisées. Si vous lui donnez une valeur trop élevée, en revanche, le serveur commencera à « swapper », ce qui fera diminuer considérablement le temps de réponse. La valeur appropriée pour MaxClients peut être calculée ainsi : MaxClients = Mémoire vive totale dédiée au serveur web / Taille maximale des processus enfants. (Source Apache.org)

  • MaxRequestsPerChild 20 : La directive MaxRequestsPerChild fixe la limite du nombre de requêtes que gérera un seul processus enfant du serveur. Après les requêtes MaxRequestsPerChild, le processus enfant mourra mais comme il est fixé à 0 par défaut, le processus enfant n'expirera jamais. Il est approprié de donner à cette directive une valeur de quelques milliers. Cela peut aider à empêcher des pertes de mémoire, puisque le processus meurt après avoir satisfait un certain nombre de requêtes. Ne fixez pas une valeur trop basse, car la création de nouveaux processus est exigeante en temps système. (Source Apache.org)

  • KeepAlive et KeepAliveTimeout : La directive KeepAlive autorise l'envoi de requêtes multiples sur la même connexion TCP. C'est particulièrement utile pour la prise en charge de pages HTML comportant de nombreuses images. Si KeepAlive est positionnée sur Off, alors une connexion TCP séparée doit être créée pour chacune des images. La surcharge causée par l'établissement des connexions TCP peut être éliminée en positionnant KeepAlive sur On. KeepAliveTimeout détermine la durée d'attente de la prochaine requête. Donnez-lui une valeur basse, peut-être entre deux et cinq secondes. Si la valeur fixée est trop élevèe, les processus enfants sont immobilisés, attendant le client alors qu'ils peuvent être utilisés pour satisfaire de nouveaux clients. (Source Apache.org)

Activation / Désactivation d'un site :

Dans le fichier /etc/apache2/apache2.conf vous avez normalement en bas du fichier :
# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/[^.#]*
Ceci veut dire que tous les fichiers de conf de sites présents dans /etc/apache2/sites-enabled/ seront pris en compte.
Normalement dans ce répertoire il n'y a aucun fichier physique. Les fichiers physiques doivent être placé dans /etc/apache2/sites-available
par exemple, dans /etc/apache2/sites-available vous avez deux fichiers : site1.conf et site2.conf.
a2ensite site1.conf => Active site1.conf
a2dissite site1.conf => Désactive site1.conf
Les commandes pour être valider doivent être suivies de /etc/init.d/apache2 restart/reload/force-reload

RewriteRules :

Le module rewriterule s'active via la commane : a2enmod rewrite.load

Ce module sert à la réécriture d'adresse, mais peut également servir à ouvrir une page spécifique en fonction de la présence ou l'absence d'un fichier, ou encore en fonction du navigateur qu'utilise l'internaute etc...

Voir le module sur le module Rewrite : rewrite.php

Retour à l'Index Linux