Accueil > Logiciel > Administration réseau sous Linux: Apache

Administration réseau sous Linux: Apache

26/10/2015 Categories: Logiciel Tags: , ,

Source: Wikilivres

Apache est un serveur HTTP libre. Un serveur HTTP permet d’héberger des sites web qui seront accessibles avec un navigateur tel que Mozilla Firefox, Internet Explorer ou encore Chrome.

Un site web peut fournir tout type de contenu (des fichiers textes, HTML, Flash, zip…). Ce contenu peut être statique (le serveur transmet un fichier au navigateur) ou dynamique (le contenu est généré par un programme exécuté par le serveur). Les sites web contiennent généralement plusieurs types de documents, certains étant statiques et d’autres dynamiques.

Nous traiterons ici d’Apache 2.2 sur un système Debian (et ses dérivés, comme Ubuntu).

Fichiers log

Par défaut sous Debian, Apache enregistre les erreurs dans le fichier /var/log/apache2/error.log. Quand quelque chose ne fonctionne pas, ce fichier fournit souvent des pistes pour trouver la solution.

Il enregistre également toutes les requêtes dans /var/log/apache2/access.log.

Configuration de base

Sous Debian, Apache se lance automatiquement lorsqu’on l’installe et à chaque démarrage du système. Lorsqu’on modifie sa configuration, il faut lui faire prendre connaissance des changements avec la commande

/etc/init.d/apache2 reload

Pour l’arrêter, le lancer ou le relancer on utilisera la même commande avec stop, start ou restart.

Pour d’autres systèmes il faudra consulter la documentation du système ou celle d’Apache [archive].

Configuration du serveur

La configuration [archive] du serveur se trouve dans /etc/apache2/apache2.conf. Ce fichier contient des instructions Include [archive] qui permettent de déplacer certaines parties de la configuration dans d’autres fichiers. Debian utilise cette fonctionnalité pour les modules [archive] (comme PHP) et la gestion des serveurs virtuels [archive] :

Configuration des modules

Le répertoire /etc/apache2/mods-available contient les modules installés. Le répertoire /etc/apache2/mods-enabled contient les modules activés. Les modules activés sont des liens symboliques vers les modules installés.

Pour activer ou désactiver un module, on peut manipuler directement les liens ou utiliser les commandes a2enmod et a2dismod (voir les pages de man).

Configuration des sites

De la même manière, le répertoire /etc/apache2/sites-available contient les sites web disponibles et /etc/apache2/sites-enabled les sites activés. Il en existe un préinstallé : le site default.

Les sites peuvent s’activer ou se désactiver en manipulant les liens dans sites-enabled ou en utilisant a2ensite et a2dissite.

Quelques directives classiques

La syntaxe d’Apache est assez simple. On trouve des blocs (ou contextes) comme par exemple :

<VirtualHost ...> # début de bloc VirtualHost
  ...
  <Directory ...> # début de bloc Directory
     ...
  </Directory>    # fin de bloc Directory
  ...
</VirtualHost>    # fin de bloc VirtualHost

et des directives comme par exemple

Include /etc/apache2/sites-enabled/

Les directives qui permettent de configurer le serveur lui-même sont généralement placées dans apache2.conf. Celles qui ne concernent qu’un site web sont déportées dans le fichier de configuration du site (sites-available/mon-site-web).

La directive DocumentRoot [archive] fixe la racine du serveur Web, c’est-à-dire le répertoire de base où se trouvent les documents. Par exemple avec la directive DocumentRoot /var/www/html, si le navigateur demande la page http://serveur/repertoire/fichier.txt, le serveur cherchera le fichier /var/www/html/repertoire/fichier.txt.

UserDir [archive] permet d’indiquer le répertoire personnel des utilisateurs du système. La directive UserDir public_html signifie qu’un utilisateur peut publier ses pages web personnelles dans un sous-répertoire public_html de son répertoire personnel. Pour l’utilisateur toto, c’est généralement /home/toto/public_html. Sa page d’accueil sera alors accessible par l’URL spéciale http://serveur/~toto.

DirectoryIndex [archive] indique la liste des fichiers qu’Apache cherchera à afficher si l’URL n’en précise pas. Par exemple si la configuration contient DirectoryIndex index.html index.php et qu’on demande l’URL http://serveur/repertoire/, Apache va chercher dans le répertoire un fichier index.html ou index.php. Si un de ces fichiers existe, il sera affiché. Sinon, Apache affichera soit la liste des fichiers, soit une erreur (suivant la présence de Indexes dans la directive Options [archive]).

AccessFileName [archive] définit le nom du fichier qu’on peut placer dans un répertoire pour en modifier sa configuration. Cela permet, par exemple, d’interdire localement l’affichage de la liste des fichiers, ou de protéger par mot de passe un répertoire et ses sous répertoires.

