Outils pour utilisateurs

Outils du site


systeme:apache

Introduction à la configuration d'Apache (1.3.23)

  • L'installation est ici supposée déjà effectuée. Pour une description d'installation à partir de paquetages rpm (avec installation de php et mysql) voir cette page.
  • Il s'agit ici de prendre en main la configuration du serveur WEB Apache, et de comprendre les principaux paramètres et directives de l'unique fichier de configuration. Pour une installation de type RH ou Mdk, ce fichier est situé à /etc/httpd/conf/httpd.conf.
  • Pour chercher l'emplacement de clauses particulières, il est commode d'interroger ce fichier avec l'utilitaire grep. Par exemple pour chercher les numéros de lignes où se trouve le mot-clé UserDir, puis le mot alias, sans tenir compte de la casse :
grep -n "UserDir" /etc/httpd/conf/httpd.conf
grep -ni "alias" /etc/httpd/conf/httpd.conf
grep -ni "alias" /etc/httpd/conf/commonhttpd.conf
* Il est prudent de sauvegarder le fichier de configuration d'origine. Pour vérifier la syntaxe de ce fichier, passser la commande:
httpd -t

Configuration de base

  • La configuration personnalisée du serveur s'effectue par modification du fichier de configuration située à :

/etc/httpd/conf/httpd.conf. Ce fichier pour certaines installations est maintenant scindé en deux parties httpd.conf et commmonhttpd.conf Observer que le fichier commmonhttpd.conf est inclus dans le fichier de base httpd.conf, par la directive :

Include conf/commmonhttpd.conf (ligne 117)

Même si l'on a pas de raisons de les modifier, il est instructif de les parcourir pour découvrir les principales clauses paramétrables. Ce qui suit est la description des principaux paramètres, et leur valeur attribuée par défaut à l'installation.

  • ServerType standalone

Le serveur s'exécutera seul, sans recourir au super-serveur xinetd.

  • ServerRoot /etc/httpd

Il s'agit du répertoire où le serveur trouvera son répertoire de configuration conf On trouve dans /etc/httpd, un lien vers /var/log/httpd/access_log, le fichier-journal des accès aux ressources, réussis ou non (le consulter)

  • PidFile /var/run/httpd.pid

C'est le fichier où le serveur en exécution stocke son premier numéro de processus (PID)

  • DocumentRoot /var/www/html

fixe la racine du serveur Web, c'est-à-dire le répertoire de base où sont cherchées par défaut les pages html, lorsque l'URL ne comporte pas de chemin de répertoire

  • Port 80

Apache écoute sur le port tcp usuel

  • User apache (dans commonhttpd.conf)

Group apache Apache doit etre démarré par root, mais par sécurité ses processus auront pour propriétaire l'utilisateur apache, sans privilège.

  • ServerAdmin root@localhost (dans commonhttpd.conf)

S'il a un problème, le serveur écrit un message à cette adresse

  • UserDir public_html

Ce paramètre signifie que l'utilisateur toto peut publier ses pages WEB personnelles dans un sous-répertoire de son répertoire perso, qui doit être nommé public_html, c'est-à-dire dans /home/toto/ public_html. Sa page d'accueil sera alors accessible par l'URL : http://serveur/~toto , où serveur est le nom du serveur ou son adresse IP.

  • DirectoryIndex index.html index.php index.htm …

Il est courant d'omettre le nom du fichier de la page d'accueil d'un site ou de l'un de ses sous-répertoires. Pour ne pas retourner systématiquement une erreur 404 signalant une adresse erronnée, le serveur posséde une liste standard de noms de fichiers qu'il s'efforce de trouver dans le répertoire. Cette liste ordonnée est indiquée par la clause DirectoryIndex

  • AccessFileName .htaccess

