05 - Apache

Introduction

Apache est un des serveurs web les plus utilisés au monde.

Il est gratuit, le code source est disponible, des améliorations sont apportés sans cesse, il est modulaire et très stable.

Apache travaille avec les protocoles HTTP et HTTPS.

Le protocole HTTP(S)

HTTP

Une transaction HTTP est composée de plusieurs étape:

  1. Le client envoie une requête au serveur.

  2. Si c’est une page statique, le serveur passe directement au point 6 sinon il exécute un application.

  3. Le serveur exécute l’application.

  4. Le script peut envoyer une ou plusieurs requêtes à une base de données.

  5. Le script prépare sa réponse.

  6. Le serveur prépare sa réponse à envoyer.

  7. Le client peut exécuter un script pour ajouter des fonctionnalités à la page s’il y a lieu.

  8. Le client affiche la réponse.

La requête HTTP

La requête est le message envoyé au serveur par le client (le navigateur).

Une requête HTTP est composé de plusieurs éléments:

  • Une adresse ou URL (Uniform Ressource Locator).

  • Une action, le plus souvent GET ou POST.

  • Les entêtes de la requête: la date, le jeu de caractères supportés…

L’URL (Uniform Ressource Locator)

L’URL est une adresse logique dont le format est:

Protocole://adresse_du_serveur[:port]/[URI][?paramètres[&paramètres[&paramètres[…]]]]

Le protocole: il s’agit de la méthode utilisée pour contacter le serveur. Il peut s’agir de http, https, ftp.

L’adresse du serveur: il peut s’agir du nom du serveur, de son FQDN (Fully Qualified Domain Name), ou d’une adresse IP.

Le port est facultatif. S’il n’y a rien, par défaut ce sera 80 pour http et 443 pour https.

L’URI (Uniform Ressource Identifier) désigne précisément le chemin d’accès et le fichier à lire.

Il est possible d’envoyer des paramètres qui pourront être envoyés au programme sur le serveur web.

Le serveur HTTP, la réponse HTTP

Le serveur envoie une réponse aux requêtes des clients (les navigateurs). Il y a deux possibilités:

  • Ressource statique: il s’agit d’un fichier simple accédé directement par l’URL. Dans ce cas le serveur envoie simplement le contenu du fichier dans sa réponse HTTP.

  • Ressource dynamique: dans ce cas la réponse varie selon plusieurs facteurs. Il faudra donc qu’un programme sur le serveur s’exécute pour pouvoir générer la réponse.

Dans tous les cas la réponse est composée:

  • D’un code de réponse donnant le statut (réussite, échec, cause de l’échec…)

  • Les entêtes de réponse: longueur du message, date…

  • Le corps du message: contenu à proprement parler.

HTTPS

HTTPS est le protocole HTTP encrypté grâce à SSL.

Grâce à un certificat permettant d’identifier le serveur et contenant la clé publique du serveur, des clés de session sont échangés entre le client et le serveur.

Ces clés seront utilisées pour crypter tout le reste de la communication entre le client et le serveur.

Qui génère les clés de session? Le client ou le serveur?

Installation de Apache

Sur Centos :

$ dnf install httpd

Les commandes de gestion du service sont les commandes classiques:

$ systemctl start httpd
$ systemctl stop httpd
$ systemctl status httpd
$ systemctl restart httpd

Pour valider que le serveur Apache fonctionne, ouvrez un navigateur et visiter l’adresse : http://localhost

Lab 1

D’après ce qui est indiqué sur la page que vous venez d’afficher, trouvez le fichier qui est affiché dans la page par défaut.

Créez le fichier index.html dans le bon répertoire et ajoutez y le contenu suvant :

<H1>Cours Linux2</H1>
Bienvenu dans le chapitre Apache du cours Linux2

Affichez ce fichier dans votre navigateur.

Configuration

La configuration se fait à l’aide de plusieurs fichiers de configuration qui se trouvent dans /etc/httpd.

Le premier à regarder est le fichier:/etc/httpd/conf/httpd.conf

La liste des directives acceptées dans Apache se trouve à : http://httpd.apache.org/docs/2.4/fr/mod/directives.html

Toute la documentation se trouva à : http://httpd.apache.org/docs/2.4/fr/

La configuration se divise en trois parties:

  • La configuration globale

  • La configuration du serveur principal

  • La configuration des hôtes virtuels

Configuration globale

Elle se trouve dans /etc/httpd/conf/httpd.conf.

La racine du serveur: répertoire en dessous duquel se trouve toute la configuration.

  • Syntaxe : ServerRoot chemin

  • Défaut : /etc/httpd