Listen [archive] indique à Apache sur quel port TCP il doit écouter. Le port par défaut du protocole HTTP est 80.

ServerName [archive] indique à Apache son nom de domaine et éventuellement son port. Il s’en sert lorsqu’il doit communiquer son adresse au client (le navigateur). C’est le cas par exemple lorsqu’on demande l’adresse http://serveur/repertoire sans slash (/) à la fin. Comme ce n’est pas une URL valide (l’URL d’un répertoire doit se terminer par un slash), Apache utilise la directive ServerName pour reconstruire une adresse avec un slash et la renvoi au client.

Gestion du nombre d’instances d’Apache

Le serveur Apache utilise plusieurs processus et prends en charge plusieurs types de stations multi-processeurs en utilisant les modules MPM (multi processing modules).

Le premier module prefork utilise des processus (pour systèmes stables ou plus anciens), le deuxième worker utilise des threads, et le dernier des threads par processus. Le dernier module perchild est en cours de développement et n’est pas recommandé.

Celui utilisé par défaut sous Linux est prefork.

Exemple commenté

La partie du fichier de configuration traitant la gestion du nombre de processus et la suivante:

##
## Server-Pool Size Regulation (MPM specific) ##

# prefork MPM
# StartServers ......... nb de processus serveur au demarrage
# MinSpareServers ...... nb minimum de processus serveurs '''libres'''  instanciés
# MaxSpareServers ...... nb maximum de processus serveurs '''libres'''  instanciés. S'il y en a MaxSpareServers+1 on les tues
# MaxClients ........... nb maximum de processus serveurs qui peuvent demarrer
# MaxRequestsPerChild .. nb maximum de requètes gérées par processus serveur.
#                        Apres MaxRequestsPerChild requètes, le processus meurt.
#                        Si MaxRequestsPerChild=0, alors le processus n'expire jamais.

<IfModule prefork.c>
  StartServers 5
  MinSpareServers 5
  MaxSpareServers 10
  MaxClients 20
  MaxRequestsPerChild 0
</IfModule>

# pthread MPM # StartServers ......... initial  number of server processes to start
# MaxClients ........... maximum number of server processes allowed to start
# MinSpareThreads ...... minimum number of worker threads which are kept spare
# MaxSpareThreads ...... maximum  number of worker threads which are kept spare
# ThreadsPerChild ...... constant number of worker threads in each server process
# MaxRequestsPerChild .. maximum number of requests a server process serves

<IfModule worker.c>
  StartServers 2
  MaxClients 150
  MinSpareThreads 25
  MaxSpareThreads 75
  ThreadsPerChild 25
  MaxRequestsPerChild 0
</IfModule>

# perchild MPM # NumServers ........... constant number of server processes
# StartThreads ......... initial  number of worker threads in each server process
# MinSpareThreads ...... minimum number of worker threads which are kept spare
# MaxSpareThreads ...... maximum  number of worker threads which are kept spare
# MaxThreadsPerChild ... maximum  number of worker threads in each server process
# MaxRequestsPerChild .. maximum number of connections per server process (then it dies)

<IfModule perchild.c>
  NumServers 5
  StartThreads 5
  MinSpareThreads 5
  MaxSpareThreads 10
  MaxThreadsPerChild 20
  MaxRequestsPerChild 0
  AcceptMutex fcntl
</IfModule>

Paramétrage des répertoires

Chaque répertoire auquel Apache accède peut être configuré indépendamment (et ses sous-répertoires en héritent).

Le paramétrage d’un répertoire se met dans un « conteneur » délimité par <Directory chemin_du_répertoire> et </Directory>. La configuration s’applique au répertoire et à tous ses sous répertoires. Si un sous-répertoire possède également sa propre configuration, elle vient s’ajouter à celle du parent.

Voici quelques exemples de contrôle d’accès. Plus de détails sont donnés dans la section « Un exemple de configuration ».

# Configuration du répertoire racine du système
<Directory />
  # On n'autorise aucune option particulière
  Options None

  # Aucune modification n'est autorisé dans les fichiers .htaccess
  AllowOverride None
</Directory>

# Pour la racine du serveur:
<Directory /var/www/html>
  # Quelques options
  Options Indexes Includes FollowSymLinks

  # Les options peuvent être changées dans un .htaccess
  AllowOverride All

  # Permet à tout le monde d'accéder aux documents
  Allow from All

  # Spécifie comment appliquer la règle précédente
  Order allow,deny
</Directory>

# Le répertoire contenant des exécutables CGI
<Directory /usr/lib/cgi-bin>
  AllowOverride None
  Options ExecCGI
</Directory>

Les paramètres possibles de la directive Options [archive] sont : « None », « All », « Indexes », « Includes », « FollowSymLinks », « ExecCGI », ou « MultiViews ».

Gérer les pages Web personnelles

Il est possible de permettre aux utilisateurs du système de diffuser des pages personnelles sans avoir à créer un site par utilisateur. Il faut pour cela utiliser le module userdir.

