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.
  • 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

Apache - les liens