Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 17 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,21 @@ de conteneurisation.

Liste des TP :

* TP 0 : [installation de QEMU/KVM et de Libvirt, sur un OS Ubuntu](tp/ubuntu/tp0-kvm-libvirt.md) ;
* TP 1 : [paramètres supplémentaires de libvirt](tp/ubuntu/tp1-kvm-libvirt.md) ;
* TP 2 : [installation de Vagrant](tp/ubuntu/tp2-vagrant.md) ;
* TP 3 : [Backports Debian](tp/debian/tp3-backports.md) ;
* TP 4 : [découverte de SSH](tp/debian/tp4-ssh-basique.md) ;
* TP 5 : [installation et paramétrage basique du serveur web Apache](tp/debian/tp5-apache-basique.md) ;
* TP 6 : [les virtual hosts dans Apache](tp/debian/tp6-apache-virtual-hosts.md);
* TP 7 : [découverte de mod_php](tp/debian/tp7-apache-mod_php.md) ;
* TP 8 : [MariaDB](tp/debian/tp8-mariadb.md) ;
* TP 9 : [PHPMyAdmin](tp/debian/tp9-phpmyadmin.md) ;
* TP 0 : [installation de QEMU/KVM et de Libvirt, sur un OS Ubuntu](tp/ubuntu/tp00-kvm-libvirt.md) ;
* TP 1 : [paramètres supplémentaires de libvirt](tp/ubuntu/tp01-kvm-libvirt.md) ;
* TP 2 : [installation de Vagrant](tp/ubuntu/tp02-vagrant.md) ;
* TP 3 : [Backports Debian](tp/debian/tp03-backports.md) ;
* TP 4 : [découverte de SSH](tp/debian/tp04-ssh-basique.md) ;
* TP 5 : [installation et paramétrage basique du serveur web Nginx](tp/debian/tp05-nginx-basique.md) ;
* TP 6 : [les virtual hosts dans Nginx](tp/debian/tp06-nginx-virtual-hosts.md);
* TP 7 : [Nginx et PHP-FPM](tp/debian/tp07-nginx-php-fpm.md) ;
* TP 8 : [MariaDB](tp/debian/tp08-mariadb.md) ;
* TP 9 : [PHPMyAdmin](tp/debian/tp09-phpmyadmin.md) ;
* TP 10 : [WordPress](tp/debian/tp10-wordpress.md) ;
* TP 11 : [Nginx](tp/debian/tp11-nginx.md) ;
* TP 12 : [Nginx et PHP-FPM](tp/debian/tp12-nginx-php-fpm.md) ;
* TP 13 : [Conteneurs et Docker](tp/debian/tp13-docker.md) ;
* TP 14 : [sudo](tp/debian/tp14-sudo.md) ;
* TP 15 : [deux usages avancés d'OpenSSH](tp/debian/tp15-ssh_avance.md) ;
* TP 16 : [HTTPS sur Apache](tp/debian/tp16-https_apache.md) ;
* TP 17 : [HTTPS sur Nginx](tp/debian/tp17-https_nginx.md) ;
* TP 18 : Python et UWSGI ;
* TP 19 : sujets sécurité.
* TP 11 : [Conteneurs et Docker](tp/debian/tp11-docker.md) ;
* TP 12 : [Nginx en reverse-proxy](tp/debian/tp12-nginx-reverse-proxy.md) ;
* TP 13 : [sudo](tp/debian/tp13-sudo.md) ;
* TP 14 : [deux usages avancés d'OpenSSH](tp/debian/tp14-ssh_avance.md) ;
* TP 15 : [HTTPS sur Nginx](tp/debian/tp15-https_nginx.md) ;
* TP 16 : Python et UWSGI ;
* TP 17 : sujets sécurité.
11 changes: 0 additions & 11 deletions apache/server11.example.com.conf

This file was deleted.

22 changes: 0 additions & 22 deletions apache/ssl_www11.example.com.conf

This file was deleted.

10 changes: 5 additions & 5 deletions fpm/server13.conf → fpm/server11.conf
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
; Start a new pool named 'server13'.
; Start a new pool named 'server11'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[server13]
[server11]

; Per pool prefix
; It only applies on the following directives:
Expand All @@ -20,8 +20,8 @@
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = server13
group = server13
user = server11
group = server11

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
Expand Down Expand Up @@ -434,6 +434,6 @@ pm.max_spare_servers = 3
; specified at startup with the -d argument
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
php_admin_value[error_log] = /srv/www/server13.example.com/log/fpm-php.log
php_admin_value[error_log] = /srv/www/server11.example.com/log/fpm-php.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 64M
18 changes: 18 additions & 0 deletions nginx/server11.example.com.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# JSON access log configuration

log_format json_combined escape=json '{ "time_local": "$time_local", "remote_addr": "$remote_addr", "http_x_forwarded_for": "$http_x_forwarded_for", "request": "$request", "status": "$status", "body_bytes_sent": "$body_bytes_sent", "http_referer": "$http_referer", "http_user_agent": "$http_user_agent", "request_time": "$request_time" }';

# Nginx virtual host configuration

server {
listen 80;

root /srv/www/server11.example.com/public;
index index.html;

server_name server11.example.com www.server11.example.com;

# Logs
access_log /srv/www/server11.example.com/log/access.log json_combined;
error_log /srv/www/server11.example.com/log/error.log;
}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -274,5 +274,5 @@ passe à chaque clé.

Attention !!! OpenSSH est très pratique sur de nombreux aspects, et possède de
nombreuses options de configuration, qui peuvent abaisser la sécurité du
système. Il est recommandé de lire le document "[Usage sécurisé d'(Open)SSH]https://messervices.cyber.gouv.fr/guides/usage-securise-dopenssh()"
système. Il est recommandé de lire le document "[Usage sécurisé d'(Open)SSH](https://messervices.cyber.gouv.fr/guides/usage-securise-dopenssh)"
avant de déployer une configuration en production.
155 changes: 155 additions & 0 deletions tp/debian/tp05-nginx-basique.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
[Retour au sommaire](../../README.md)

# TP 5 : Installation et paramétrage basique du serveur web Nginx

Objectifs :

- installer le serveur HTTP Nginx ;
- le démarrer, l'arrêter et l'activer au démarrage du serveur ;
- déposer du contenu et le rendre accessible ;
- personnaliser l'emplacement du contenu ;
- accéder aux fichiers de logs.

## Introduction

Nginx est un serveur HTTP, devenu il y a quelques années une référence côté
performances, car il fut le premier à résoudre le [problème des dix mille
connexions simultanées](https://fr.wikipedia.org/wiki/C10k_problem).

Nginx est aussi capable d'agir comme mandataire inverse (reverse proxy en
anglais) pour HTTP(S), et pour certains protocoles de mail. Cela veut dire
qu'il se place en frontal d'un ou de plusieurs serveurs web existant (Nginx
aussi, ou d'autres comme Apache HTTP Server), et permet de mettre en place
différentes stratégies, parmi lesquelles :

- rediriger du trafic vers un serveur ou en local ;
- mettre en cache pour servir du contenu plus rapidement ;
- effectuer de la répartition de charge entre plusieurs serveurs identiques ;
- effectuer un filtrage de sécurité.

À noter que Nginx n'est pas développé par une fondation mais par une entreprise.
Le logiciel d'origine est libre, sous licence BSD à 2 clauses, mais il existe
une version commerciale, Nginx Plus, disposant de fonctions supplémentaire et
d'un support.

## Étape 0 : installation

Comme bon nombre de distributions Linux et BSD, Nginx est disponible via des
paquets binaires pré-compilés pour Debian.

Se connecter sur server11, puis passer root.
Avant l'installaton, regarder quels sont les services réseau en fonctionnement
: `lsof -n -i`. Seul sshd devrait apparaître. Maintenant, installer Nginx :
`apt -y install nginx`. Relancer la commande d'avant.

Question : est-ce que l'installation de Nginx a lancé celui-ci ?

Se rendre via le navigateur de l'hôte sur http://10.13.37.11. Il est aussi
possible, depuis server11 ou depuis l'hôte, d'utiliser un requêteur HTTP en
ligne de commande comme `curl`.

Vérifier la liste des paquets de Nginx installés via `dpkg --list | grep
nginx`.

Question : quels sont les paquets installés ?

## Étape 1 : démarrage, arrêt, et activation au démarrage

Se connecter en ssh sur server11, puis passer root.
Vérifier grâce à la commande `pgrep nginx` si Nginx est toujours en fonctionnement.

Questions :
- comment s'appelle le programme ?
- combien de processus correspondants sont en fonctionnement ?
- à quels utilisateurs appartiennent ces processus ?

De nombreuses distributions Linux utilisent *systemd* comme système d'init.
Entre autres, *systemd* permet de gérer le lancement et l'activation au
démarrage de démons, appelés services.

Lancer la commande `systemctl stop nginx`, puis vérifier via `pgrep nginx` que
celui-ci est bien arrêté. Lancer ensuite la commande `systemctl start nginx`,
et vérifier de la même façon que Nginx fonctionne. Ouvrir un deuxième terminal,
se connecter sur server11, puis passer root. Lancer la commande `top -u
www-data`. Depuis le premier terminal, lancer la commande `systemctl restart
nginx`, puis regarder les changements au niveau de `top`.

Question : en utilisant `systemctl status nginx`, est-ce que Nginx est lancé
au démarrage du système ?

Redémarrer server11 et s'assurer que Nginx a bien démarré sans action.
Utiliser ensuite `systemctl disable nginx` puis redémarrer, s'assurer
qu'il n'est pas lancé. Ré-activer Nginx (`systemctl enable nginx`) et le
démarrer.

## Étape 2 : déposer du contenu

Se connecter sur [http://10.13.37.11](http://10.13.37.11), et remarquer la page
d'accueil par défaut. Se connecter en ssh sur server11, et passer root.
se rendre dans `/var/www/html/`, et y créer un fichier `page2.html`. Insérer du
texte ou du code HTML dans ce fichier, peu importe tant que c'est visible.
Visiter l'URL http://10.13.37.11/page2.html et admirer le résultat.

Question : à quel utilisateur appartient `page2.html`, et quels sont les droits
dessus ?

Changer les droits sur `page2.html` de la façon suivante : `chmod 000
page2.html`. Tenter à nouveau d'accéder à la page. Rechercher ensuite les
droits minimum pour que la page soit de nouveau accessible.

Question : quels sont les droits minimum pour accéder à `page2.html` depuis le
serveur web ? En owner root ainsi qu'en owner www-data.

## Étape 3 : personnaliser l'emplacement du contenu

Par défaut, le contenu se trouve donc dans `/var/www/html`. Mais il est
possible de modifier cet emplacement. Se rendre dans
`/etc/nginx/sites-enabled/` et lire le fichier de configuration
`default`.

Question : quelle est la directive qui permet de paramétrer l'emplacement du
contenu ?

Créer un répertoire `/srv/www/html` puis ajouter à cet endroit un fichier
`index2.html` au contenu libre. Modifier la directive `root` pour y
utiliser `/srv/www/html`, puis redémarrer Nginx. Rafraîchir
http://10.13.37.11 .

Question : qu'observe-t'on ?

Ajouter au fichier `default`, dans la directive `index` l'option `index2.html`, avant tous les autes fichiers. Relancer Nginx.

Question : que fait la directive `index` ?

Astuce : il est possible de vérifier la validité de la syntaxe des fichiers de
configuration de Nginx avec la commande `nginx -t` en tant que root.

## Étape 4 : les fichiers de logs (journaux)

De nombreuses requêtes HTTP ont été réalisées dans les étapes précédentes,
certaines avec succès, d'autres générant une erreur. Il peut être utile de voir
ce qui se passe bien et ce qui se passe moins bien. Nginx permet entre autres
d'enregistrer des informations sur les requêtes dans des fichiers dits
journaux, ou log en anglais. Par convention, sous Unix, les logs se trouvent
dans le répertoire `/var/log`, et sous Debian, Nginx stocke ses logs dans
`/var/log/nginx` par défaut. Tout ceci est bien entendu configurable.

Repérer dans `/etc/nginx/nginx.conf` les directives
`error_log` et `access_log`, et retrouver les fichiers correspondants dans
`/var/log/nginx`.

Questions :
- quelles informations trouve-t-on dans `/var/log/nginx/access.log` ?
- quelles informations trouve-t-on dans `/var/log/nginx/error.log` ?

Depuis un terminal, lancer la commande `tail -f /var/log/nginx/error.log` puis dans
un autre terminal, en tant que root, lancer la commande `systemctl restart
nginx`.

Question : qu'observe-t-on ?

Couper `tail`, puis lancer la commande `tail -f /var/log/nginx/access.log` puis
utiliser son navigateur pour visiter le site web, et tenter d'accéder à des
pages inexistantes.

Question : qu'observe-t-on ?
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[Retour au sommaire](../../README.md)

# TP 6 : les virtual hosts dans Apache
# TP 6 : les virtual hosts dans Nginx

Objectifs :

Expand All @@ -21,14 +21,14 @@ Sur sa machine locale, ouvrir un terminal, et passer root. Editer le fichier de
configuration `/etc/hosts` et ajouter la ligne suivante :

```
10.13.37.11 server11.example.com server11 www11.example.com
10.11.37.11 server11.example.com server11 www11.example.com www11 wp11.example.com wp11
```

Une fois le fichier sauvé, s'assurer que la machine server11 est bien
accessible via les noms ajoutés ci-dessus, par exemple avec la commande `ping`.
Maintenant, vérifier qu'Apache répond lors de requête vers les noms ajoutés.
Maintenant, vérifier que Nginx répond lors de requête vers les noms ajoutés.

Question : qu'affiche Apache lors des requêtes ?
Question : qu'affiche Nginx lors des requêtes ?

## Etape 1 : création d'un virtual host

Expand All @@ -44,8 +44,8 @@ Se connecter sur server11 et passer root. Créer l'arborescence suivante :

Ajouter un fichier `index.html` au contenu libre dans le répertoire `public`.

Transférer le fichier `apache/server11.example.com.conf` de ce dépôt dans le
répertoire `/etc/apache2/sites-available/` de server11.
Transférer le fichier `nginx/server11.example.com.conf` de ce dépôt dans le
répertoire `/etc/nginx/sites-available/` de server11.

À l'aide d'un navigateur, visiter les URLs suivantes :
- http://server11
Expand All @@ -55,38 +55,44 @@ répertoire `/etc/apache2/sites-available/` de server11.
Question : quel est le chemin du fichier HTML servi ? De quel fichier de
configuration vient-il ?

Prendre note du contenu de `/etc/apache2/sites-enabled` et
`/etc/apache2/sites-available`.
Conformément à la documentation du fichier par défaut, utiliser la commande
`a2ensite server11.example.com` pour activer le fichier de virtual host ajouté,
et utiliser la commande `a2dissite 000-default` pour retirer le fichier de
virtual host par défaut.
Prendre note du contenu de `/etc/nginx/sites-enabled` et
`/etc/nginx/sites-available`.
Créer un lien symbolique `/etc/nginx/sites-enabled/server11.example.com.conf`
pointant vers `/etc/nginx/sites-available/server11.example.com.conf` pour
activer le fichier de server ajouté, puis supprimer le lien
`/etc/nginx/sites-enabled/default` qui contient le server par défaut.

Visiter de nouveau les URL sus-mentionnées. Consulter le fichier activé et lire
le contenu des fichiers de log paramétrés.

Question : quel est le chemin du fichier HTML servi ? De quel fichier de
configuration vient-il ?

En utilisant le fichier de virtual host fourni comme modèle, créer un fichier
En utilisant le fichier de server fourni comme modèle, créer un fichier
`www11.example.com.conf` ainsi qu'une arborescence et une page HTML répondant
au site *www11.example.com*, puis vérifier que des requêtes sur
server11.example.com et sur www11.example.com vont bien sur les sites
respectifs, et dans les logs respectifs.

## Etape 2 : le format des logs

L'oeil averti aura remarqué que les contenus de `/var/log/apache2/access.log`
L'oeil averti aura remarqué que les contenus de `/var/log/nginx/access.log`
et `/srv/www/server11.example.com/log/access.log` n'ont pas tout à fait le même
format.

Rechercher dans les fichiers `/etc/apache2/conf-enabled/other-vhosts-access-log.conf` et
`/etc/apache2/sites-enabled/server11.example.com.conf` les lignes commençant
par *CustomLog* et remarquer que le format défini est différent. Retrouver les
deux définitions de format dans `/etc/apache2/apache2.conf`.
Rechercher dans les fichiers `/etc/nginx/sites-available/default` et
`/etc/nginx/sites-enabled/server11.example.com.conf` les lignes commençant
par *access_log* et remarquer que le format défini est différent. Retrouver les
deux définitions de format dans `/etc/nginx/nginx.conf`.

Question : en s'aidant de la [documentation
officielle](https://httpd.apache.org/docs/2.4/fr/mod/mod_log_config.html#formats),
officielle](https://httpd.nginx.org/docs/2.4/fr/mod/mod_log_config.html#formats),
à quoi correspondent les champs des deux formats définis ? Quelles sont les
différences entre ces deux formats ?

## Etape 3 : copier-coller

À partir de la configuration et de l'arborescence pour `server11.example.com`,
créer les arborescences et fichiers de configuration pour `www11.example.com`
et `wp11.example.com`. Chaque site devra contenir une page d'index indiquant le
nom du site.
Loading