Chapitre 34 : Le serveur Apache


Dernière mise à jour  1 er juin 1998  Auteur Gilles Maire
Serveur  http://www.imaginet.fr/ime/apache.htm Adresse Gilles.Maire@UNGI.com


 

34.1 - Remarques introductives

Lorsqu'on lit la presse spécialisée, on y trouve, à grands renforts d'avis de spécialistes, des analyses et comparatifs entre les serveurs HTTP des principales sociétés commerciales qui exercent dans le domaine. Rares sont les articles qui mentionnent Apache alors qu'il est le serveur HTTP le plus utilisé.
Dire que la part de marché d'Apache est de l'ordre de 50 % serait un contre-sens dans la mesure où Apache est gratuit et ne vise donc pas à conquérir de quelconques parts de marché. Mais les chiffres sont là  : avant  même la sortie d'Apache sous Windows, il est utilisé sur 50 % des serveurs http fonctionnant sur Internet.
Le lecteur critique s'interrogera sur les choix de l'éducation nationale en France qui portent sur une solution commerciale dont personne ne sait si elle répondra aux besoins exprimés. Mais que le contribuable ne désespèrent  pas, il existe des ministères où les décideurs sont entourés de conseillers plus informés qui lisent  peut-être même UNGI :)

La principale différence entre Apache et les serveurs commerciaux réside en quelques différences notables :

Mis à part ces quelques limitations, Apache reste la solution la plus compatible entre les mondes Windows et UNIX et cela constitue un intérêt non négligeable.

34.2 - Installation et configuration d'Apache

Installation

Aussi bien sous Windows que sous Unix, installer Apache ne pose pas de réelle difficulté. Sous Windows la version binaire est livrée avec un installeur identique pour la version NT et la version 95.  Les sources sont également disponibles.

Sous UNIX on préfère compiler les sources  mais cela ne pose pas non plus de problème particuliers.

Nous allons donc explorer en détail la partie configuration du serveur. Cette configuration se fait à l'aide de quelques fichiers. Mais avant de les examiner, donnons l'arborescence du serveur.
 

Configuration

Bien que deux logiciels dont nous reparlerons existent pour configurer le serveur Apache nous donnerons ici les méthodes de configuration du serveur par modification des fichiers textes  contenus dans le répertoire conf.

Dans les distributions de Linux comme la Red Hat, les fichiers de configuration sont placés par défaut dans le répertoire /etc/httpd/conf ou dans un autre répertoire.

On dénombre trois fichiers majeurs dans la configuration :

access.conf

Ce fichier est formé de lignes encadrées par des couples de balises <balise> </balises> qui ont été mentionnées en vert et en gras.
Les directives comprises entre ces balises sont mentionnées en vert.

Les balises précédées de caractères # ne sont pas activées puisque commentées.
 

#Nom du répertoire sur le quel porte les directives suivantes jusquà la balise </Directory>
<Directory "C:/Program Files/Apache Group/Apache/htdocs">

#Options None|All|Includes|FollowSymLinks|ExecCGI|MultiViews
# pour interdir l'accès, pour tout autoriser (sauf multiviews), pour autoriser l'exploitation des liens symboliques
# ou raccourcis, permettre l'éxécution des CGI
Options Indexes FollowSymLinks

#Si un fichier .htpaccess est présent dans un répertoire, c'est lui qui prendra le pas pour les autorisation d'accès aux fichiers de ce répertoire sauf si la directive est sur none
#Si la directive est positionnée à FileInfo les informations seront fonction des droits d'accès
#Si la directive est positionnée à AuthConfig elles seront fonction du fichier htaccess
#Si la directive est sur All, le fichier .htaccess aura tout le contrôle
AllowOverride None

# Contrôle la politique d'autorisation : tout autorisé sauf ce qui est interdit (allow,deny) ou le contraire (deny,allow)
order allow,deny
allow from all

#autorise les SSI
Options +Includes

</Directory>

#mêmes règles pour le répertoire CGI
<Directory /apache/cgi-bin>
AllowOverride None
Options None
</Directory>

#Autorise l'accès à la page server-status distribuant les informations sur le serveur

<Location /server-status>
SetHandler server-status

order deny,allow
deny from all
allow from domaine.extension
</Location>

#Autorisation d'execution de script phf
#<Location /cgi-bin/phf*>
#deny from all
#ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#</Location>

#Toute autre directive peut être ajoutée à la suite de cette ligne
 
 

srm.conf

DocumentRoot "C:/Program Files/Apache Group/Apache/htdocs"
#Répertoires des utilisateurs pour les fichiers HTML. Ne fonctionne pas sous WindowsNT
#UserDir "/C:/Program Files/Apache Group/Apache/users/"

# Nom du ou des fichiers à afficher par défaut lorsqu'aucun fichier n'est donné dans l'URL
DirectoryIndex index.html toc.htm

# Positionné  sur on des icônes  des fichiers accompagnent l'affichage des répertoires.
# Avec la valeur off, les répertoires sont affichés uniquement en HTML.
FancyIndexing on

