Présentation Apache
PS - V 1.3 — ps 2022/04/15 00:30
Le protocole HTTP - Rappels
http : Hyper Text Transfer Protocol : Protocole de transfert des fichiers HTML.
C'est le protocole utilisé pour le WWW. Il utilise une connexion fiable TCP sur le port 80 ou 443 pour la version sécurisée HTTPS..
- Le Web statique : page HTML au sens propre (fichier .html)
- Le Web dynamique : pages générées au vol par des programmes (CGI, php, perl, python, ASP, Java, …) à partir de données fournies par le client ou par le système
Le protocole HTTP - Commandes -1
- GET : la méthode la plus courante pour demander une ressource. Une requête GET est sans effet sur la ressource, il doit être possible de répéter la requête sans effet.
- HEAD : Cette méthode ne demande que des informations sur la ressource, sans demander la ressource elle-même.
- POST : Cette méthode doit être utilisée pour ajouter une nouvelle ressource.
Le protocole HTTP - Commandes - 2
- OPTIONS : Cette méthode permet d'obtenir les options de communication d'une ressource ou du serveur en général.
- CONNECT : Cette méthode permet d'utiliser un proxy comme un tunnel de communication.
- TRACE : Cette méthode demande au serveur de retourner ce qu'il a reçu, dans le but de tester et effectuer un diagnostic sur la connexion.
- PUT : Cette méthode permet de remplacer ou d'ajouter une ressource sur le serveur.
- DELETE : Cette méthode permet de supprimer une ressource du serveur.
Le protocole HTTP - Codes de retour
- 1xx: Information – Requête reçue, le traitement suit.
- 2xx: Succès
- 3xx: Redirection – Action à suivre
- 4xx: Erreur client – (404, 403, …) Mauvaise requête ou erreur de syntaxe
- 5xx: Erreur serveur
Les serveurs Web - Etat des lieux
En décembre 2015, les parts de marché étaient les suivantes (source Netcraft) pour 760 M de serveurs Web:
Serveur | Pourcentage |
---|---|
Apache | 37 % |
Microsoft IIS | 27 % |
Nginx | 17 % |
Google Web Server | 2 % |
Apache - Présentation
Il offre toutes les fonctionnalités que l'on peut attendre d'un serveur Web :
- Rapidité : Apache peut servir 500 connexions par seconde en moyenne ;
- très modulaire
- Interfaçage avec PHP, Perl, Python et Ruby pour la construction de sites web dynamiques ;
- Gestion du protocole HTTP/1.1 et HTTP/2;
- Exécution des scripts CGI ;
- permet les domaines virtuels sur une même machine (hébergeurs);
- assure le fonctionnement en tant que mandataire (serveur Proxy) ;
- Sites Web sécurisés par SSL..
- Utilisation de Server-Side Include (SSI) pour construire un site Web cohérent ;
Apache - Les plate-formes
Apache s'installe sur les plate-formes suivantes :
- tous les Unix (BSD, LInux, Solaris , AIX, HP-UX, Irix, …)
- Microsoft Windows XP/7/8/10… etc
- OS/400
- Mac OS
Apache - Historique
- La programmation d'Apache est centralisée par The Apache Group.
- premières versions élaborées à partir du NCSA httpd, en 1995 (seule implémentation d'un serveur Web)
- nom : de la prononciation anglaise d'Apache, « eupatchi », semblable à celle de « a patchy », c'est à dire « couvert de rustines »
- succès rapide, devient dès 1996 le plus employé sur Internet.
- à l'heure actuelle, version stable : 2.4 (Debian Wheezy : 2.2.16, Jessie : 2.4) de nombreux serveurs encore en production avec les versions 1.3.xx ou 2.0 .
Apache - Les concurrents
- Microsoft IIS : le serveur de base de Microsoft (architecture .net et ASP)
- NGINX : rapide, plus en plus utilisé - fonctionnement asynchrone - proxy-inverse
- Lighthttpd : empreinte mémoire très légère
- caddy pour le développent et les tests …
Apache - Les modules
la commande apt list 'libapache2-mod*'|wc -l
donne 78 noms de paquets !
Il permettent :
- l'authentification,
- la gestion de contenu,
- les accès aux différents langages (php, mod_perl, python …)
- les accès aux annuaires (LDAP, …)
- proxy-cache (direct ou inverse)
- la gestion des logs dans des bases SQL…
- …
Apache - Installation
Sur Debian : aptitude install apache2
Apache - Les modules usuels
On installe habituellement les modules suivants :
- php, php-gd
- pour les bases de données Mysql/Mariadb : mariadb-server et php-mysql
- pour les bases de données Postgresql : postgresql
Apache - Lancement/démarrage
- sur Debian/Ubuntu
systemctl <start|stop|restart|reload|status> apache2
ou bien
apache2ctl start|stop|restart|reload|status
Apache - La configuration
- stockage des éléments de configuration dans /etc/apache2/apache.conf (debian)
- Informations générales
- ServerAdmin adresse : adresse du webmaster.
- LogLevel niveau permet de définir le niveau d'erreur pour le démon syslog
- Log fichier permet de préciser le fichier de log
- StartServers définit le nombre de serveurs lancés au démarrage.
- MinSpareServers définit le nombre de serveurs qui doivent résider en mémoire, en attente de connexions.
- MaxSpareServers désigne le nombre maximal de serveurs en attente de connexion.
- MaxClients définit le nombre maximal de connexions acceptées, au-delà duquel le serveur renvoie un message d'erreur.
Organisation des répertoires
- DocumentRoot /repertoire indique le répertoire racine du serveur, où sont stockés les documents par défaut (/var/www/apache2-default sur Debian)
- UserDir repertoire permet d'autoriser les utilisateurs disposant d'un compte sur la machine à publier des fichiers. Il suffit qu'ils créent un dossier de ce nom dans leur répertoire personnel pour le rendre accessible par l'URL http://machine/~utilisateur/
- habituellement, on utilise UserDir /home/*/public_html
- DirectoryIndex fichier1 fichier2… contient le(s) nom(s) de fichier que le serveur doit considérer comme des « pages d'accueil » et qu'il doit afficher lorsqu'un navigateur demande le contenu d'un répertoire .
- Ex : DirectoryIndex index.html index.php index.htm
Configuration des accès
- Redirect fichier url permet de rediriger les requêtes HTTP.
- ex : Redirect pasla http://www.ailleurs.com renvoie le navigateur vers le site www.ailleurs.com.
- Alias origine destination permet d'inclure le contenu de répertoires se trouvant en dehors de la racine utilisée par le serveur ou de simplifier leur accès
- Ex: Alias /doc /usr/share/doc
- ErrorDocument numero fichier permet de faire afficher un fichier spécifique pour chaque type d'erreur. Cela permet de personnaliser les fichiers d'erreurs standards.
Apache - La configuration Debian/Ubuntu
- le fichier de configuration principal est /etc/apache2/apache.conf. contient les paramètres généraux et communs à tous les serveurs et plusieurs “Include” vers les autres fichiers.
- le fichier de configuration /etc/apache2/ports.conf contient la liste des ports en écoute.
- les fichiers concernant les modules sont dans le répertoire /etc/apache2/mods-available/
- qui contient 2 catégories de fichiers : *.load et *.conf
- les fichiers .load indiquent les modules à charger
- les fichier .conf contiennent la configuration de chaque module
- on active/désactive un module avec la commande a2enmod/a2dismod <module> en n'oubliant pas de relancer apache
La configuration Debian/Ubuntu - Les sites
- de la même manière que pour les modules, on peut activer/désactiver des sites avec a2ensite/a2dissite <site>
- un site est caractérisé par un fichier situé dans /etc/apache2/sites-available, lors de son activation , un lien symbolique est créé dans /etc/apache2/sites-enabled
- ce type de configuration permet d'activer/désactiver facilement des sites sans changer le fichier de configuration principal
- on pourra se baser sur le fichier /etc/apache2/sites-availables/default pour en créer un nouveau
Apache - Les sites virtuels
Apache permet de mettre en oeuvre des sites virtuels permettant d'héberger plusieurs sites sur un même serveur web y compris avec une seule adresse IP
NameVirtualHost www.domaine1.fr <VirtualHost *:80> ServerAdmin webmestre@domaine1.fr DocumentRoot /var/www/domaine1.fr/ ServerName www.domaine1.fr ErrorLog /var/log/apache2/domaine1.fr/error.log TransferLog /var/log/apache2/domaine1.fr/access.log </VirtualHost>
Apache - Le contrôle d'accès
Il permet de restreindre l'accès au site à des machines ou à des blocs d'adresse grâce aux directives allow et deny. On pourra utiliser la directiveall, des adresses, des noms de machine ou de domaine et des blocs d'adresse.
<Directory /var/www/mydomain> Order deny,Allow Deny from all Allow from 192.168.0.0 Allow from mondomaine.fr </Directory>
Apache - Authentification
Apache permet d'authentifier les utilisateurs avec plusieurs méthodes :
- basic : le mot de passe circule en clair
- digest : mode de passe chiffré en MD5
Apache - Authentification - 2
On insère le bloc suivant dans le bloc <directory> … </directory> à protéger :
AuthUserFile /chemin/fichiermdp # fichier de mot de passe AuthName Zone reservee # AuthType Basic require valid-user # tout utilisateur reference est autorise
Pour créer ce fichier, on utilise en ligne de commande, l'outil htpasswd -c /chemin/fichiermdp user
Apache - La délégation d'administration
Apache permet de déléguer l'administration aux utilisateurs grâce à la directive Allow Override qui autorise la redéfinition de directives locales à un répertoire dans un fichier .htaccess situé dans ce dernier :
- None : les fichiers .htaccess sont ignorés
- All : tout type de redéfinition est autorisé dans le .htaccess
- AuthConfig : autorise l’authentification d’utilisateurs
- FileInfo : autorise les directives liées aux types de documents
- Indexes : autorise l’indexation des répertoires
- Limit : autorise les directives de gestion d’accès
- ExecCGI : autorise les programmes CGI
- FollowSymLinks : autorise le suivi des liens symboliques rencontrés dans le répertoire
- Options : autorise les directives se rapportant aux fonctionnalités des répertoires
Apache - La sécurité
La sécurité d'un serveur Apache implique de ne laisser à Apache que les droit minimaux pour effectuer sa tâche.
- Le répertoire de configuration /etc/apache2 et ses sous-répertoire ne doivent être accessibles qu'en lecture au démon Apache.
- le répertoires de base des sites web /var/www/…* doivent être accessibles en lecture au démon Apache mais l'écriture doit être limitée aux seuls répertoires qui en ont besoin (répertoires de configuration, caches, données)
- pour ce faire, on pourra utiliser chmod ou chown pour adapter les droits
Apache - Les logs
Pour Debian/Ubuntu, il sont situés dans /var/log/apache2
- access.log : les logs de connexion
77.206.107.114 - - [12/Nov/2013:21:48:27 +0100] "GET /doku/lib/exe/indexer.php?id=diiage_premiere_annee&1384289306 HTTP/1.1" 200 486 "http://82.225.173.248/doku /doku.php?id=diiage_premiere_annee" "Mozilla/5.0 (X11; Linux i686; rv:25.0) Gecko/20100101 Firefox/25.0 Iceweasel/25.0" 77.206.107.114 - - [12/Nov/2013:21:48:39 +0100] "POST /doku/doku.php HTTP/1.1" 200 12922 "http://82.225.173.248/doku/doku.php?id=diiage_premiere_annee" "Mozilla /5.0 (X11; Linux i686; rv:25.0) Gecko/20100101 Firefox/25.0 Iceweasel/25.0"
- error.log : les logs d'erreur
[Mon Nov 11 06:08:41 2013] [error] [client 178.74.49.41] Invalid method in request \x80w\x01\x03\x01 [Mon Nov 11 06:08:41 2013] [error] [client 178.74.49.41] File does not exist: /var/www/HNAP1, referer: http://82.225.173.248/ [Mon Nov 11 07:17:19 2013] [error] [client 211.137.235.145] File does not exist: /var/www/manager http://82.225.173.248/ [Tue Nov 12 08:45:41 2013] [error] [client 10.5.0.46] File does not exist: /var/www/favicon.ico
Apache - Statistiques
De nombreux outils existent pour analyser les logs apache et produire des pages de statistiques :
- awstat : assez riche fonctionellement
- webaliser : couverture fonctionnelle plus limitée
- w3perl
Apache - Outils
Les autres outils :
- ab Apache Benchmark pour évaluer les performances
- apachetop : une commande top permettant de voir les requêtes en cours