Fichier PID: contient le PID (Process ID) du serveur.

  • Syntaxe : PidFile chemin

  • Défaut : /var/run/httpd/httpd.pid

User et Group: utilisateur et groupe sous lesquels roule le serveur Apache.

  • Syntaxe: User|Group [utilisateur]|[groupe]

  • Défaut: apache

Le fichier de log d’erreurs : le fichier dans lequel sont stockés les messages d’erreur.

  • Syntaxe : ErrorLog chemon

  • Défaut : /var/log/httpd/error.log

Les ports d’écoute:

  • Syntaxe : Listen port

  • Défaut 80

D’autres directives sont présentes avec leur description dans le fichier de configuration.

Configuration du serveur principal

Elle se trouve dans /etc/httpd/conf/httpd.conf.

Le nom du serveur : surtout utile dans les hôtes virtuels.

  • Syntaxe : ServerName nom

  • Défaut : aucun

L’emplacement des documents : répertoire dans lequel seront cherchés les documents.

  • Syntaxe : DocumentRoot chemin

  • Défaut : /var/www/html

L’adresse courriel du responsable du serveur.

  • Syntaxe : ServerAdmin adresse

  • Défaut : webmaster@localhost

Il est possible d’ajouter de nouveaux modules comme php simplement en les installant.

La configuration sera automatiquement ajouté à Apache.

Notez les modules présents dans /etc/httpd/conf.modules.d

Installez php:

$ dnf install php

Notez les modules présents dans /etc/httpd/conf.modules.d

Pour vérifier l’installation de php, créez le fichier /var/www/html/index.php contenant:

<?php
phpinfo();
?>

Configuration d’hôtes virtuels

Il est possible d’héberger plusieurs sites sur un même serveur.

Chacun des sites répond à un nom différent ou une IP différente.

Pour créer un serveur virtuel il faut créer un nouveau répertoire contenant les fichiers du nouveau site:

$ mkdir /var/www/virtuel.com

Copiez le texte suivant à la fin du fichier httpd.conf.

<VirtualHost *:80>
	ServerAdmin webmaster@virtuel.com
	DocumentRoot /var/www/virtuel.com
	ServerName www.virtuel.com
	ServerAlias virtuel.com	
</VirtualHost>

Redémarrez Apache:

$ systemctl restart httpd

Créez ensuite un fichier html de votre choix dans le répertoire /var/www/virtuel.com

Ajoutez une ligne dans votre fichier /etc/hosts (sur le client):

x.x.x.x www.virtuel.com

Vous pouvez maintenant afficher le contenu du nouveau site web : http://www.virtuel.com.

Sécurisation de Apache avec SSL

Pour activer ssl donc https :

$ dnf install mod_ssl

Puis redémarrer Apache:

$ systemct restart httpd

Vous pouvez maintenant vous connecter en ssl à votre serveur web.

Pour désactiver http, ouvrez le fichier httpd.conf et commentez la ligne qui dit au serveur d’écouter sur le port 80.

Les hôtes virtuels doivent uniquement écouter sur le port 443:

<VirtualHost *:443>

Sécurisation de Apache avec authentification

Nous verrons ici l’authentification basique.

L’authentification basique permet de demander un login et un mot de passe pour pouvoir accéder à une partie du site.

ATTENTION: cette authentification envoie les informations d’authentification en clair sur le réseau et n’est donc pas sécurisé.

Il est donc impératif d’utiliser https avec ce type d’authentification. Dans ce cas les informations ne sont pas envoyées en clair sur le réseau.

Créez un répertoire rep à la racine de votre serveur:

$ mkdir /var/www/html/rep

Éditez le fichier /etc/httpd/conf/httpd.conf et ajoutez y les lignes suivantes:

<Directory /var/www/html/rep>
 	AuthType Basic 	
	AuthName "Authentification requise"
 	AuthBasicProvider file
	AuthUserFile /var/www/html/.htpasswd
 	Require valid-user 
</Directory>

Créez ensuite le fichier des mots de passe:

$ htpasswd -c /var/www/html/.htpasswd [user]

Redémarrez apache.

Copiez un fichier html dans le répertoire rep.

Essayez d’y accéder. Un login et un mot de passe vous seront demandés.

Lab 2

Créez deux hôtes virtuels sur votre machine:

Les deux fonctionneront en https et créez un répertoire protégé par mot de passe pour le site www.site.com.

La configuration du répertoire protégé par mot de passe doit se trouver dans la configuration de l’hôte virtuel.

Les deux sites seront configurés dans des fichiers distincts: site.conf et virtuel.conf tous deux placés dans /etc/httpd/conf.d.