#Permet de lier les types de fichiers à des icônes lorsque le mode FancyIndexing est sur on
#Autrement dit permet de redéfinir les icônes associées aux fichiers lors de l'affichage des répertoires

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif
AddIcon /icons/blank.gif

#Lorqu'aucune icône n'est associée à un fichier l'icône suivante est affichée
DefaultIcon /icons/unknown.gif

#Permet d'assigner un commentaire derrière les fichiers générés dans les affichages de répertoires
# Format: AddDescription "description" filename

#Nom du fichier d'accueil qui sera utilisé par le navigateur
#ReadmeName readme.txt

#Fichier affiché avant l'affichage de la page dans un répertoire
#HeaderName HEADER

#Fichiers ignorés lors de l'affichage d'un répertoire
IndexIgnore .??* *~ *# HEADER* README* RCS

#Nom du fichier contenant les informations d'accès à un répertoire
AccessFileName .htaccess

#Nom du type MIME qui est envoyé lorsque le serveur ne connaît pas le type MIME d'un document
DefaultType text/plain

#Certains navigateurs sont capables de décompresser des fichiers lors de leur réception, ces extensions permettent de les
#identifier
AddEncoding x-compress Z zip
AddEncoding x-gzip gz
 

#Donne les langues reconnues par le serveur
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

#Donne la priorité des langues
LanguagePriority fr en de

#Permet de rediriger l'URL url1 n'existant plus vers un nouveau serveur désigné par l'URL url2,
#Peut contenir plusieurs lignes
# Redirect url1 url2
 

#Permet de définir un chemin plus court pour une URL
# Alias ime ~gmaire/toc.htm
Alias /icons/ /apache/icons/

#Permet de définirle chemin d'accès des CGI
ScriptAlias /cgi-bin/ c:/gifiperl/ungitrombi/cgi-bin/
 

#Permet d'associer une extension de fichier avec un type MIME
AddType text/html .shtml
#Permet d'activer les SSI
AddHandler server-parsed .shtml
#Permet d'associer les fichiers d'extension cgi comme programme CGI
#AddHandler cgi-script .cgi
#Permet d'associer les fichiers d'extension map comme imagemap
#AddHandler imap-file map
#AddHandler type-map var

#Permet de spécifier le nom du répertoire dans lequel le serveur peut trouver les informations
#META à ajouter aux fichiers envoyés
#MetaDir .web
#Permet de spécifier les extensions des fichiers contenant les informations META à ajouter aux fichiers
# envoyés
#MetaSuffix .meta

#Association des fichiers erreurs
#Association des erreurs avec des textes appropriés
#ErrorDocument 500 "Le serveur a commis une erreur"
#Association des erreurs avec un fichier HTML
#ErrorDocument 404 /missing.html
#Association des erreurs avec un programme
#ErrorDocument 404 /cgi-bin/missing_handler.pl
#Association des erreurs avec une URL
#ErrorDocument 402 http://some.other_server.com/subscription_info.html

#Détermination des types de fichier
#MimeMagicFile conf/magic

#Permet de corriger des bogues de navigateurs qui ne savent pas conserver le maintient de la connexion
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

#Permet aux navigateurs qui ne supportent pas HTTP/1.1 d'utiliser le protocole HTTP/1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
 

http.conf

ServerType standalone
Les lignes suivantes sont commentées mais peuvent être activées par suppression du caractère #, elles concernent les activations des différents modules disponibles. L'extension dll signifie que le serveur fonctionne sous windows.

#LoadModule anon_auth_module modules/ApacheModuleAuthAnon.dll
#LoadModule cern_meta_module modules/ApacheModuleCERNMeta.dll
#LoadModule digest_module modules/ApacheModuleDigest.dll
#LoadModule expires_module modules/ApacheModuleExpires.dll
#LoadModule headers_module modules/ApacheModuleHeaders.dll
#LoadModule proxy_module modules/ApacheModuleProxy.dll
#LoadModule rewrite_module modules/ApacheModuleRewrite.dll
#LoadModule speling_module modules/ApacheModuleSpeling.dll
#LoadModule status_module modules/ApacheModuleStatus.dll
#LoadModule usertrack_module modules/ApacheModuleUserTrack.dll

#Le port du serveur par défaut c'est le port 80
Port 80

#Lorsque cette valeur est mise à on les adresses des connectés dans le fichier
# de log access.log ne comporteront pas les adresses sous la forme 192.10.10.1 mais
# sous leur forme résolue à savoir dial1.imaginet.fr par exemple
HostnameLookups off

#  User est le nom d'utilisateur sous lequel le serveur accède aux ressources de l'ordinateur
User nobody

#Group est le numéro de groupe sous lequel le serveur le serveur accède aux ressources de l'ordinateur
Group #-1

# L'adresse de la personne responsable du serveur
ServerAdmin Gilles.Maire@ungi.com

# Le répertoire dans lequel on retrouve l'arborescence du serveur (on remarque que les caractères \ sous Windows sont
# remplacés par /
ServerRoot "C:/Program Files/Apache Group/Apache"

