Articles


  1. PLAN

  1. PLAN
  2. PRESENTATION
  3. INSTALLATION
  4. CONFIGURATION
  5. LIENS
  1. PRÉSENTATION

Un serveur web peut désigner plusieurs choses ; un ordinateur tenant le rôle de serveur informatique sur lequel fonctionne un serveur HTTP, un ensemble de serveurs permettant le fonctionnement d'application web et dans le cas qui nous intéresse le serveur HTTP lui-même.
Comme pour la plupart des autres serveurs, il en existe plusieurs implémentations, et c'est a celle appelée « apache » que nous nous intéresserons.
Premièrement, car c'est la plus répandu, ensuite parce qu'elle est gratuite.

  1. INSTALLATION

Apache peut s'installer de deux façons différentes sur une distribution Linux, soit par la compilation et l'installation des sources, soit par l'installation directe depuis les paquetages de votre distribution. C'est cette dernière qui sera décrite ici, plus rapide elle a le mérite de ne nécessité que de brèves modifications des fichiers de configuration.
L'installation doit être effectuée depuis les paquetages dont la liste est la suivante :

  • apache2
  • apache2-common
  • apache2-mod_php
  • apache2-modules
  • apache-conf

Une fois ces paquetages installés, il vous suffit de démarrer le serveur web via la commande ; « service httpd start ». Une fois démarré, connectez vous depuis votre navigateur web sur l'adresse http://localhost/spiderwork.net/, vous devriez arriver sur une page indiquant la version du serveur apache.
Si ce n'est pas le cas vérifiez que les paquetages ci-dessus ont été correctement installés et que le service est bien démarré.
Pour vérifier qu'un service est démarré sur une distribution Mandrake/Mandriva utiliser la commande « drakxservices », un équivalent existe certainement sur toutes les autres distributions.
Si tout paraît correct et que cela ne fonctionne toujours pas passer directement au paragraphe 4.

NB : Quel que soit le type d'installation que vous choisissez des résultats similaires peuvent être obtenus

  1. CONFIGURATION

  • Intro :

La configuration du serveur apache s'effectue par la modification des fichiers de configurations. Dont le principal « httpd2.conf » inclut les deux autres via la directive « include ».
Leurs chemins absolus sont les suivants :

- /etc/httpd/conf/httpd2.conf - /etc/httpd/conf/commonhttpd.conf -/etc/httpd/conf/vhosts/vhosts.conf

Les directives globales sont principalement contenu dans le fichier « httpd2.conf », le control des accès au répertoire dans « commonhttpd.conf » et la définition des hôtes virtuelles dans le fichier « vhosts.conf ».
La configuration effectuée ne peut être exhaustive et doit correspondre à vos besoins, c'est pour cela que les principales directives des fichiers de configuration seront détaillées dans les lignes qui suivent.

  • Configuration de base :

    - « ServerType standalone » : Signifie que le serveur s'exécutera seul, sans recours au super serveur « xinetd ».
    - « ServerRoot /etc/httpd, » : Indique la racine d'installation du logiciel HTTP apache.
    - « PidFile /var/run/httpd.pid » : Correspond au fichier de stockage de l'ID du processus primaire.
    - « DocumentRoot /var/www/html » : Répertoire racine des documents, contient les pages du site, il est obtenu en entrant l'adresse du serveur dans un navigateur internet.
    - « Port 80 » : Indique le numéro de port sur lequel le service http écoute(reçoit les requêtes).
    - « DirectoryIndex index.html index.php » : Par cette directive, vous fournissez une liste ordonnée de fichier que le serveur recherche par défaut dans un répertoire avant d'afficher une erreur 404.
    - « AccessFileName .htaccess » : Cette directive indique le nom de fichier à trouver dans un répertoire où l'accès sera restreint à un ou plusieurs utilisateurs devant s'identifier avec un nom et un mot de passe. Ces comptes utilisateurs sont spécifiques à Apache et n'interfèrent pas avec les comptes Linux.
  • Les modules :

Apache est un serveur modulaire qui par définition s'articule autour de modules pouvant être chargés dynamiquement grace au module « mod_so ».
Les directives LoadModule et AddModule respectivement charge et précise l'ordre d'intégration des modules statiques et dynamiques.
Exemple des directives pour charger PHP :
- LoadModule php4_module extramodules/libphp4.so - AddModule mod_php4.so

  • Réglages d'exécution :

