Apache

De UnixManiax
Aller à la navigation Aller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.


Présentation

Apache est le serveur web le plus utilisé dans le monde. Les explications qui suivent dans cette page fonctionne sous linux et BSD avec les versions d'apache 2.x. Une bonne partie doit aussi fonctionner avec apache 1.3. C'est aussi probablement la même chose sous windows, mais je n'ai jamais essayé dessus.

Gestion du démon (arrêt, démarrage et autres)

Les différentes méthodes d'arrêt/relance du démon sont les suivantes :

  • /etc/init.d/httpd stop|start|restart : sous redhat et équivalents
  • /etc/init.d/apache stop|start|restart : sous debian et équivalents
  • apachectl stop|start|restart : partout (en root)


Il existe de nombreuses options au daemon. Les plus courantes sont :

stop, start, restart sans commentaire
status affiche l'état du serveur. Nécessite mod_status et un navigateur web mode texte (comme lynx)
fullstatus idem, sans la liste des requêtes en cours
gracefull ou reload recharge le fichier de config, sans arrêter le serveur
gracefull-stop arrête proprement apache, en attendant que les connexions actives s'arrêtent, contrairement à stop qui arrête tout, tout de suite
configtest teste les fichiers de configuration

Pour les autres, il faut lire le man.

Configuration

les fichiers de configuration