#Permet d'attribuer au serveur une adresse virtuelle comme hotline.ungi.com qui permettra de distribuer des noms de services
# sous une identité différente
#BindAddress *

# Nom du fichier mouchard des erreurs. Avec un chemin relatif, le chemin est complété par la racine donnée
# par  ServerRoot
ErrorLog logs/error.log

#Donne le niveau de séverité des alertes qui sont enregistrés dans le fichier d'erreurs
# Les valeurs sont :  debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn

# Format des enregistrement dans les fichiers de log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# Emplacement du fichier de mouchard. Avec un chemin relatif, le chemin est complété par la racine donnée
# par  ServerRoot
CustomLog logs/access.log common

#Lorsque ces lignes ne sont pas commentées il est possible de spécifier des noms de fichiers dans lesquels
#seront stockés respectivement les adresses des pages d'où proviennent  les connexions et les noms des navigateurs
utilisés pour chaque connexion
#CustomLog logs/referer.log referer
#CustomLog logs/agent.log agent

# Si les fichiers de log agent, refer et le fichier principal doivent être combinés la directive suivante doit
# être utilisée
#CustomLog logs/access.log combined

# Nom du fichier dans le quel est rangé le numéro du processus du serveur http, sous UNIX ce nom est utile
# pour envoyer une commande kill -HUP numero de processus pour signifier au serveur qu'il doit relire ses fichiers
# de configuration
PidFile logs/httpd.pid

#Sur Unix ce fichier sert à tracer des status internes du serveur
ScoreBoardFile logs/apache_status

#Donne le nom du serveur courant, ce nom doit être compatible avec le DNS aussi
# pour une utilisation locale il est conseillé de donner le nom localhost
ServerName localhost

#Force le serveur à interroger le serveur de nom pour connaître l'adresse en clair de chaque connecté
UseCanonicalName on

# Cette directive permet de dire aux proxys de ne pas garder dans leur cache les pages envoyés.
#CacheNegotiatedDocs

# Le temps en seconde au bout du quel le serveur enverra un mesage d'attente trop longue sur une requête infructueuse
Timeout 300

#Autorise les navigateurs à ordonner aux connexions de rester actives (off pour désactiver)
KeepAlive On

#Nombre de connexions pouvant rester actives simultanément (0 pour pas de limite)
MaxKeepAliveRequests 100

#Délai maximum en seconde pour que les connexions restées actives attendent sans action
KeepAliveTimeout 15

#Nombre de requêtes maximal par connexion
MaxRequestsPerChild 0

# Nombre de threads concurrents par connexion
ThreadsPerChild 50
 

#Activation de la fonction proxy du serveur (ne fonctionne pas sous windows95)
#ProxyRequests On

#Emplacement du cache
#CacheRoot /usr/local/apache/proxy
#Taille du cache en mégaoctets
#CacheSize 5
#CacheGcInterval 4
#Nombre d'heures d'expiration du cache
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#Adresses qui ne doivent pas être mises dans le cache
#NoCache domaine.fr autres_domain.edu www.ungi.com

#Port additionnel pouvant être utilisé en sus du port habituel
#Listen 3000
#Listen 139.100.100.1

#Cette partie permet de configurer plusieurs machines virtuelles sur le même serveur
#Le serveur doit être configuré pour accepter plusieurs adresses IP ce qui se fait généralement
#en configurant le noyau unix de votre machine. Pour Windows les choses sont moins claires

#<VirtualHost nom.domaine.extension>
#ServerAdmin webmaster@domaine.extension
#DocumentRoot /repertoire
#ServerName nom.domaine.extension
#ErrorLog répertoire relatif
#TransferLog répertoire relatif
#</VirtualHost>
 
 
 

Configuration avancée

Protection d'une page par un mot de passe

La protection d'une page par un  mot de passe se fait de façon simple par ajout de la directive ci-desous dans le fichier access.conf
 

<Files /répertoire/page.html>
AuthName Libellé affiché dans la fenetre protégée 
AuthType Basic
AuthUserFile /etc/users.http 
require valid-user 
</Files>

La fabrication d'un mot de passe se fait par le programme htpasswd  qui prend la syntaxe suivante :
 

htpasswd [-c] passwordfile username

 

34.3 - Modules

Include Module

Ce module qui est compilé par défaut dans le serveur Apache permet d'utiliser les SSI.
Si ce module est livré de base, il n'est pas configuré par défaut pour des raisons de sécurité, car l'exécution de n'importe quel programme peut être néfaste au serveur.

Dans le fichier access.conf, il suffit d'insérer entre les balises

<Directory "nom">
</Directory>

La directive :

Options +Includes

De plus il est nécessaire  d'ajouter les lignes suivantes dans le fichier srm.conf :

AddType text/html .shtml
AddHandler server-parsed .shtml

 
 BientôtCe chapitre est encore en construction :)
 


Haut Haut Suivant Sommaire Recherche Fenêtre Glossaire Nouveau Bientôt Courrier Souscription Aide Copyright