diff --git a/nginx/templates_reverse_proxy_https.md b/nginx/templates_reverse_proxy_https.md new file mode 100644 index 0000000..899271b --- /dev/null +++ b/nginx/templates_reverse_proxy_https.md @@ -0,0 +1,198 @@ +# 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; +} +``` +