Nginx avancé
Attribution - Partage dans les Mêmes Conditions :
[Link]
Table des matières
Objectifs 3
I - Multi-site 4
II - Exercice 7
III - Exercice : Analyse des logs 8
IV - Exercice : Analyse des logs 2 9
Solutions des exercices 10
Crédits des ressources 13
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
2
Antoine Lima
Objectifs
Savoir configurer nginx pour héberger plusieurs sites web sur le même serveur
Savoir analyser les logs de nginx
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
3
Antoine Lima
I Multi-site
Multi-site Définition
Le multi-site permet d'héberger plusieurs sites internet sur le même serveur, c'est à dire la
même ip.
Nom de domaine
Dans le cadre de cette Api, vous avez accès aux sous-domaines <monsite>.[Link]. Vous
pouvez créer trois sous-sous-domaines de la forme
1 <site1>.<monsite>.[Link]
2 <site2>.<monsite>.[Link]
3 <site3>.<monsite>.[Link]
Modification du fichier Hosts Complément
Si on ne possédait pas de nom de domaine, on pourrait tricher en modifiant le fichier hosts de
notre machine afin que plusieurs nom de domaines artificiels pointent vers la même ip.
Attention : Ces modifications sont à faire sur le client et non sur le serveur.
1. Rendez vous dans le répertoire /etc
2. Utilisez un éditeur afin de modifier le fichier /etc/hosts avec les droits sudo
3. Ajoutez comme ci-dessous deux sites pointant sur l'ip de votre serveur
4. Vous pouvez ensuite taper les adresses [Link] et [Link] dans un navigateur
et vérifier qu'elles pointent bien sur votre site.
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
4
Antoine Lima
Multi-site
Modifications fichier Hosts
Vous pouvez aussi utiliser la commande ping pour vérifier que les adresses pointent bien sur
votre serveur.
1 ping [Link]
Et le serveur nous renvoie bien les paquets :
1 PING [Link] ([Link]) 56(84) bytes of data.
2 64 bytes from [Link] ([Link]): icmp_seq=1 ttl=64 time=0.569 ms
3 64 bytes from [Link] ([Link]): icmp_seq=2 ttl=64 time=0.801 ms
4 64 bytes from [Link] ([Link]): icmp_seq=3 ttl=64 time=0.750 ms
Pour arrêter le processus ping, il vous suffit d'appuyer sur Ctrl+C.
Modification de la configuration
Nous allons devoir modifier la configuration car nous ne voulons pas que nos 2 adresses pointent
sur le même site.
1 server {
2 listen 80;
3
4 server_name [Link]; #adresse 1
5
6 location / {
7 root /var/www/[Link]; #racine du site internet 1
8 index [Link];
9
10 }
11 }
12
13 server {
14 listen 80;
15
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
5
Antoine Lima
Multi-site
16 server_name [Link]; #adresse 2
17
18 location / {
19 root /var/www/[Link]; #racine du site 2
20 index [Link];
21 }
22 }
23
Il faut au préalable avoir créé 2 sites en html dans les dossiers que vous avez indiqué dans la
configuration. Un site très simple suffira :
1 <html><h1> Site 1 </h1></html>
Multi-site
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
6
Antoine Lima
II Exercice
Exercice d'application
Dans cet exercice nous viserons l'installation d'un serveur multi-site sur un VPS sans interface
graphique dans le but d'y accéder à partir de n'importe quel appareil disposant d'un navigateur
web.
Préparation des sites internet
Depuis votre machine cliente créer 3 dossiers contenant chacun un site internet en html.
Connectez vous en SSH à votre serveur puis à l'aide de la commande SCP placez vos site sur le
serveur.
Vous pouvez vous référer au cours sur le SSH1.
[solution n°1 p. 10]
Question 1
Quel est l'avantage de travailler sur sa machine et d'utiliser SSH pour accéder au serveur ?
Configuration de nginx
Reprendre le cours pour installer nginx sur la machine serveur si ce n'est pas déjà fait.
Créer une configuration nginx afin de pouvoir accéder aux 3 sites différents en tapant les urls
suivantes :
<site1>.<monsite>.[Link]
<site2>.<monsite>.[Link]
<site3>.<monsite>.[Link]
[solution n°2 p. 10]
Question 2
Comment faire en sorte que le serveur écoute sur le port 81 et comment accéder à nos pages ?
[solution n°3 p. 10]
Question 3
Utilisez la documentation officielle nginx2 pour trouver comment avoir accès aux logs de connexion
aux serveur.
Indice :
Ajoutez à votre configuration la ligne suivante :
1 access_log /cheminDesLogs; #commande générale
2 access_log /home/logs/[Link]; #exemple de syntaxe
1. Module SSH - [Link]
2. [Link]
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
7
Antoine Lima
[solution n°4 p. 11]
Exercice : Analyse des logs
Voici un extrait des logs de connexion à un serveur nginx :
1 [Link] - - [26/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 200 45 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
2 [Link] - - [26/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 304 0 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
3 [Link] - - [28/Nov/[Link] +0100] "GET / HTTP/1.1" 200 17 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
4 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
5 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
6 [Link] - - [28/Nov/[Link] +0100] "GET / HTTP/1.1" 200 18 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
7 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
8 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
9 [Link] - - [01/Dec/[Link] +0100] "GET / HTTP/1.1" 200 17 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
10 [Link] - - [01/Dec/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
Extrait de /var/log/nginx/[Link] :
1 2017/11/26 [Link] [emerg] 882#882: open() "/home/logs/[Link]" failed (2:
No such file or directory)
A 2 clients différents se sont connectés au serveur.
B Les clients utilisaient des navigateurs différents.
C Un client a essayé d'accéder au fichier [Link] .
D Nginx a essayé d'ouvrir le fichier [Link] mais ne l'a pas trouvé.
E Nginx ne trouve pas le fichier [Link]
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
8
Antoine Lima
[solution n°5 p. 12]
Exercice : Analyse des logs 2
Après avoir tenté la commande sudo systemctl start nginx le terminal nous renvoie une erreur.
Voici un extrait de la commande journalctl -xe que le terminal nous propose d'entrer suite à
l'erreur :
1 -- L'unité (unit) [Link] a commencé à démarrer.
2 déc. 06 [Link] alice nginx[816]: nginx: [emerg] unexpected end of file, expecting
";" or "}" in /etc/nginx/sites-enabled/testLogs:10
3 déc. 06 [Link] alice nginx[816]: nginx: configuration file /etc/nginx/[Link]
test failed
4 déc. 06 [Link] alice systemd[1]: [Link]: Control process exited,
code=exited status=1
5 déc. 06 [Link] alice systemd[1]: Failed to start A high performance web server and
a reverse proxy server.
6 -- Subject: L'unité (unit) [Link] a échoué
7 -- Defined-By: systemd
8 -- Support: [Link]
9 --
10 -- L'unité (unit) [Link] a échoué, avec le résultat failed.
11 déc. 06 [Link] alice systemd[1]: [Link]: Unit entered failed state.
12 déc. 06 [Link] alice systemd[1]: [Link]: Failed with result 'exit-code'.
13 déc. 06 [Link] alice sudo[813]: pam_unix(sudo:session): session closed for user
root
14 déc. 06 [Link] alice sudo[820]: dev : TTY=pts/0 ; PWD=/home/dev ; USER=root ;
COMMAND=/bin/journalctl -xe
15 déc. 06 [Link] alice sudo[820]: pam_unix(sudo:session): session opened for user
root by dev(uid=0)
A Il y a un problème dans le fichier de configuration du serveur
B Le serveur nginx a réussi à démarrer correctement.
C Certains lignes n'ont aucun rapport avec nginx
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
9
Antoine Lima
Solutions des exercices
Solution n°1 [exercice p. 7]
De façon générale il est beaucoup plus agréable de travailler sur sa propre machine possédant
une interface graphique plutôt que de travailler directement sur la console du serveur.
Solution n°2 [exercice p. 7]
Il suffit de modifier le port écouté dans la configuration.
Pour accéder à vos page il suffit d'ajouter le numéro de port à la fin de l'adresse du serveur :
<site1>.<monsite>.[Link]
Solution n°3 [exercice p. 7]
Solution générale de la configuration
1 server {
2 listen 81;
3
4 server_name <site1>.<monsite>.[Link];
5
6 location / {
7 root /home/www/site1;
8 index [Link];
9
10 }
11 access_log /home/logs/[Link];
12 }
13
14 server {
15 listen 81;
16
17 server_name <site2>.<monsite>.[Link];
18
19 location / {
20 root /home/www/site2;
21 index [Link];
22
23 }
24 access_log /home/logs/[Link];
25 }
26
27 server {
28 listen 81;
29
30 server_name <site3>.<monsite>.[Link];
31
32 location / {
33 root /home/www/site3;
34 index [Link];
35
36 }
37 access_log /home/logs/[Link];
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
10
Antoine Lima
Solutions des exercices
38 }
Consultation des logs Complément
Il peut être utile de vouloir consulter les logs afin de détecter les problèmes ou anomalies de
connexion par exemple. Pour cela on peut utiliser la commande tail qui permet d'afficher
les 10 dernières lignes d'un fichier.
1 tail /home/logs/[Link]
Solution n°4 [exercice p. 8]
Voici un extrait des logs de connexion à un serveur nginx :
1 [Link] - - [26/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 200 45 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
2 [Link] - - [26/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 304 0 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
3 [Link] - - [28/Nov/[Link] +0100] "GET / HTTP/1.1" 200 17 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
4 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
5 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
6 [Link] - - [28/Nov/[Link] +0100] "GET / HTTP/1.1" 200 18 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
7 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
8 [Link] - - [28/Nov/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
9 [Link] - - [01/Dec/[Link] +0100] "GET / HTTP/1.1" 200 17 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
10 [Link] - - [01/Dec/[Link] +0100] "GET /[Link] HTTP/1.1" 404 143
"-" "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
Extrait de /var/log/nginx/[Link] :
1 2017/11/26 [Link] [emerg] 882#882: open() "/home/logs/[Link]" failed (2:
No such file or directory)
A
2 clients différents se sont connectés au On voit 2 ip différentes : [Link] et
serveur. [Link]
B
Les clients utilisaient des On voit que toutes les connections ont été effectuées
navigateurs différents. depuis un navigateur Firefox en version 57.0 .
C
Un client a essayé d'accéder Ligne 1 on peut voir GET /[Link] ce qui signifier que
au fichier [Link] . ce client à essayé d'accéder à ce fichier.
D
Nginx a essayé d'ouvrir le fichier Le fichier n'était pas encore créé lors du test de la
[Link] mais ne l'a pas configuration nginx a donc rencontré une erreur.
trouvé.
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
11
Antoine Lima
Solutions des exercices
E
Nginx ne trouve Le fichier [Link] est un fichier qui se charge par défaut lors de la
pas le fichier consultation d'une page web. On voit ligne 4 qu'on récupère une erreur
[Link] 404 sur le "GET /[Link] HTTP/1.1"
Il peut être utile lorsque nous ne comprenons pas un problème de s'intéresser aux logs
qui contiennent beaucoup d'informations sur les connexions ainsi que les erreurs.
Solution n°5 [exercice p. 9]
Après avoir tenté la commande sudo systemctl start nginx le terminal nous renvoie une erreur.
Voici un extrait de la commande journalctl -xe que le terminal nous propose d'entrer suite à
l'erreur :
1 -- L'unité (unit) [Link] a commencé à démarrer.
2 déc. 06 [Link] alice nginx[816]: nginx: [emerg] unexpected end of file, expecting
";" or "}" in /etc/nginx/sites-enabled/testLogs:10
3 déc. 06 [Link] alice nginx[816]: nginx: configuration file /etc/nginx/[Link]
test failed
4 déc. 06 [Link] alice systemd[1]: [Link]: Control process exited,
code=exited status=1
5 déc. 06 [Link] alice systemd[1]: Failed to start A high performance web server and
a reverse proxy server.
6 -- Subject: L'unité (unit) [Link] a échoué
7 -- Defined-By: systemd
8 -- Support: [Link]
9 --
10 -- L'unité (unit) [Link] a échoué, avec le résultat failed.
11 déc. 06 [Link] alice systemd[1]: [Link]: Unit entered failed state.
12 déc. 06 [Link] alice systemd[1]: [Link]: Failed with result 'exit-code'.
13 déc. 06 [Link] alice sudo[813]: pam_unix(sudo:session): session closed for user
root
14 déc. 06 [Link] alice sudo[820]: dev : TTY=pts/0 ; PWD=/home/dev ; USER=root ;
COMMAND=/bin/journalctl -xe
15 déc. 06 [Link] alice sudo[820]: pam_unix(sudo:session): session opened for user
root by dev(uid=0)
A
Il y a un problème À la deuxième ligne du résultat de la commande journalctl -
dans le fichier de xe on peut voir qu'il y a un problème de syntaxe dans le fichier
configuration du /etc/nginx/sites-enabled/testLogs
serveur
B Le serveur nginx a réussi à démarrer correctement.
C
Certains lignes n'ont aucun Les 2 dernières lignes sont les logs de l'execution de la
rapport avec nginx commande journalctl -xe
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
12
Antoine Lima
Crédits des ressources
Modifications fichier Hosts p. 5
Attribution - Partage dans les Mêmes Conditions - Anthony Bocquet
Multi-site p. 6
Attribution - Partage dans les Mêmes Conditions - Anthony Bocquet
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
13
Antoine Lima
Crédits des ressources
par Picasoft, auteurs et contributeurs : Anthony Bocquet , Lola Lejeune, Antoine Barbare,
14
Antoine Lima