Apache
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 :
<Directory "/var/www/test"> AllowOverride None DirectoryIndex test.html Options Indexes </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>