Le répertoire contenant le site web doit être créé dans le home de l’utilisateur et doit être accessible en lecture pour tous. Le nom du répertoire est défini par la directive UserDir [archive]. Par défaut il s’agit du répertoire public_html.

L’adresse pour accéder à ces sites personnels est le nom de l’utilisateur précédé d’un tilde (~).

Par exemple un utilisateur toto sur le serveur www.iut.clermont.fr peut créer les pages de son site dans le répertoire /home/toto/public_html, et on pourra y accéder avec l’adresse : http://www.iut.clermont.fr/~toto/.

Il est possible de n’autoriser que certains utilisateurs à bénéficier du UserDir. Par exemple pour n’autoriser que sasa et toto à avoir un site personnel :

UserDir disabled
UserDir enabled sasa toto

Pour définir les options de ces répertoires, on peut utiliser une clause Directory pour le répertoire /home/*/public_html :

<Directory /home/*/public_html>
  Order allow,deny
  Allow from all
</Directory>

La clause UserDir public_html ne fonctionne que pour des utilisateurs ayant un compte sur le système. L’URL http://www.iut.clermont.fr/~toto ne fonctionne que si toto est un véritable utilisateur (auquel cas l’expression Unix ~toto a un sens), pas seulement si le répertoire /home/toto/public_html existe.

On peut utiliser une autre forme de UserDir pour autoriser les répertoires sans forcément qu’il y ait un compte unix associé :