Cette clause fixe le nom du fichier à trouver dans un répertoire pour que son accès soit protégé, en imposant à l'utilisateur une authentification par nom et mot de passe. Ces comptes sont spécifiques à Apache et n'interfèrent pas avec les comptes Linux. Voir cette page pour une explication de sa mise en oeuvre.

Les modules

Apache est un serveur modulaire. Autour d'un noyau qui rassemble les fonctions de base on peut inclure des modules de façon dynamique (à condition de s'y connaitre !). Il existe un module spécial mod_so qui permet justement ce chargement dynamique. Les directives incluses dans httpd.conf LoadModule chargent les modules dynamiques et AddModule précise l'ordre d'intégration des modules statiques et dynamiques. Par exemple voici les directives controlant le module PHP

LoadModule php4_module extramodules/libphp4.so
.....
AddModule mod_php4.so

Les modules dynamiques chargeables (fichiers .so) sont tous placés dans /usr/lib/apache2/modules/.

Pour connaitre les modules compilés avec le core :

apache2 -l

Voir la liste des modules chargés par apache :

apache2ctl -t -D DUMP_MODULES

Réglages d'exécution

  • Timeout 300

Paramètre important qui fixe la durée (en secondes) d'attente maximum du serveur d'une réponse à une requete envoyée à un programme extérieur (comme un gestionnaire de base de données)

  • KeepAliveon

MaxKeepAliverequests 100

KeepAliveTimeout 15

Autorise les connexions persistantes d'un client, afin de lui permettre l'envoi de plusieurs requetes sans déconnexion, avec un plafond fixé pour un client, pour servir aussi d'éventuels autres clients ! et un temps d'attente maxi de la requete suivante provenant du meme client.

  • ServerName www

Fixe un nouveau nom public pour le serveur, auquel on pourra s'adresser par les URL http://www/ Bien entendu le nom symbolique www doit être connu du DNS ou du fichier hosts local (sous GNU/Linux ou MS/Windows)

  • MinSpareServers4

MaxSpareServers 20 Nombres maximum et minimum de processus serveurs devant etre en permannence disponibles, en attente de nouvelles connexion clientes

  • StartServers 4

Nombre de processus serveurs démarrés à l'initialisation, en plus du processus père. Ceci explique pourquoi la requete 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 pas excéder 254

  • MaxRequestsPerChild 500

Nombre maximum de requetes HTTP traitées par un processus enfant avant qu'il ne soit éliminé.

