projet_serveur_krkn/nginx/templates_reverse_proxy_htt...

199 lines
5.2 KiB
Markdown

# Configuration type d'un reverse proxy NGINX
Nous allons voir ici comment configurer un reverse proxy NGINX dans deux cas,
- Si le container du service est sur la node principale (Alpha).
- Si le container du service n'est pas sur la node principale mais sur Beta.
Dans le premier cas nous redirigerons directement la requête sur le container du service à l'aide d'un reverse proxy NGINX configuré du le container NGINX de Alpha.
Dans le second cas nous redirigerons la requête sur Beta à l'aide d'un reverse proxy NGINX configuré sur le container NGINX de Alpha. Sur Beta la requête sera redirigé vers le container NGINX de Beta avec une règle DNAT.
## Mise en place des DNAT
Nous allons mettre en place deux règles DNAT,
- Une sur Alpha redirigeant toutes les requêtes sur les ports 80 et 443 vers le container NGINX de Alpha.
- Une sur Beta redirigeant toutes requêtes sur les ports 80 et 443 vers le container NGINX de Beta.
### Sur Alpha
On modifie le fichier rules de Shorewall
```
nano /etc/shorewall/rules
```
On rajoute la règle de DNAT
```
DNAT net krkn:ip_ct_nginx_alpha tcp 80,443
```
On redémarre Shorewall
```
systemctl restart shorewall
```
### Sur Beta
On modifie le fichier rules de Shorewall
```
nano /etc/shorewall/rules
```
On rajoute la règle de DNAT
```
DNAT net krkn:ip_ct_nginx_beta tcp 80,443
```
On redémarre Shorewall
```
systemctl restart shorewall
```
## Dans tout les cas
### Instatalation de Certbot
On installe certbot qui est l'outils utilisé par Let's Encrypt pour obtenir des certificats SSL.
```
apt-get install certbot
apt-get install python-certbot-nginx
```
Il faut configurer notre zone DNS pour que address.fr pointe vers l'adresse ip publique du cluster. La mention subdomain représente le sous domaine, s'il n'y en a pas laisser un blanc.
```
subdomain IN A 84.100.250.4
```
## Configuration du reverse proxy NGINX pour une connexion sur un container présent sur Alpha.
On commence par configurer un serveur NGINX simple pour l'obtention du certificat.
```
nano /etc/nginx/conf.d/address.fr.conf
```
Voilà la template du serveur web
```
server {
listen 80;
server_name address.fr;
location / {
proxy_pass http://ip_ct_alpha/;
}
}
```
### Génération du premier certificat
On génère le premier certificat SSL à l'aide de certbot
```
systemctl restart nginx
certbot --nginx -d address.fr
```
Choisir No redirect.
Maintenant que le certificat est générer on va remplacer la configuration du serveur web.
```
nano /etc/nginx/conf.d/address.fr.conf
```
Voilà la template du serveur web
```
server {
listen 80;
server_name address.fr;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name address.fr;
location / {
proxy_pass http://ip_ct_alpha/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
ssl_certificate /etc/letsencrypt/live/address.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/address.fr/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
```
## Configuration du reverse proxy NGINX pour une connexion sur un container présent sur Beta.
### Sur Alpha
On commence par configurer un serveur NGINX simple pour l'obtention du certificat. Se reverse proxy rediregera les requêtes sur _address.fr_ vers la container NGINX de la node Beta via DNAT.
```
nano /etc/nginx/conf.d/address.fr.conf
```
Voilà la template du serveur web
```
server {
listen 80;
server_name address.fr;
location / {
proxy_pass http://10.40.0.2:80/; #Ip de Beta sur le bridge Alpha/Beta
proxy_set_header Host address.fr;
}
}
```
### Sur Beta
On configure un serveur web qui va rediriger les requetes entrante sur Beta pour l'host "address.fr" vers le container de se site.
```
nano /etc/nginx/conf.d/address.fr.conf
```
Voilà la template du serveur web
```
server {
listen 80;
server_name address.fr;
location / {
proxy_pass http://ip_ct_beta/;
}
}
```
### Obtention du premier certificat SSL depuis le container Nginx de Alpha
```
systemctl restart nginx
certbot --nginx -d address.fr
```
Choisir No redirect.
Maintenant que le certificat est générer on va remplacer la configuration du serveur web.
### Sur Alpha
On transmet la requête au container NGINX de beta qui s'occupera de nous mettre en communication avec le container correspondant au site sur la node Beta.
```
nano /etc/nginx/conf.d/address.fr.conf
```
Voilà la template du serveur web
```
server {
listen 80;
server_name address.fr;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name address.fr;
location / {
proxy_pass http://10.40.0.2/; #Ip de Beta sur le bridge Alpha/Beta
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
ssl_certificate /etc/letsencrypt/live/address.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/address.fr/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
```