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.
Une transaction HTTP est composée de plusieurs étape:
Le client envoie une requête au serveur.
Si c’est une page statique, le serveur passe directement au point 6 sinon il exécute un application.
Le serveur exécute l’application.
Le script peut envoyer une ou plusieurs requêtes à une base de données.
Le script prépare sa réponse.
Le serveur prépare sa réponse à envoyer.
Le client peut exécuter un script pour ajouter des fonctionnalités à la page s’il y a lieu.
Le client affiche la réponse.
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 est une adresse logique dont le format est:
Protocole://adresse_du_serveur[:port]/[URI][?paramètres[¶mètres[¶mè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 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 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?
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
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.
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
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.
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();
?>
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.
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>
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.
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
.