Controle des accès à un répertoire

  • Chaque répertoire auquel Apache accéde peut etre configuré particulièrement (ceci s'applique aussi à ses sous-répertoires) Le paramétrage de rep se précise dans un conteneur, ensemble de clauses situées entre les balises <Directory rep> et </Directory>

Attention, contrairement aux permissions Unix, les clauses s'appliquent AUSSI à TOUS les sous-répertoires. En revanche, une directive <Directory rep> spécifique à l'un des sous-répertoires s'impose.

  • extrait
#--------------------- Global Access Configuration ------------------------
# Voici un exemple de paramétrage des permissions d'accès. Il est préférable
# d'etre restrictif à la racine et d'étendre les permissions à des répertoires spéciaux.

# Politique par défaut : accès interdit à tous à partir de /
# (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>

# pour le répertoire contenant les scripts:

<Directory /var/www/cgi-bin>
AllowOverride None
Options ExecCGI
</Directory>

* Précisions sur la restriction des accès Pour un répertoire donné, dans son conteneur <Directory>, on peut préciser les hotes dont les requetes seront traitées, et ceux dont les requetes seront rejetés.

On précise d'abord une règle générale avec la directive order allow, deny ou l'inverse, qui précise la règle à appliquer aux machines qui figurent sur les listes explicites qui suivent les clauses allow from et deny from 1. order allow, deny : autorise les hotes de la liste allow, mais rejette ceux de la liste deny 2. order deny, allow : rejette les hotes de la liste deny, mais autorise ceux de la liste allow 3. exemple1 : soit à autoriser tout le réseau 172.16.0. sauf 172.16.0.25

# quel est le bon ordre : order deny, allow ou bien allow, deny ?
order .....
# par contre l'ordre relatif de ces 2 clauses suivantes n'a pas d'importance
allow from 172.16.0.0/255.255.255.0
deny from 172.16.0.25

4. exemple 2 : n'autoriser que certaines machines, par exemple la machine 172.16.0.100 et une machine voisine du meme réseau

  • Les paramétres d'Options permet de controler l'action d'Apache sur les répertoires

Option signification 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 .htacces seront prises en compte, si ces directives supplantent ou non celles qui sont dans le présent conteneur.

Par défaut par sécurité, on choisit la valeur NONE (.htaccess est alors ignoré), et on positionne les autres valeurs qu'au cas par cas : ALL (prise en compte tatale), AuthConfig ou AuthUserFile (remplacement de AthName,AuthType et Require), ce qui est suffisant pour protéger l'accès à un site privé par une authentification.

Contrôle d'accès à un fichier

<Files fichier.html fichier2.html>

AuthUserFile /usr/local/bin/www/httpd_1.3/basedenoms/.htpasswd
AuthGroupFile /usr/local/bin/www/httpd_1.3/basedenoms/.htgroup
AuthName AccesRestreint
AuthType Basic

<limit GET POST>
order deny,allow
deny from all
allow from .enst.fr
require group intranet
satisfy all
</Limit>


</Files>

Personnalisation

Les pages WEB personnelles

  • Comment permettre aux utilisateurs de publier leurs “pages persos” sur le WEB de l'établissement ?
  • Tout naturellement, ces documents devront être placés dans leur répertoire personnel dont ils sont propriétaires et ont le plein accès, tout en en permettant l'accès et la lecture à tous.
  • La page d'accueil doit être présente dans un sous-répertoire du répertoire perso. Par défaut le nom de ce sous-répertoire est fixé à public_html
  • Ce sous-répertoire des pages personnelles a un nom spécifié par le paramètre UserDirdans le fichier httpd.conf . Donc par défaut, on y trouve :
  • *UserDir** public_html
  • Plus concrétement, si la page d'accueil s'appelle index.html, pour l'utilisateur toto , sur le serveur www.bahut.ac-creteil.fr, son ouverture sur une station du réseau est obtenue en spécifiant l'URL : http://bahut.ac-creteil.fr/~toto/index.html, ou plus simplement : bahut/~toto
  • On peut n'autoriser l'accès qu'à certains utilisateurs avec les lignes supplémentaires :

UserDir disable

UserDir enable jean toto ....
* Attention aux droits d'accès ! L'accès de tous à ces sites persos exige que le droit de parcours x soit accordé à tous les rép. des utilisateurs et à public_html(droits 771), et que le droit de lecture r soit bien sûr accordé aux fichiers des pages pour tous (droits 644)
* En utilisant UserDir /home/*/public_html, où * est remplacé par un nom d'utilisateur, celui-ci n'aplus besoin de posséder un compte sur le système.

.htaccess et .htpasswd

le fichier .htaccess

AuthName "Page d'administration protégée"
AuthType Basic
AuthUserFile "/home/sdz/www/gestion/admin/.htpasswd"
Require valid-user

Parmi ces 4 lignes, il y en a 2 que vous allez devoir changer :

  • AuthName : c'est le texte qui invitera l'utilisateur à inscrire son login / mot de passe. Vous pouvez personnaliser ce texte comme bon vous semble.
  • AuthUserFile : là c'est plus délicat, c'est le chemin absolu vers le fichier .htpasswd (que vous mettrez dans le même répertoire que le .htaccess).

le fichier .htpasswd

Apache fournit un outil permettant de générer facilement des mots de passe cryptés (aussi bien sous Windows que sous Unix), il s'agit de l'utilitaire htpasswd accessible dans le sous-répertoire bin d'Apache.

La syntaxe de cet utilitaire est la suivante :

  • Pour créer un nouveau fichier de mots de passe :

htpasswd -c {chemin du fichier de mot de passe} utilisateur

  • Pour ajouter un nouvel utilisateur/mot de passe à un fichier existant :

htpasswd {chemin du fichier de mot de passe} utilisateur

Le mot de passe sera demandé en ligne de commande avec une confirmation. Voici un exemple :

htpasswd -c /www/secure/.htpasswd JFPillou

Utilisation d'alias de répertoires

  • Il peut être utile de remplacer un chemin de répertoires par un nom symbolique. Ces répertoires alias peuvent etre paramétré comme les autres.
  • Exemple significatif Il s'agit d'accéder par l'alias doc aux doc HTML du serveur Linux et de ses différentes applications et services installés, qui sont regroupées dans /usr/share/doc. On réserve cette consultation aux machines du réseau local. La stratégie consiste ici à interdire d'abord à tous (deny from all), puis on énumère les exceptions (allow from ..,..)
# pour accéder à la doc directement avec l'url http://Serveur/doc
Alias /doc /usr/share/doc
# pour accorder les permissions d'accès limitées au site doc
<Directory /usr/share/doc>
order deny,allow
deny from all
# permission à partir de localhost
allow from localhost, 127.0.0.1
# permission à partir des stations du sous-domaine de l'établissement
allow from .bahut.ac-creteil.fr
Options Indexes FollowSymLinks
</Directory>

Héberger plusieurs sites WEB

  • De façon générale, il est recommandé de faire exécuter plusieurs instances d'Apache pour chacun des sites à publier, surtout si l'un doit être particulièrement protégé. Les serveurs httpd supplémentaires sont lancés en forçant la prise en compte de leur fichier de config spécifique par une commande de la forme :
httpd -f config

où config est le nom du fichier de configuration, avec son chemin absolu (sinon il est consiséré comme situé relativement à ServerRoot, c'est-à-dire /etc/httpd, par défaut.

  • C'est la solution retenue par les projets SLIS et SambaEdu

Ainsi pour SLIS, il y a lancement dans /etc/rc.d/rc.local de /usr/sbin/httpd -f /etc/hadmin/conf/httpd.conf. Les paramètres usuels sont fixés ainsi :

ServerRoot /etc/hadmin
DocumentRoot /home/hadmin/html/
Port 1098

Les sites WEB virtuels

  • Plusieurs solutions sont envisageables pour faire héberger plusieurs sites dits “virtuels” gérés par un seul serveur, défini par une même configuration. (voir le site Apache). Le plus simple, semble t-il est l'hébergement virtuel basé sur le nom, décrit ci-après. Dans ce cas, un utilisateur croira accéder à plusieurs sites WEB différents, en fait hébergés par le même serveur Apache.
  • Paramétrage dans /etc/httpd/conf/httpd.conf, section # Add-on Modules and Virtual Hosts # vers la fin du fichier

1. décommentez les lignes suivantes tout à la fin du fichier (enlevez le # devant la ligne) :

# pour indiquer où le paramétrage des sites vituels est décrit (relativement à /etc/httpd)
Include conf/vhosts/Vhosts.
# Pour activer les services virtuels
LoadModule vhost_alias_module modules/mod_vhost_alias.so
AddModule mod_vhost_alias.c

2. Exemple de modification dans /etc/httpd/conf/vhosts/Vhosts.conf pour mettre en place un site virtuel pour mon site LINUX, consultable à l'url : http://linux.bahut.ac-creteil.fr

################# Named VirtualHosts
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.0.1>
ServerName linux
#ServerPath /domain
DocumentRoot /var/www/LinuxCours/formation
ErrorLog logs/linux-error_log
TransferLog logs/linux-access_log
</VirtualHost>

Voir la liste des vhosts :

apache2ctl -t -D DUMP_VHOSTS

Gestion et suivi des connexions

  • La commande tail -f /var/log/httpd/access_log > /dev/tty11 affiche les dernières requêtes au serveur Apache, “en direct” sur la pseudo-console 11 (pour l'activer : alt-11).

On peut utiliser aussi less /var/log/httpd/access_log puis Shift-F pour basculer à la fin du fichier en attente de données (Ctrl-C pour finir)

Le module PHP

  • PHP a normalement été intégré au serveur Apache sous forme d'un module chargeable, le fichier libphp4.so, situé comme tous les autres modules d'Apache dans /usr/lib/apache.
  • Pour vérifier le chargement du module, consulter la fin du fichier de configuration d'Apache, /etc/httpd/conf/httpd.conf.

On doit y trouver la directive d'inclusion du fichier de configuration de PHP : Include conf/addon-modules/php.conf, le chemin étant supposé relatif à /etc/httpd

  • C'est ce fichier php.conf qui contient la directive d'inclusion du module PHP, et la description des extensions de fichiers, qui devront être interprétés par ce module :
LoadModule php4_module /usr/lib/apache/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .php .php4 .php3 .phtml
AddType application/x-httpd-php-source .phps
  • PHP possède lui aussi son fichier de configuration, /etc/php.ini. (il n'est pas non plus conseillé d'y intervenir sauf “si on sait ce que l'on fait”).

On peut néanmoins y observer que PHP prend bien en compte le module d'extension MySql, contenant les fonctions d'accès au “moteur” de base de données MYSQL (qui a du être installé à part), par la présence de extension=mysql.so (en ligne 243)

  • En cas de modification d'un fichier de configuration , comme PHP fonctionne comme module d'Apache, il faut redémarrer Apache pour qu'il réinitialise PHP par la lecture de php.ini (rappel de la commande : /etc/rc.d/init.d/httpd stop|start)
  • Voir la liste des modules chargés par php :

php5 -m

Multiples Reverse-Proxy

http://apache.webthing.com/mod_proxy_html/ pour utiliser ProxyHTMLURLMap (module mod_proxy_html)

    ServerName author.example.com
    ProxyPass        /   ajp://localhost:8009/
    ProxyPassReverse /   ajp://localhost:8009/

    ServerName site1.example.com
    ProxyPass        /.magnolia/ ajp://localhost:8009/.magnolia/
    ProxyPass        /.resources/ ajp://localhost:8009/.resources/
    ProxyPass        /docroot/ ajp://localhost:8009/docroot/site1/
    ProxyPass        /dms/     ajp://localhost:8009/dms/site1/
    ProxyPass        /resources/     ajp://localhost:8009/resources/site1/
    ProxyPass        /         ajp://localhost:8009/site1/
    ProxyPassReverse        /.magnolia/ ajp://localhost:8009/.magnolia/
    ProxyPassReverse        /.resources/ ajp://localhost:8009/.resources/
    ProxyPassReverse /docroot/ ajp://localhost:8009/docroot/site1/
    ProxyPassReverse /dms/     ajp://localhost:8009/dms/site1/
    ProxyPassReverse /resources/     ajp://localhost:8009/resources/site1/
    ProxyPassReverse /         ajp://localhost:8009/site1/
    SetOutputFilter INFLATE;proxy-html;DEFLATE
    ProxyHTMLURLMap /docroot/site1/ /docroot/
    ProxyHTMLURLMap /dms/site1/     /dms/
    ProxyHTMLURLMap /resources/site1/     /resources/
    ProxyHTMLURLMap /site1/         /
  • server.xml
   <Host name="site1.example.com" appBase="public"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
      </Host>
     
      <Host name="author.example.com" debug="0" appBase="author"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
      </Host>
systeme/apache.txt · Dernière modification : 2012/04/05 19:44 de root