Il existe quelques petites différences entre apache 1.x et 2.x :

  • apache 1.x : tout est dans httpd.conf
  • apache 2.x : on peut tout mettre dans httpd.conf, ou alors externaliser une partie de la conf dans d'autres fichiers (par exemple pour les vhosts), et faire un Include dans httpd.conf pour qu'il aille lire ces autres fichiers (exemple dans httpd.conf : Include conf/vhosts/*.conf)


structure des fichiers de configuration

On peut considérer que httpd.conf contient trois parties principales :

  • la configuration des serveurs (principal ou vhosts)

ex : ServerName, ErrorLog, DocumentRoot, Alias

  • la configuration des répertoires (c'est en fait une sous-partie de la configuration des serveurs). Elle est dans une balise <Directory>.

ex : Option Indexes, AllowOverride

  • la configuration d'apache lui-même

ex : modules


configuration des serveurs (principal ou virtuels)

Les principales lignes à configurer concernant les serveurs (dans httpd.conf ou dans les fichiers de conf des virtuels), sont :

ServerName Nom le nom du serveur. En prod, ne jamais laisser le hostname du serveur (pour une raison de sécurité), mais mettre www.site-web.com, et configurer le DNS pour qu'il fasse pointer le nom vers ce serveur
ErrorLog Répertoire répertoire d'enregistrement des logs
ServerRoot Répertoire répertoire de base du serveur
DirectoryIndex Page_web pages par défaut d'apache pour chaque répertoire (en général index.html)
Timeout Duree_en_secondes durée du timeout
KeepAlive on (ou off) accepter plus d'une requête par connexion
MaxKeepAliveRequests Nombre nombre max de requête par connexion (0 pour illimité)
KeepAliveTimeout Duree_en_secondes nb de secondes à attendre pour la requête suivante pour la même connexion
Alias /test/ "/var/www/test/" http://nom_serveur/test pointe sur /var/www/test/


configuration des répertoires des serveurs

La configuration des répertoires se fait entre des balises <Directory> et </Directory>. Par exemple :

Alias "/test" "/var/www/test"
<Directory "/var/www/test">
    AllowOverride None
    DirectoryIndex test.html
    Options Indexes FollowSymLinks
    <IfModule mod_autoindex.c>
      IndexOptions NameWidth=*
    </ifModule>
</Directory>

Voici les options les plus intéressantes :

AllowOverride None inhibe l'action de .htaccess, mettre All sinon (d'autres options sont possibles)
DirectoryIndex test.html page affichée quand on se connecte au répertoire
Order allow,deny
Allow from 192.168.1.
Deny from all
lit d'abord la liste Allow puis Deny

autorise tout le réseau 192.168.1.* et rejette le reste. On peut egalement mettre "Allow 192.168.1." sans le "from". Pour mettre plusieurs ips, on les sépare par des espaces.

Options FollowSymLinks suivre les liens symboliques
Options Indexes permet de lister le répertoire (mettre -Indexes sinon) (voir remarque 2 ci-dessous)
Options Includes permet d'inclure des fichiers (nécessite mod_include)
Options IncludeNOEXEC idem, mais interdit l'exécution de scripts
Options ExecCGI permet d'exécuter des scripts CGI (bien charger les modules adéquats, exemple mod_perl pour perl)
Options None aucune option


Remarque 1 : les options peuvent se mettre sur une seule ligne en les séparant par des espaces. Exemple : "Options FollowSymLinks Indexes"

Remarque 2 : concernant Indexes, si on ne précise rien, les noms des fichiers seront tronqués à quelques caractères, ce qui n'est pas très lisible. Il est donc préférable de l'utiliser comme suit :

Options Indexes
<IfModule mod_autoindex.c>
  IndexOptions NameWidth=*
</ifModule>

configuration spécifique au démon apache lui-même

Dans la configuration du démon, on retrouve la configuration des modules. Je vous renvoie sur la section dédiée aux modules pour plus d'infos. Sinon, les autres lignes intéressantes sont :

LockFile Fichier fichier en local, sert uniquement si ServerRoot est un montage sur le réseau
PidFile Fichier fichier contenant le pid d'apache
User Nom_utilisateur user sous lequel tournera apache (ne jamais mettre root, pour une question de sécurité)
Group Nom_groupe groupe sous lequel tournera apache (ne jamais mettre root, pour une question de sécurité)
StartServers Nombre nombre de processus serveur à démarrer au lancement d'apache
MaxClients Nombre nombre max de clients simultanés
Listen Nombre port d'écoute d'apache (par défaut 80). On peut en ajouter plusieurs, ou des ips

configuration des serveurs virtuels

Voici un exemple de configuration :

soit on dispose d'adresses ip (adressage par ip), soit on met une * (adressage par résolution de nom) et le serveur se débrouille en fonction de l'url (il faut faire pointer les adresses DNS vers le même serveur) :

<VirtualHost 192.168.0.11> ou <VirtualHost *> ou <VirtualHost*:80> 						
    ServerName "www.exemple.com" 						
    DocumentRoot "/www/main" 						
    ServerAlias site.com *.site.com		# permet un alias de nom 						
</VirtualHost> 						

<VirtualHost 192.168.0.12> ou <VirtualHost *> 						
    ServerName "www.support.exemple.com" 						
    DocumentRoot "/www/support" 						
</VirtualHost>

Remarque : On peut avoir un hôte virtuel par défaut avec la directive <VirtualHost_default>.

personnalisation des pages d'erreur

Il faut rajouter une directive ErrorDocument dans le fichier de conf du serveur.

Syntaxe :

ErrorDocument NumeroErreur Lien_ou_Message

exemples :

ErrorDocument 404 "Page non trouvée" 					
ErrorDocument 500 http://www.exemple.com 					
ErrorDocument 401 /repertoire/page_erreur.html

protéger des pages et répertoires

Dans ce chapitre, nous allons voir les différentes étapes pour protéger les pages contenues dans /var/www/test/ et ses sous-répertoires.


1. créer un fichier mot de passes (vide pour l'instant), par exemple /var/www/.htpasswd

2. éditer le fichier de la forme :

fred:gWK3udIcGH832 					
bob:BgG6vsQflVS66

Ce fichier doit contenir les mots de passe sous forme cryptée uniquement. Pour le créer, il faut d'abord mettre n'importe quoi à la place du mot de passe.

Exemple :

fred:blabla 					
bob:bob

Puis, pour les crypter, on va taper "htpasswd -b /var/www/.htpasswd bob mot-de-passe en clair". Maintenant, le mot de passe de bob sera crypté. Il faut faire pareil avec tous les comptes. Si on ne veut pas que le mot de passe apparaisse en clair sur la ligne de commande, il faut taper "htpasswd /var/www/.htpasswd bob" et il va demander de taper le mot de passe.


3. éditer le fichier /var/www/test/.htaccess et copier dedans :

AuthUserFile /var/www/.htpasswd    # fichier mot de passe 					
AuthGroupFile /dev/null            # idem pour le groupe 					
AuthName "Accés réservé"           # texte qui apparait dans la boite de dialogue 				
AuthType Basic                     # pour lui dire d'utiliser AuthUserFile 					
<Limit GET POST> 					
    Require valid-user             # autorise tous les utilisateurs qui  sont dans .htpasswd. On pourait mettre "Require user fred" pour  n'autoriser que fred 					
</Limit>


4. apachectl reload

les espaces web utilisateurs

Permet l'accès aux urls de type http://serveur/~fred/.

Nécessite le module mod_userdir.c.

Syntaxe :

UserDir enabled

Exemple :

UserDir disabled root bin users	# on active tous les répertoires persos, sauf ceux de root, bin et users.

les modules

charger un module :

LoadModule identifiant	chemin

exemple :

LoadModule cgi_module 					
libexec/httpd/mod_cgi.so

test sur un module :

<IfModule [ ! ] identifiant_module> 					
    [ actions ] 					
</IfModule>

plus de docs (les docs officielles apache)

Les docs officielles apache sont beaucoup plus complètes que cette page. Elles contiennent toutes les directives de configuration, ainsi que les différences entre les versions. Elles sont accessibles ici : http://httpd.apache.org/docs/.

Divers

liste des modules compilés statiquement

httpd -l

modifier la page d'accueil par défaut

Lorsqu'on se connecte sur un serveur Apache sans préciser le répertoire (par exemple http://localhost/), on se retrouve sur une page d'accueil Apache souvant personnalisée pour sa distribution. Si on souhaite avoir une des pages installées comme page d'accueil, il faut ajouter la ligne suivante après la balise <Directory /> :

DirectoryIndex chemin_vers_la_page

Le chemin vers la page est le chemin relatif depuis le répertoire racine d'Apache.

Exemple :

<Directory /> 					
    Options FollowSymLinks 					
    DirectoryIndex mediawiki/index.php 					
    AllowOverride None 					
</Directory>