- « Timeout 300 » : Indique le temps en ms d'attente du serveur d'une réponse à une requête envoyée par un programme extérieur(comme un SGBD)
- « KeepAlive on » : Autorise les connexions persistantes du client.
- « MaxKeepAliveRequests 100 » : nombre maximum de requêtes sans déconnexion.
- « KeepAliveTimeout 15 » : C'est le temps d'attente maximum de la requête suivante effectuée par un client.
- « ServerName site-internet.fr » : Fixe un nom public au serveur pouvant être utilisé dans les URL (exp : http://site-internet.fr/). Ce nom doit bien entendu être connu du DNS ou du fichier hosts local.
- « MinSpareServers 4 » « MaxSpareServers 20 » : indique respectivement le nombre minimum et maximum de processus serveur devant être en permanence disponible en attente de nouvelles connexions clients.
- « StartServers 4 » : nombre de processus démarrés à l'initialisation en plus du processus père. Ceci explique pourquoi la requête « ps aux |grep httpd »renvoie 5 PID.
- « MaxClients 150 » : nombre maximum de processus qu'apache peut lancer et gérer simultanément, ce nombre ne peut excéder 254.
- « MaxRequestPerChild 500 » : nombre maximal de requêtes HTTP traitées avant suppression d'un processus enfant.

  • Contrôle d'accès à un répertoire :

Chaque répertoire auquel Apache accéde peut être configuré séparément dans un conteneur « <Directory /myDir> » « </Directory> », l'ensemble des directives situées entre ces balises indique les permissions qui au contraire des permissions Unix par défaut s'appliquent aussi aux sous-répertoires.
Exemple :

# Politique par défaut : accès interdit à tous à partir de la racine /

# (donc pour tout le système de fichier) sauf permissions à expliciter <Directory /> order deny,allow deny from all Options None AllowOverride None </Directory>

# Pour la racine du serveur WEB, il faut bien permettre l'accès
<Directory /var/www/html>

# Options possibles : "None", "All", ou plusieurs combinaisons de :
# "Indexes", "Includes", "FollowSymLinks", "ExecCGI", ou "MultiViews".
Options Indexes Includes FollowSymLinks

# AllowOverride = All pour donner la priorité aux fichiers .htaccess
AllowOverride All
order allow,deny

# allow from = all pour permettre à tout le monde d'accéder aux documents
allow from all
</Directory>

Détail:

  • On précise d'abord la régle générale : « order allow,deny » ou « order deny,allow ». Ensuite, on indique les machines concernées via les directives « allow from » et « deny from ».

Exemple :

ordre
order deny, allow

# par contre l'ordre relatif de ces 2 clauses suivantes n'a pas d'importance
allow from 80.1.0.0/255.255.255.0
deny from 80.1.0.5

  • Options permet de contrôler l'action d'Apache sur les répertoires

- « All | None » : toutes | aucune option(s) permise(s)
- « ExecCGI » : exécution de scripts autorisée
- « FollowSymLinks » : le serveur suivra les liens symboliques rencontrés dans le répertoire
- « Includes » : permet l'utilisation de SSI
- « IncludesNOEXEC » : permet l'utilisation de SSI sauf les directives #exec et #include
- « Indexes » : autorise l'affichage du contenu d'un répertoire (si un fichier par défaut n'y est pas trouvé)

  • AllowOverride précise la manière avec laquelle des directives contenues dans un fichier « .htaccess » seront prises en compte. Si elle annule ou pas celle prise dans le conteneur. Par défaut la valeur NONE est utilisée, car elle permet d'omettre pour plus de sécurité le « .htaccess ». Après, il faut agir au cas par cas : All (prise compte totale), AuthConfig ou AuthUserFile (remplacement de AuthName, AuthType et Require), ce qui est suffisant pour protéger l'accès à un site privé par une authentification.
  • Pages web personnelles :

Apache permet de mettre en place un système de publication de page web personnelle.
Pour ce faire, il faut renseigner la directive « UserDir myDir » avec par exemple « UserDir public_html ». Ceci permettra à chaque utilisateur de placer dans son répertoire personnel un sous répertoire public_html contenant un ensemble de page html qui pour un utilisateur « toto » serait accessible par l'URL suivant : http://localhost/spiderwork.net/~toto/index.html
L'accès à ces pages peut ensuite être contrôlé par les directives suivantes :

- « UserDir disable »
- « UserDir enable bob toto »

Attention les droit des fichiers sont pris en compte, il est donc nécessaire de pouvoir parcourir les repertoires(chmod 771) et de lire les fichiers (chmod 644).
Dernièrement, il est possible d'autoriser la publication à des utilisateurs qui ne possèdent pas de compte système par la directive : « UserDir /home/*/public_html » ou * sera remplacé par un nom utilisateur .

  • Utilisation d'alias de répertoires

Il est possible pour simplifier l'accès à un répertoire d'utiliser un nom symbolique connu sous le terme d'alias. Cet alias vous permet d'accéder directement au répertoire source de celui-ci.
Exemple :

«  Alias /doc /usr/share/doc »

Permet d'accéder au répertoire « doc » via l'URL http://localhost/spiderwork.net/doc

  • Les sites web virtuels

Le site web virtuel est l'une des solutions au problème de l'hébergement de plusieurs sites avec le même serveur apache.  Cette solution basée sur le nom permet à l'utilisateur d'accéder a différents sites internet, elle vous est décrite dans les lignes suivantes :

# décommenter la ligne suivante pour inclure le fichier de conf des hôtes virtuelle
include conf/vhosts/Vhosts.conf

# ajouter ou décommenter les lignes suivantes :
LoadModule vhost_alias_module modules/mod_vhosts_alias.so
AddModule mod_vhost_alias.c

# Exemple de configuration pour le site internet home :

#le numéro ip de la machine
NameVirtualHost 192.168.0.1

#defini un nouveau site home
<VirtualHost 192.168.0.1>

# adresse mail de l'administrateur
ServerAdmin admin@localhost.com

#nom du serveur
ServerName home

#def du repertoire racine du site
DocumentRoot /var/www/home

#
<Directory /var/www/home>

Option Indexes FollowSymLinks MultiViews
AllowOveride None
Order allow,deny
allow from all

</Directory>

# cree un fichier de log propre au site
ErrorLog /var/log/apache/error_home.log

#defini le niveau de detail a « warn »
LogLevel warn

</VirtualHost>

# défini un nouveau site test
<VirtualHost 192.168.0.1>

DocumentRoot /var/www/test
ServerName test

</VirtualHost>

  • Protection par « .htaccess »

La directive « AccesFileName .htaccess » fixe globalement le nom de fichier des paramètres locaux a « .htaccess »
Un fichier nommé de la sorte permet dans le répertoire où il se trouve de contrôler complétement les accès a ce repertoire du moment où la permission accordée à ce répertoire est « AllowOveride AuthConfig » ou « AllowOveride All ».
Les directives suivantes seront systématiquement respectées avant toute autre autorisation.
Quelques directives :
- « AuthType basic » : authentification par mot de passe en clair
- « AuthName texte » : affiche texte comme invité dans la boite de dialogue.
- « AuthUserFile chemin/fichier » : précise le fichier qui contient les comptes et mots de passes des utilisateurs
- « Require valid-user | liste de noms » : seulement les noms des comptes énumérés ont droit d'accès.

Exemple non exhaustif de fichier « .htaccess » ne vous dispensant pas d'approfondir le sujet de vous même :
#
AuthUserFile /etc/httpd/users
AuthGroupFile /dev/null
AuthName « Acces prive »
AuthType Basic

#
<Limit GET POST>

require valid-user
# require user toto bob
# require group admin

</Limit>

#protection du « .htaccess » en lecture
<Files .htaccess>
order allow,deny
deny from all
</Files>

  1. LIENS

http://httpd.apache.org/

http://ftp.isc.org/www/bind/arm95/Bv9ARM.ch06.html

http://irp.nain-t.net/doku.php/210http:start

http://www.system-linux.eu/index.php?post/2009/02/09/Compilation-Installation-et-Configuration-Apache2