Dernière mise à jour | 1 er juin 1998 | Auteur | Gilles Maire |
Serveur | http://www.imaginet.fr/ime/apache.htm | Adresse | Gilles.Maire@UNGI.com |
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 :
#!c:/perl/lib/perl.exe
avec l'extension exe. Cette erreur de jeunesse sera bientôt corrigée.
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.
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.
127.0.0.1 - - [30/May/1998:17:27:15 +0200] "GET /page1.shtml HTTP/1.0" 200 664
Les différents champs indiquent respectivement la provenance de la connexion, la date et l'heure de la connexion, la page vue et le code de lecture ainsi que la taille du fichier lu.
Chaque ligne est appelée un hit et pour peu qu'une page html contienne 10 images, le fichiers logs contiendra 11 lignes relatives à m'envoi de cette page, ce qui fait souvent confondre le nombre de lecteurs et le nombre de connexions.
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 :
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
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
#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>
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
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
Ce chapitre est encore en
construction :)