UserDir /home/*/public_html

Le CGI (Common Gateway Interface) est une norme permettant à Apache d’exécuter des programmes écrits en n’importe quel langage (Bash, C, Java, Perl, PHP, Python…), du moment qu’il est exécutable et qu’il respecte certaines contraintes d’entrées/sortie.

Configurer l’accès aux scripts CGI

Pour qu’Apache prenne en charge les scripts, il est nécessaire d’effectuer un minimum de paramétrage dans la configuration du site.

Activer le module

a2enmod cgi

ScriptAlias

La directive (de httpd.conf) :

ScriptAlias /cgi-bin/ /chemin des scripts/

précise le nom du répertoire où Apache est autorisé à exécuter des scripts CGI[1].

Exemple Unix :

ScriptAlias /cgi-bin/ /var/www/cgi-bin

Exemple Windows, utiliser le format URL (pas d’antislash) :

ScriptAlias /cgi-bin/ "C:/wamp/bin/apache/apache2.2.27/cgi-bin/"

En fait le chemin /cgi-bin/ n’existe pas vraiment, il est dirigé vers le chemin des scripts défini par la directive, et cela permet d’écrire des URL comme http://serveur/cgi-bin/mon_script.

ExecCGI

La clause suivante active l’option ExecCGI dans /var/www/cgi-bin, ce qui autorise Apache à exécuter les scripts sur le serveur :

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

Par exemple : vous écrivez un script essai.cgi, et vous voulez que /home/httpd/cgi-bin contienne les scripts.

Il faut donc au moins écrire :

<Directory /home/httpd/cgi-bin>
  Options ExecCGI
</Directory>

L’appel à un script essai.cgi sera effectué par l’URL : http://serveur/cgi-bin/essai.cgi

AddHandler

Cette clause permet de choisir les extensions de fichiers qui seront autorisés, ex :

AddHandler cgi-script .cgi .exe .pl .py .vbs

Récapitulatif

Exemple complet sur Windows, dans la configuration Apache :

ScriptAlias /cgi-bin/ "E:/www/cgi-bin/"
<Directory "E:/www/cgi-bin/">
  Options FollowSymLinks Indexes
  AllowOverride All
  Order deny,allow
  Allow from all
  Require all granted           
</Directory>

Dans E:/www/cgi-bin/.htaccess :

AddHandler cgi-script .cgi .exe .pl .py .vbs

Écrire un programme CGI

La contrainte principale concerne la sortie du programme. Si un programme CGI génère des données sur sa sortie standard, il doit les précéder d’un en-tête HTTP permettant de les identifier.

Bash

Voici un exemple de programme CGI écrit en bash :

#!/bin/bash

# Header
echo "Content-type: text/html"

# Fin du header
echo ""

# Contenu à afficher dans le navigateur
echo "<html><body>Hello World!</body></html>"

Ce script génère une page HTML.

Perl

#!c:/perl/perl/bin/perl.exe -w
use CGI;
my $query = new CGI;
my $Name = $query->param('Name');
print $query->header();
print "Hello World!"

Python

#!C:\Program Files (x86)\Python\python.exe
# -*- coding: UTF-8 -*-
print "Content-Type: text/plain;charset=utf-8"
print
print "Hello World!"
Pour plus de détails voir : Programmation Python/L’interface CGI.

VBS

Pour Windows[2].

'!c:/windows/system32/cscript //nologo
Wscript.Echo "Content-type: text/html" & vbLF & vbLF
WScript.Echo "Hello World!"
Wscript.Quit 0

Erreurs connues

  • Error 500 Erreur du serveur! : remplacer un Deny from all par un Allow from all. Sinon, regarder les logs (tail /var/log/apache2/error.log). Par exemple, cela peut provenir de suexec policy violation => commenter la directive SuexecUserGroup.
  • Error 403 Accès interdit : lister ce répertoire est interdit, il faut donc connaitre l’URL des fichiers qu’il contient.
  • Le code source du fichier à exécuter s’affiche dans le navigateur, ou ce dernier propose de le télécharger : le Addhandler est manquant (exemple dans le .htaccess ci-dessus). Sinon c’est le module qui n’est pas activé (a2enmod cgi).
  • couldn’t create child process : remplacer le chemin après le shebang. Par exemple :
    #!/usr/bin/perl par #!c:/perl/perl/bin/perl.exe -w.
    #!/usr/bin/env python par #!C:\Program Files (x86)\Python\python.exe.
  • End of script output before headers : en-tête manquante dans le contenu affiché par le script (ex : déplacer l’importation avant print "Content-Type: text/plain;charset=utf-8"). Mais cela peut aussi être dû à un message d’erreur dans le script à exécuter.
  • malformed header from script: Bad header: : l’en-tête n’est pas adaptée (ex : remplacer #print "Content-Type: text/plain;charset=utf-8" par print "Content-type: text/html\n\n" s’il y a un print "<html>" après).

Sinon consulter les logs Apache…

Le module PHP

PHP a normalement été intégré au serveur Apache sous forme d’un module chargeable situé comme tous les autres modules d’Apache dans /usr/lib/apache2/modules.

Les fichiers /etc/apache2/mods-availiable/php.load et /etc/apache2/mods-availiable/php.conf contiennent les directives LoadModule et AddType qui permettent à Apache d’exécuter du PHP quand on demande un fichier se terminant par .php. Ils doivent être liés dans /etc/apache2/mods-enabled pour activer PHP. On peut utiliser pour cela la commande a2enmod.

En marge de Apache, PHP possède lui aussi son fichier de configuration, souvent /etc/php.ini. Il n’est pas particulièrement 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 dû être installé à part), par la présence de extension=mysql.so.

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.

/etc/init.d/apache2 restart
Apache
La plume, symbole d'Apache
Plan
  1. Installer Apache
  2. Ajouter le support de PHP
  3. Ajouter le support d’une base de données
  4. Gérer plusieurs sites sur une même machine
  5. Serveurs virtuels
  6. Permettre la connexion sécurisée au serveur (https)
  7. Configurer les répertoires utilisateurs (public_html)
  8. Permettre la ré-écriture d’URL
  9. Fichier .htaccess
  10. Common Gateway Interface
Modifier ce modèle

Principe

Pour protéger un répertoire en particulier (et ses sous-répertoires), il suffit de placer un fichier nommé .htaccess dedans. Apache appliquera instantanément ensuite les règles qu’il contient, uniquement dans cette arborescence.

link={{{link}}}

Attention !

L’explorer de Windows ne permet pas de rebaptiser des fichiers commençant par des points, il faut donc passer par un éditeur de texte.

Par exemple, pour interdire de visualiser les fichiers d’un répertoire qui n’a pas d’index (ex : .html, .php), ajouter le code : Options -Indexes.

Protection par provenance

De nombreux robots tentent quotidiennement de pirater des bases de données (par exemple via PhpMyAdmin). Pour s’en prémunir on peut n’autoriser que deux IP à lire ce répertoire :

deny from all
allow from 127.0.0.1
allow from 127.0.0.2

Si les plages d’autorisation chevauchent celles d’interdiction, il est possible de préciser leur précédence (l’ordre des lignes dans le fichier ne change rien) :

order allow, deny 
commence par les autorisation puis démarre les interdictions au risque d’interdire ce qui était autorisé.
order deny, allow 
le contraire est moins restrictif.

Protection par mot de passe

Configuration de l’authentification

Il est impératif que la modification des paramètres d’authentification soit autorisée dans la configuration d’Apache.

Il faut que la directive AllowOverride [archive] d’un répertoire parent contienne l’option AuthConfig.

Les directives à placer dans le .htaccess sont les suivantes :

AuthType basic 
type d’authentification communément adopté mais peu sécurisé
AuthName "Mon message" 
affichera le texte comme invite dans la boîte de dialogue
AuthUserFile /etc/apache2/my_passwd 
indique où vont se trouver les mots de passe
Require valid-user 
précise qu’il faut un compte dans le fichier de mots de passe pour accéder au répertoire

On peut aussi utiliser Require user toto sasa pour n’autoriser que les comptes toto et sasa.

Le type d’authentification basic fait circuler les mots de passe en clair. Il existe d’autres types plus sécurisés comme digest, qu’il est recommandé de combiner à HTTPS. Voir l’article sur wikipédia pour plus de détails sur le fonctionnement.

La première requête adressée à ce répertoire protégé provoquera l’affichage d’une boîte de dialogue par laquelle l’utilisateur devra s’identifier (nom et mot de passe) :

  • Si le mot de passe saisi est invalide, la boite de dialogue s’affichera de nouveau.
  • S’il est valide, le navigateur l’enregistre et ne le demandera plus.

Il faudra relancer le navigateur pour qu’il le demande de nouveau.

Fichier de mots de passe

Pour créer un fichier stockant les mots de passe permettant de lire un site, nommé /etc/apache2/default-passwd avec comme 1er utilisateur toto, on utilisera la commande

htpasswd -c /home/user/www/.htpasswd toto

Pour ajouter ou modifier un utilisateur à un fichier de mots de passe existant :

htpasswd /home/user/www/.htpasswd sasa

Pour que le .htaccess active le .htpasswd, y ajouter les directives :

AuthName "Page protégée"
AuthType Basic
AuthUserFile "/home/user/www/.htpasswd"
Require valid-user
link={{{link}}}Attention !

Cette protection ne tient pas compte des robots qui essaient tous les mots de passe un par un. Il convient donc de l’utiliser en complément d’un bon pare-feu (ex : iptables).

Redirections

La syntaxe est la même que dans le fichier de configuration générale d’Apache, sauf que cela n’affectera que le répertoire du fichier .htaccess.

Problèmes connus

Si le .htaccess ne produit aucune redirection, vérifier que le module Apache est bien activé :

 a2enmod rewrite

Et que la directive suivante figure au moins dans un répertoire parent du .htaccess :

AllowOverride All

Puis relancer Apache.

Serveurs virtuels (virtual hosts)

Principe

Apache peut gérer plusieurs sites web simultanément. Ils seront tous accessibles à partir de la même adresse IP et du même port.

Pour les différencier, Apache se sert de l’adresse demandée par le navigateur.

Par exemple si site1.com et site2.com pointent sur la même adresse IP, les URL http://site1.com/ et http://site2.com/ aboutiront sur le même serveur.

Mais au moment de la requête, le navigateur précise qu’il a demandé l’adresse http://site1.com/ ou http://site2.com/.

Apache se sert de cette information pour savoir quel site afficher. On parle de serveur virtuel ou virtual host.

Pour indiquer à Apache quel site correspond à un nom de domaine, on utilise une section <VirtualHost *>. Sous Debian, il y a généralement un fichier par section VirtualHost dans le répertoire /etc/apache2/sites-available.

La section devra contenir une directive ServerName [archive] qui indiquera le nom associé à ce serveur virtuel.

Elle pourra également contenir une directive ServerAlias [archive] si on veut que d’autres noms aboutissent à ce site.

Par exemple :

  • En Windows éditer C:\Program Files (x86)\EasyPHP\binaries\conf_files\httpd.conf
  • En Unix-like : /etc/apache2/httpd.conf
<VirtualHost MonIP:MonPort>
  ServerAdmin admin@site1.com
  DocumentRoot /home/site1/racine
  ServerName site1.com
  ServerAlias www.site1.com
  AccessLog /home/site1/access.log
  ErrorLog /home/site1/error.log
  <Directory /home/site1/racine>
    AllowOverride All
  </Directory>
</VirtualHost>

Pour affecter tous les sites et ports, remplacer ceux-ci dans la première balise par *.

En cas d’erreur Apache d’ajouter une « directive » lors de sa relance, ajouter une ligne NameVirtualHost MonIP:MonPort.

La documentation d’Apache sur les serveurs virtuels [archive] contient des informations détaillées sur le sujet.

Pour que ce serveur virtuel fonctionne, il est impératif que les noms site1.com et www.site1.com soient connus par la machine qui tente d’y accéder (celle qui lance le navigateur).

Pour cela il y a plusieurs méthodes :

  • acheter le nom de domaine en question et le configurer pour qu’il pointe sur la bonne adresse IP
  • utiliser un serveur DNS qui renverra la bonne IP pour ce domaine
  • modifier le fichier hosts sur la machine cliente pour faire correspondre ce domaine à la bonne adresse IP (voir le livre Installation et configuration d’une carte réseau)

Problèmes connus

Les problèmes suivants peuvent survenir lors des relances Apache.

Invalid command 'SuexecUserGroup'

La directive SuexecUserGroup précise les permissions des internautes dans le système de fichier. Toutefois elle n’est pas installée par défaut :

apt-get install apache2-suexec
a2enmod suexec

apache2: bad user name Utilisateur1

Un utilisateur Unix appelé dans la configuration n’existe pas. Il faut donc le créer :

useradd Utilisateur1

apache2: bad group name Groupe1

Un groupe Unix appelé dans la configuration n’existe pas. Il faut donc le créer :

groupeadd Groupe1

No such file or directory:Cannot access directory '/etc/apache2/logs/'Configuration check failed

Un répertoire Unix appelé dans la configuration n’existe pas. Il faut donc le créer :

mkdir /etc/apache2/logs

exit signal Segmentation fault (11)

Cela peut survenir quand PHP rencontre une erreur. Pour la connaitre précisément, il faut lancer le script en shell (sans Apache). Exemple :

su www-data

php5 -q SendMail.php
  SMTP Error: Could not connect to SMTP host.

# Ou encore en écrivant le script sans .php :
php5 -r "chown('/home/Compte2', 'Compte1');"
  PHP Warning:  chown(): Operation not permitted in Command line code on line 1
# Vérification en shell
chown Compte1 /home/Compte2
  chown: modification du propriétaire de «/home/Compte2»: Opération non permise

Exemples de configuration

Voici quelques exemples de configuration. L’ensemble des directives possibles peut être consulté ici : http://httpd.apache.org/docs/2.2/mod/directives.html

Pensez que les directives doivent parfois se trouver dans apache2.conf, parfois dans le contexte VirtualHost d’un site donné.

ServerType

ServerType standalone

Cette ligne indique si le serveur Apache se lance en ‘autonome’ (standalone) ou via inetd (TCP_WRAPPER). Pour la plupart des configuration, c’est en standalone. Cette directive a disparu de Apache2, qui dispose d’un autre moyen pour définir cela. Le comportement est en fait choisi d’après le MTM (Multi-processing module) choisi.

ServerRoot

ServerRoot /etc/apache2

(config serveur uniquement, pas dans un VirtualHost)

Vous indiquez ici le répertoire d’installation d’Apache. Normalement les scripts d’installation ont bien renseigné cette ligne. Vérifiez quand même.

LockFile

LockFile /var/run/httpd.lock

(config serveur uniquement, pas dans un VirtualHost)

Laissez cette ligne comme elle est, c’est à dire en commenté pour 90% des cas (# devant).

PidFile

PidFile /var/run/httpd.pid

(config serveur uniquement, pas dans un VirtualHost)

Vérifiez bien que cette ligne est décommentée. Elle indique au script de démarrage d’enregistrer le numéro de processus d’Apache pour que lors de l’arrêt du système le processus Apache soit stoppé correctement.

ScoreBoardFile

ScoreBoardFile /var/run/httpd.scoreboard

(config serveur uniquement, pas dans un VirtualHost)

Ce fichier stocke des informations pour le bon fonctionnement d’Apache.

Timeout

Timeout 300

(config serveur uniquement, pas dans un VirtualHost)

Temps en secondes avant que le serveur n’envoie ou ne reçoive un timeout . Quand le serveur attend une « réponse » (ex : script CGI, connexion\ldots), si au bout de ce temps, il ne reçoit pas de réponse, il va s’interrompre et prévenir l’utilisateur de l’erreur. Laissez cette valeur par défaut à moins que vous n’effectuiez des traitements dépassant cette limite. Ne pas monter trop haut cette valeur non plus car si le programme externe à « planté », ou si une erreur est survenue, vous risquez de rendre inaccessible le serveur Apache pour trop de temps (il est toujours désagréable d’attendre pour rien).

KeepAlive

KeepAlive on

Autorise ou non les connexions persistantes (plusieurs requêtes par connexions). En fait cela permet aux utilisateurs de votre serveur de lancer plusieurs requêtes à la fois, et donc d’accélérer les réponses du serveur. Laissez cette valeur par défaut la plupart du temps. Pour de petits serveurs laissez cette option sur on . Pour un serveur très sollicité, dès que vous vous apercevez que le système ralentit énormément ou devient indisponible assez souvent, essayez avec la valeur off . Mais avant, essayez de baisser la valeur de l’option suivante.

MaxKeepAliveRequests

MaxKeepAliveRequests 100

En combinaison avec l’option précédente, indique le nombre de requêtes pour une connexion. Laissez cette valeur assez haute pour de très bonnes performances. Si vous mettez 0 comme valeur, vous en autorisez en fait un nombre illimité (attention donc). Laissez la valeur par défaut là aussi.

KeepAliveTimeout

KeepAliveTimeout 15

Valeur d’attente en secondes avant la requête suivante d’un même client, sur une même connexion, avant de renvoyer un timeout. Là aussi laisser la valeur par défaut.

MinSpareServers & MaxSpareServer

MinSpareServers 5
MaxSpareServer 10

(config serveur uniquement, pas dans un VirtualHost)

Ces valeurs servent à l’auto-régulation de charge du serveur. En fait le serveur Apache contrôle lui même sa charge, suivant le nombre de clients qu’il sert et le nombre de requêtes que demandent chaque client. Il fait en sorte que tout le monde puisse être servi et ajoute tout seul un certain nombre d’instances Apaches « idle », c’est-à-dire qui ne font rien, mais sont prêtes à servir de nouveaux clients qui se connecteraient. Si ce nombre est inférieur à MinSpareServers il en ajoute une (ou plusieurs). Si ce nombre dépasse la valeur de MaxSpareServer il en arrête une (ou plusieurs). Ces valeurs par défaut conviennent à la plupart des sites.

Listen

Listen 3000
Listen 12.34.56.78
Listen 12.34.56.78:3000

Indique au serveur des ports ou des adresses IP (il y en a une par interface réseau du serveur!), ou les deux, où il doit « écouter » les demandes de connexions, EN PLUS de l’adresse et port par défaut. Voir la directive VirtualHost plus loin.

BindAdress

BindAdress *

Redondant avec Listen, cela permet de spécifier des adresses IP d’interfaces réseau, pour écouter les requêtes. Cette directive a disparu dans Apache 2.

Port

Port 80

Redondant avec Listen, cela permet de spécifier le port d’écoute (80 par défaut). Cette directive a disparu dans Apache 2.

LoadModule, ClearModuleList & AddModule

LoadModule xxxxxx.mod libexec/yyyyyy.so
ClearModuleList
AddModule zzzz.c

(config serveur uniquement, pas dans un VirtualHost)

Support pour les modules DSO (Dynamic Shared Object). LoadModule permet de charger un module. Avant Apache 2, les directives ClearModuleList et AddModule permettaient de spécifier l’ordre d’exécution des modules, à cause de problèmes de dépendances. Apache 2 peut maintenant faire cela automatiquement, car les APIs de modules leur permet de spécifier eux-mêmes leur ordre. Sous Apache 1.*, il faut cependant y prêter une grande attention, et le maintenir à jour à l’ajout de tout nouveau module.

ExtendedStatus

ExtendedStatus on

(config serveur uniquement, pas dans un VirtualHost)

Indique si le serveur doit renvoyer des informations complètes de status (on ) ou des informations réduites (off ). off par défaut. Laissez cette valeur par défaut sauf en cas de développement et de debuggage.

User & Group

User nobody
Group nobody

Une fois le serveur démarré, il serait dangereux de lui laisser les droits root pour répondre aux requêtes. Il est donc possible de modifier l’utiliseur et le groupe du processus pour lui donner un minimum de droits sur la machine du serveur. (En fait si quelqu’un arrive à « exploiter » votre serveur, par exemple s’il arrive a faire exécuter du code par le serveur Apache, il hérite des droits du serveur lui même. Donc si c’est nobody il n’a aucun droit spécifique. Si c’est root ou un utilisateur réel, il aura alors des droits lui permettant d’endommager votre système.)

ServerAdmin

ServerAdmin root@localhost.domainname

Adresse e-mail de l’administrateur du site. Cette adresse est affichée par le serveur par exemple en cas d’erreur, pour que les utilisateurs puissent en avertir l’administrateur.

ServerName

ServerName www.domainname

Adresse que le serveur va renvoyer au client web. Il est préférable de mettre une adresse résolue par DNS au lieu du nom de la machine réelle, pour que les visiteurs ne voient pas le nom réel de votre machine (utile pour la sécurité aussi).

DocumentRoot

DocumentRoot /var/lib/apache/htdocs

Répertoire racine ou se trouve vos pages Web.

Directory

<Directory /var/lib/apache/htdocs>
  Options Indexes FollowSymlinks Multiviews
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Change les paramètres du repertoire /var/lib/apache/htdocs. On peut placer à l’intérieur les directives suivantes :

Options

on définit les options pour ce répertoire. Les options possibles sont les suivantes :

None Désactive toutes les options.
All Active toutes les options SAUF Multiviews.
Indexes Permet aux utilisateurs d’avoir des indexs généré par le serveur.C’est à dire si l’index du répertoire (index.html le + souvent) est manquant, cela autorise le serveur a lister le contenu du répertoire (dangereux suivant les fichiers contenu dans ce répertoire).
FollowSymLinks Autorise a suivre les liens symboliques.
ExecCGI Autorise à exécuter des scripts CGI à partir de ce répertoire.
Includes Autorise des fichiers include pour le serveur.
IncludesNOEXEC Permet mais les includes mais empêche la commande EXEC (qui permet d’executer du code).
MultiViews Autorise les vue multiples suivant un contexte.Par exemple permet d’afficher les pages dans un language suivant la configuration du language du client.
SymLinksIfOwnerMatch Autorise a suivre les liens seulement si l’user ID du fichier (ou répertoire) sur lequel le lien pointe est le même que celui du lien.
AllowOverride

définit comment sont gérés les fichiers .htaccess de ce répertoire :

All Gère tout ce qui est dans .htaccess
AuthConfig Active les directives d’autorisations AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, etc.
FileInfo Active les directives contrôlant le type de document (ErrorDocument, LanguagePriority, etc.)
Limit Active la directive d’autorisation Limit
None Ne lit pas le fichier .htaccess et laisse les droits « Linux » de ce répertoire.
Options Active la directive Option
Order

Donne l’ordre d’application des règles Allow/Deny  :

deny,allow Si le client ne correspond à aucune règle deny , mais correspond à une règle allow , alors on autorise (allow par défaut).
allow,deny Si le client ne correspond à aucune règle allow , mais correspond à une règle deny , on interdit (deny par defaut).\hline
Allow/Deny
Nom d’hôte Autorise/Refuse les hôtes spécifié, les adresses IP, le nom de domaine, etc…
All Autorise/Refuse tout le monde

A vous de placer vos règles suivant le contenu de vos répertoire accessibles par le Web. Il existe les mêmes règles pour les fichiers (<Files> </Files>) et les locations (<Location> </Location>). Voir un exemple pour les fichiers (file) plus bas.

DirectoryIndex

DirectoryIndex index.html index.htm index.php index.php5

Indique le ou les fichiers à charger lorsqu’on accède à un répertoire sans préciser de fichier. Dans cet exemple, si on accède à http://example.com/repertoire/, Apache cherchera un des fichiers mentionnés (index.html, index.htm…) et s’il en trouve un il l’affichera. S’il n’en trouve pas, il affichera la liste des fichiers ou interdira l’accès (suivant la présence ou non de l’option Indexes sur le répertoire).

AccessFileName

AccessFileName .htaccess

Nom du fichier des règles d’accès pour les règles AllowOverride. Un conseil: placez comme vu précédemment une règle file du style:

<Files .ht*>     #pour interdire aux visiteurs de voir le contenu des Order allow,deny
                 #fichiers .ht qui contiennent les règles de
  Deny from all  #sécurité.
</Files>

CacheNegotiatedDocs

#CacheNegotiatedDocs

Autorise ou pas les proxies à mettre en cache les documents (pour autoriser, enlevez le commentaire # en début de ligne)

UseCanonicalName

UseCanonicalName On

Placé sur on , réécrit l’URL par rapport aux valeurs Server et Port spécifiées plus haut dans le fichier httpd.conf.

Sur off , l’URL reste celle donnée par le client.

Attention, mettez sur on si vous utilisez des CGI avec des variables SERVER_NAME, car si l’URL du client n’est pas la même que celle du CGI, votre script CGI ne marchera pas.

DefaultType

DefaultType text/plain

Type mime par défaut que le serveur renvoie au clients. Convient dans la plupart des cas.

HostNameLookups

HostNameLookups off

Sur on , le serveur le nom du client grâce à une requête DNS inverse. Sinon, il se contente de l’adresse IP, ce qui génère beaucoup moins de trafic réseau.

ErrorLog

ErrorLog /var/log/error_log

Chemin complet du fichier où les erreurs seront enregistrées.

LogLevel

LogLevel warn

Niveau d’enregistrement des erreurs avec comme valeurs possibles, par ordre décroissant d’importance, donc croissant en bavardage:

emerg urgence : le serveur devient inutilisable
alert une intervention est nécessaire
crit erreurs critiques (accès réseau impossible par exemple)
error les erreurs dans les pages, scripts
warn les erreurs non bloquantes (pages mal codées, scripts comportant des erreurs non blocantes…
notice événement normal mais méritant d’être remarqué
info informations utiles (comme « serveur très chargé »)
debug Enregistre TOUT ce qui peut se passer sur le serveur

Le niveau crit est le minimum recommandé, et on monte généralement à warn.

ServerSignature

ServerSignature on
on ajoute la signature (version, OS…) du serveur lorsqu’il génère des pages lui-même (index manquant, erreur de script, etc.)
off ne montre que l’erreur.
email ajoute un lien vers l’email définit par ServerAdmin

Alias

Alias faux_nom nom_réel

permet de faire des alias de répertoires (des liens en quelque sorte) (similaire à ScriptAlias /cgi-bin chemin_complet_des_cgi

AddType

AddType type extensions

(sous Apache2, cette directive devrait être dans un fichier mods-availabe/nom_module.conf, au lieu de apache2.conf)

Spécifie que des fichiers utilisant de telles extensions sont du type précisé. Cela permet de décider quoi en faire. Pour ajouter le support PHP, le fichier mods-enabled/php5.conf contient par exemple :

  AddType application/x-httpd-php .php .phtml .php3
  AddType application/x-httpd-php-source .phps

AddHandler

AddHandler cgi-script .cgi

Pour utiliser les scripts CGI.

 

http://wiki.uniformserver.com/index.php/CGI:_VBScript_CGI

 

Print Friendly, PDF & Email

Related Post

Categories: Logiciel Tags: , ,
Les commentaires sont fermés.