~~SLIDESHOW~~ ====== 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 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 ** 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 ** * 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 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 ===== 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 directive**all**, des adresses, des noms de machine ou de domaine et des blocs d'adresse. Order deny,Allow Deny from all Allow from 192.168.0.0 Allow from mondomaine.fr ===== 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 ** ... ** à 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 ===== Apache - les liens ===== * http://www.apache.org