Modifications pour le document Mettre en place un sous-domaine

Modifié par Clément AUBIN le 2021/04/18 11:55

Depuis la version 3.31
modifié par Clément AUBIN
sur 2021/04/18 10:42
Commentaire de modification : Il n'y a aucun commentaire pour cette version
À la version 6.1
modifié par Clément AUBIN
sur 2021/04/18 11:55
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

Détails

Propriétés de la Page
Contenu
... ... @@ -2,9 +2,9 @@
2 2  
3 3  {{toc/}}
4 4  
5 -=Idée générale=
5 += Idée générale =
6 6  
7 -Avant de suivre les étapes de mise en place, c’est intéressant de comprendre ce qu’on va faire ^^.
7 +Avant de suivre les étapes de mise en place, c’est intéressant de comprendre ce qu’on va faire ^^.^^
8 8  
9 9  Dans l'infra d'ATILLA, les connexions à un service web (members.atilla.org, learn.atilla.org, …) passent en grande majorité par Bill, qui acte comme d'un frontal web : c’est lui qui réceptionne les connexions HTTP(s) et qui les renvoie aux bons services internes par la suite. On dit également que Bill joue le rôle de //reverse-proxy//.
10 10  
... ... @@ -12,13 +12,14 @@
12 12  
13 13  [[image:reverse-proxy-arch.png]]
14 14  
15 -En pratique, Bill dispose d'un serveur Nginx, qui va avoir réceptionner toute requête HTTP(s) sur un des sites d'ATILLA et qui transfère cette requête à la VM qui héberge le service correspondant.
15 +En pratique, Bill dispose d'un serveur Nginx, qui va réceptionner toute requête HTTP(s) sur un des sites d'ATILLA et qui transfère cette requête à la VM qui héberge le service correspondant.
16 16  
17 -=Enregistrement du sous-domaine=
17 += Enregistrement du sous-domaine =
18 18  
19 19  La première chose à faire est de déclarer au monde que le domaine sur lequel vous souhaitez déployer votre service existe. Il n’y a pas de convention à proprement parler sur le choix du sous-domaine. Si vous déployez un service de gestion de tickets (par exemple, GLPI), le domaine auquel ce service pourra être accessible peut très bien être ##glpi.atilla.org## ou même ##tickets.atilla.org##.
20 20  
21 21  Pour déclarer ce domaine, rendez-vous sur la machine qui sert de DNS dans l’infra (aujourd’hui, il s’agit de Bill). Deux fichiers devront être édités :
22 +
22 22  * ##/etc/bind/internal/db.atilla.org## : les entrées DNS qui sont exposées à tous les utilisateurs au sein du réseau d’ATILLA et de l’EISTI
23 23  * ##/etc/bind/external/db.atilla.org## : les entrées DNS qui sont exposées à tous les utilisateurs venant de l’extérieur
24 24  
... ... @@ -42,7 +42,7 @@
42 42  Lorsqu’on fait une modification dans une configuration DNS, il y a toujours un temps dit de "propagation", pendant lequel l’entrée qui a été déclarée n’est pas tout de suite accessible par tout le monde. Cela peut prendre jusqu’à 24h pour qu’une entrée soit réellement accessible par tous. Cela est également vrai lorsqu’on modifie ou supprime une entrée.
43 43  {{/warning}}
44 44  
45 -=Mise en place des certificats SSL=
46 += Mise en place des certificats SSL =
46 46  
47 47  Maintenant qu’on a notre domaine, on va pouvoir récupérer des certificats SSL nous permettant de mettre en place le HTTPs sur ce domaine.
48 48  
... ... @@ -72,13 +72,13 @@
72 72  systemctl status nginx
73 73  {{/code}}
74 74  
75 -=Mise en place de la configuration Nginx=
76 += Mise en place de la configuration Nginx =
76 76  
77 77  Finalement, on va devoir mettre en place la configuration qui va tout lier ensemble, c’est elle qui va indiquer que, lorsqu’un utilisateur se connecte au service, on utilisera le certificat SSL qui a été généré plus haut, et on enverra les connexions à la machine voulue.
78 78  
79 -==Méthode manuelle==
80 +== Méthode manuelle ==
80 80  
81 -===Création de la configuration===
82 +=== Création de la configuration ===
82 82  
83 83  On va créer la configuration d’Nginx dans le dossier ##/etc/nginx/sites-available##. Par convention, le nom du fichier de configuration va correspondre au nom du domaine sur lequel on expose le service. Dans notre cas, il s’agira de ##monservice.atilla.org##.
84 84  
... ... @@ -88,29 +88,29 @@
88 88  
89 89  {{code language="nginx"}}
90 90  server {
91 - listen 80;
92 - server_name monservice.atilla.org;
93 - return 301 https://monservice.atilla.org$request_uri;
92 + listen 80;
93 + server_name monservice.atilla.org;
94 + return 301 https://monservice.atilla.org$request_uri;
94 94  }
95 95  
96 96  server {
97 - listen 443 ssl http2;
98 + listen 443 ssl http2;
98 98  
99 - server_name monservice.atilla.org;
100 + server_name monservice.atilla.org;
100 100  
101 - ssl on;
102 - ssl_certificate_key /etc/letsencrypt/live/monservice.atilla.org/privkey.pem;
103 - ssl_trusted_certificate /etc/letsencrypt/live/monservice.atilla.org/chain.pem;
104 - ssl_certificate /etc/letsencrypt/live/monservice.atilla.org/fullchain.pem;
102 + ssl on;
103 + ssl_certificate_key /etc/letsencrypt/live/monservice.atilla.org/privkey.pem;
104 + ssl_trusted_certificate /etc/letsencrypt/live/monservice.atilla.org/chain.pem;
105 + ssl_certificate /etc/letsencrypt/live/monservice.atilla.org/fullchain.pem;
105 105  
106 - access_log /var/log/nginx/monservice.atilla.org/access.log;
107 - error_log /var/log/nginx/monservice.atilla.org/error.log;
107 + access_log /var/log/nginx/monservice.atilla.org/access.log;
108 + error_log /var/log/nginx/monservice.atilla.org/error.log;
108 108  
109 - location / {
110 - proxy_set_header Host $host;
111 - proxy_set_header X-Forwarded-For $remote_addr;
112 - proxy_pass http://monservice-prod.prod.infra.atilla.org/;
113 - }
110 + location / {
111 + proxy_set_header Host $host;
112 + proxy_set_header X-Forwarded-For $remote_addr;
113 + proxy_pass http://monservice-prod.prod.infra.atilla.org/;
114 + }
114 114  }
115 115  {{/code}}
116 116  
... ... @@ -120,12 +120,12 @@
120 120  
121 121  {{code language="nginx"}}
122 122  server {
123 - # On écoute sur le port 80 (le port utilisé par défaut avec HTTP)
124 - listen 80;
125 - # On répond aux requêtes qui pointent vers le domaine monservice.atilla.org
126 - server_name monservice.atilla.org;
127 - # On redirige chaque requête vers son équivalent HTTPs
128 - return 301 https://monservice.atilla.org$request_uri;
124 + # On écoute sur le port 80 (le port utilisé par défaut avec HTTP)
125 + listen 80;
126 + # On répond aux requêtes qui pointent vers le domaine monservice.atilla.org
127 + server_name monservice.atilla.org;
128 + # On redirige chaque requête vers son équivalent HTTPs
129 + return 301 https://monservice.atilla.org$request_uri;
129 129  }
130 130  {{/code}}
131 131  
... ... @@ -133,39 +133,39 @@
133 133  
134 134  {{code language="nginx"}}
135 135  server {
136 - # On écoute sur le port 443, qui est celui par défaut pour le HTTPs.
137 - # Les deux autres attributs ssl et http2 indiquent :
138 - # * Qu'on va chiffrer la connexion avec SSL (le principe du HTTPs)
139 - # * Qu'on supporte le protocole HTTP/2
140 - listen 443 ssl http2;
137 + # On écoute sur le port 443, qui est celui par défaut pour le HTTPs.
138 + # Les deux autres attributs ssl et http2 indiquent :
139 + # * Qu'on va chiffrer la connexion avec SSL (le principe du HTTPs)
140 + # * Qu'on supporte le protocole HTTP/2
141 + listen 443 ssl http2;
141 141  
142 - # Comme avant, on répond aux requêtes qui pointent vers le domaine monservice.atilla.org
143 - server_name monservice.atilla.org;
143 + # Comme avant, on répond aux requêtes qui pointent vers le domaine monservice.atilla.org
144 + server_name monservice.atilla.org;
144 144  
145 - # On indique encore une fois qu'on va utiliser le SSL, et on fournit les fichiers qui
146 - # sont nécessaires pour authentifier le serveur et chiffrer la connexion.
147 - ssl on;
148 - ssl_certificate_key /etc/letsencrypt/live/monservice.atilla.org/privkey.pem;
149 - ssl_trusted_certificate /etc/letsencrypt/live/monservice.atilla.org/chain.pem;
150 - ssl_certificate /etc/letsencrypt/live/monservice.atilla.org/fullchain.pem;
146 + # On indique encore une fois qu'on va utiliser le SSL, et on fournit les fichiers qui
147 + # sont nécessaires pour authentifier le serveur et chiffrer la connexion.
148 + ssl on;
149 + ssl_certificate_key /etc/letsencrypt/live/monservice.atilla.org/privkey.pem;
150 + ssl_trusted_certificate /etc/letsencrypt/live/monservice.atilla.org/chain.pem;
151 + ssl_certificate /etc/letsencrypt/live/monservice.atilla.org/fullchain.pem;
151 151  
152 - # On configure l'emplacement des logs
153 - access_log /var/log/nginx/monservice.atilla.org/access.log;
154 - error_log /var/log/nginx/monservice.atilla.org/error.log;
153 + # On configure l'emplacement des logs
154 + access_log /var/log/nginx/monservice.atilla.org/access.log;
155 + error_log /var/log/nginx/monservice.atilla.org/error.log;
155 155  
156 - # C'est ici que la "magie" opère :)
157 - # La directive proxy_pass nous permet de rediriger tout le traffic vers la machine virtuelle qui correspond
158 - # Les directives proxy_set_header permettent d'ajouter des en-têtes spécifiques à destination de la machine virtuelle,
159 - # par exemple pour que celle-ci comprenne qu'elle se trouve derrière un frontal web.
160 - location / {
161 - proxy_set_header Host $host;
162 - proxy_set_header X-Forwarded-For $remote_addr;
163 - proxy_pass http://monservice-prod.prod.infra.atilla.org/;
164 - }
157 + # C'est ici que la "magie" opère :)
158 + # La directive proxy_pass nous permet de rediriger tout le traffic vers la machine virtuelle qui correspond
159 + # Les directives proxy_set_header permettent d'ajouter des en-têtes spécifiques à destination de la machine virtuelle,
160 + # par exemple pour que celle-ci comprenne qu'elle se trouve derrière un frontal web.
161 + location / {
162 + proxy_set_header Host $host;
163 + proxy_set_header X-Forwarded-For $remote_addr;
164 + proxy_pass http://monservice-prod.prod.infra.atilla.org/;
165 + }
165 165  }
166 166  {{/code}}
167 167  
168 -===Création du dossier de logs===
169 +=== Création du dossier de logs ===
169 169  
170 170  Comme vu dans la configuration précédente, on va stocker les logs Nginx dans ##/var/log/nginx/monservice.atilla.org##. Par défaut, ce dossier n'existe pas et il faut le créer (sinon, Nginx ne démarrera pas).
171 171  
... ... @@ -173,10 +173,33 @@
173 173  mkdir /var/log/nginx/monservice.atilla.org
174 174  {{/code}}
175 175  
176 -===Activation de la configuration Nginx===
177 +=== Activation de la configuration Nginx ===
177 177  
178 -==Méthode plus ou moins automatique==
179 +Finalement, il faut s'assurer qu'Nginx prendra en compte notre fichier de configuration. Si vous regardez dans ##/etc/nginx##, vous verrez deux dossiers :
179 179  
181 +* ##sites-available##: celui dans lequel la configuration a été créée
182 +* ##sites-enabled##: celui dans lequel la configuration doit être référencée pour être active
183 +
184 +Pour activer la configuration en question, rien de plus simple, on fait juste un lien symbolique dans ##sites-enabled## vers le fichier qui convient :
185 +
186 +{{code language="shell"}}
187 +ln -sf /etc/nginx/sites-available/monservice.atilla.org /etc/nginx/sites-enabled/atilla.org/
188 +{{/code}}
189 +
190 +Avant de terminer cette manip, on vérifie que tout est bon au niveau de la configuration, et que Nginx ne va pas planter au redémarrage :
191 +
192 +{{code language="shell"}}
193 +nginx -t
194 +{{/code}}
195 +
196 +Et finalement, on redémarre !
197 +
198 +{{code language="shell"}}
199 +systemctl restart nginx
200 +{{/code}}
201 +
202 +== Méthode plus ou moins automatique ==
203 +
180 180  On a un [[super projet sur GitLab>>https://gitlab.atilla.org/adminsys/nginx-config-generator]] qui permet d’effectuer les actions de la méthode manuelle de manière automatique. Ce projet est présent sur ##/root/nginx-config-generator## sur Bill, voici comment l’utiliser rapidement. En cas de besoin, référez vous au ##README.md## du projet.
181 181  
182 182  {{code language="shell"}}