« Proxy » : différence entre les versions
| (31 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
---- | ---- | ||
'''<big>Installation de nginx et de certbot dans un conteneur Alpine léger</big>''' | |||
Pour que la redirection fonctionne, il faut ajouter un CNAME aux sous-domaines et non les rediriger (réécriture de la requête sinon, et échec !) | Pour que la redirection fonctionne, il faut ajouter un CNAME aux sous-domaines et non les rediriger (réécriture de la requête sinon, et échec !) | ||
== | =Création du conteneur et installation d'Nginx= | ||
Création et mise à jour du conteneur : | |||
lxc launch proxy locale:alpineLe | |||
lxc exec proxy apk update | |||
lxc exec proxy apk upgrade | |||
Installation de nginx et démarrage auto du service : | |||
lxc exec proxy apk add nginx | |||
lxc exec proxy rc-update add nginx | |||
Mettre le conteneur en frontal ''(à partir de l'hôte)'' | |||
lxc config device add ''nom_du_conteneur'' myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80 proxy_protocol=true | |||
lxc config device add ''nom_du_conteneur'' myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443 proxy_protocol=true | |||
Annuler le fichier de conf par défaut : | |||
lxc shell proxy | |||
mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf.sav | |||
Créer les fichiers de configuration : <br> | |||
:* /etc/nginx/[[#le.conf|'''le.conf''']] | |||
:* /etc/nginx/[[#realip.conf|'''realip.conf''']] | |||
:* /etc/nginx/[[#proxy_params|'''proxy_params''']] | |||
Configurer les redirections (voir fichier complet [[#proxy.conf|plus bas]]) : | |||
vi /etc/nginx/http.d/'''proxy.conf''' | |||
server { | |||
listen 80 proxy_protocol; | |||
listen [::]:80 proxy_protocol; | |||
server_name tables.lesitadom.fr; | |||
location / { | |||
include /etc/nginx/proxy_params; | |||
proxy_pass <nowiki>http://tables.lxd</nowiki>; | |||
} | |||
include /etc/nginx/realip.conf; | |||
} | |||
...etc | ...etc | ||
À l'usage, le module H5P de wordpress rame. Il semble qu'il faille charger le module de compression zip et configurer nginx : | |||
apk add nginx-mod-http-zip | |||
Dans le fichier /etc/nginx/'''nginx.conf''', ajouter : | |||
gzip on; | |||
gzip_types text/plain text/css application/json application/javascript application/xml application/xhtml+xml image/svg+xml; | |||
gzip_comp_level 5; | |||
gzip_vary on; | |||
gzip_min_length 1000; | |||
Démarrer nginx | Démarrer nginx | ||
rc-service nginx start | |||
Reconfigurer les autres conteneurs pour mettre la nouvelle adresse (fichier remoteip.conf) | Reconfigurer les autres conteneurs pour mettre la nouvelle adresse (fichier remoteip.conf) | ||
Sur chaque conteneur client : | Sur chaque conteneur client : | ||
création du fichier /etc/apache2/conf.d/remoteip.conf avec : | création du fichier /etc/apache2/conf.d/'''remoteip.conf''' avec : | ||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
/etc/apache2/conf.d/'''remoteip.conf''' | |||
<div class="mw-collapsible-content"> | |||
RemoteIPHeader X-Real-IP | RemoteIPHeader X-Real-IP | ||
RemoteIPTrustedProxy 10.178.91.45 fd42:b9ca:1a60:95fc:216:3eff:fe71:850f | RemoteIPTrustedProxy 10.178.91.45 fd42:b9ca:1a60:95fc:216:3eff:fe71:850f | ||
</div></div> | |||
Pour une configuration en mode conteneur : | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
/etc/apache2/conf.d/'''remoteip.conf''' | |||
<div class="mw-collapsible-content"> | |||
RemoteIPHeader X-Real-IP | RemoteIPHeader X-Real-IP | ||
RemoteIPTrustedProxy proxy.lxd | RemoteIPTrustedProxy proxy.lxd | ||
</div></div> | |||
Modification de /etc/apache2/httpd.conf | Modification de /etc/apache2/httpd.conf | ||
décommenter : | décommenter : | ||
| Ligne 67 : | Ligne 80 : | ||
Relancer les services apache2 | Relancer les services apache2 | ||
rc-service apache2 restart | |||
---- | ---- | ||
= | |||
=Certificats Let'sEncrypt avec Certbot= | |||
(cf. https://certbot.eff.org/instructions) | (cf. https://certbot.eff.org/instructions) | ||
| Ligne 84 : | Ligne 98 : | ||
# ln -s /opt/certbot/bin/certbot /usr/bin/certbot | # ln -s /opt/certbot/bin/certbot /usr/bin/certbot | ||
(Raspberry configuré pour écouter 80 et 443) | (Raspberry est configuré pour écouter 80 et 443) | ||
Configuration automatique d'nginx | Configuration automatique d'nginx | ||
# certbot --nginx | # certbot --nginx | ||
Remarque : | Remarque : On peut également ne générer qu'un certificat et configurer nginx à la main en lançant : | ||
# certbot certonly --nginx | # certbot certonly --nginx | ||
Cette procédure est préférable. Elle evite de voir Certbot mettre le bazar dans le fichier de configuration d'nginx. | |||
Le processus demande | Le processus demande | ||
- une adresse mail | - une adresse mail | ||
- l'acceptation des conditions générales d'utilisation | - l'acceptation des conditions générales d'utilisation | ||
- l'autorisation d' | - l'autorisation d'envoyer des infos par E-mail | ||
- indiquer quels serveurs doivent être en HTTPS (se base sur le fichier de configuration de nginx : proxy.conf ici) | - indiquer quels serveurs doivent être en HTTPS (se base sur le fichier de configuration de nginx : proxy.conf ici) | ||
| Ligne 107 : | Ligne 122 : | ||
(vérifier si certbot ne fout pas le bordel dans le fichier de conf d'nginx : faire un fichier de sauvegarde fonctionnel avant...) | (vérifier si certbot ne fout pas le bordel dans le fichier de conf d'nginx : faire un fichier de sauvegarde fonctionnel avant...) | ||
{{replier | Si on choisit la configuration automatique (à éviter si possible)}} | |||
==Ajouté automatiquement dans la conf de chaque redirection== | ==Ajouté automatiquement dans la conf de chaque redirection== | ||
listen [::]:443 ssl ipv6only=on; # managed by Certbot | listen [::]:443 ssl ipv6only=on; # managed by Certbot | ||
| Ligne 130 : | Ligne 146 : | ||
!!!! Certbot modifie le fichier de configuration d'nginx, mais ne met pas 'proxy_protocol' à la fin des directives d'écoute. | !!!! Certbot modifie le fichier de configuration d'nginx, mais ne met pas 'proxy_protocol' à la fin des directives d'écoute. | ||
==>> ! il faut le rajouter à la main, sinon rien ne fonctionne et on est bon pour trois jours de | ==>> ! il faut le rajouter à la main, sinon rien ne fonctionne et on est bon pour trois jours de recherches sur le net !!!! | ||
"Managed by Certbot" comme un con et codé avec les pieds !!! | "Managed by Certbot" comme un con et codé avec les pieds !!! | ||
{{replier fin}} | |||
==Avec '# certbot certonly --nginx'== | |||
et | Inclure le.conf et realip.conf dans chaque | ||
server { | server { | ||
| Ligne 158 : | Ligne 166 : | ||
} | } | ||
Pour tester la validité des certificats : | |||
https://www.ssllabs.com/ssltest/index.html | https://www.ssllabs.com/ssltest/index.html | ||
https://www.sslshopper.com/ssl-checker.html | https://www.sslshopper.com/ssl-checker.html | ||
==Commandes utiles== | |||
Pour lister les certificats : | Pour '''lister''' les certificats : | ||
# certbot certificates | # certbot certificates | ||
| Ligne 170 : | Ligne 178 : | ||
# certbot certificates --cert-name lesitadom.fr | # certbot certificates --cert-name lesitadom.fr | ||
Pour ajouter ou retirer un sous-domaine du certificat : | Pour '''ajouter''' ou '''retirer''' un sous-domaine du certificat : | ||
# certbot certonly --cert-name <nom du certificat> -d <liste du domaine et des sous-domaines à inclure, séparés par ','> | # certbot certonly --cert-name <nom du certificat> -d <liste du domaine et des sous-domaines à inclure, séparés par ','> | ||
| Ligne 177 : | Ligne 185 : | ||
(ne garde que le domaine principal et les sous-domaines 'bcd' et 'phpma') | (ne garde que le domaine principal et les sous-domaines 'bcd' et 'phpma') | ||
Renouveler le certificat | '''Renouveler''' le certificat | ||
Ajouter un sous-domaine | '''Ajouter''' un sous-domaine | ||
Impossible simplement, il faut préciser tous les sous-domaines à chaque fois (en rajoutant --expand, on met le certificat à jour) | |||
Exemple : | Exemple : | ||
# certbot certonly --expand --cert-name lesitadom.fr -d lesitadom.fr,bcd.lesitadom.fr,phpma.lesitadom.fr,[sous-domaines à ajouter séparés par une ','] | # certbot certonly --expand --cert-name lesitadom.fr -d lesitadom.fr,bcd.lesitadom.fr,phpma.lesitadom.fr,''[sous-domaines à ajouter séparés par une ',']'' | ||
-> Choix 1 : Nginx web server | -> Choix 1 : Nginx web server | ||
-> Vérifier la mise à jour puis "u" (update) | -> Vérifier la mise à jour puis "u" (update) | ||
Il peut être judicieux d'ajouter '--dry-run -v' pour simuler la commande en mode verbiage avant de lancer une commande effective... | |||
- | =Procédure pour les sous-domaines= | ||
# Chez l'hébergeur, ajouter une zone dns de type CNAME pour le sous-domaine qui pointe vers le domaine principal. | |||
# Modifier le fichier de configuration de nginx pour prendre le sous-domaine en compte (server_name ...), redémarrer nginx. | |||
# Ajouter le sous-domaine au certificat letsencrypt existant (--expand) | |||
=Fichiers de configuration= | |||
==proxy.conf== | |||
/etc/nginx/http.d/proxy.conf (copie proxy.sav) | /etc/nginx/http.d/proxy.conf (copie proxy.sav) | ||
#_____________________________ | #_____________________________ | ||
# | # | | ||
# Redirection http vers https | | # Redirection http vers https | | ||
#_____________________________| | #_____________________________| | ||
server { | server { | ||
listen 80 proxy_protocol; | |||
listen [::]:80 proxy_protocol; | |||
server_name .lesitadom.fr; | |||
return 301 <nowiki>https://$host$request_uri</nowiki>; | |||
server_name serveurdd.ddns.net; | |||
return 301 <nowiki>https://$host$request_uri</nowiki>; | |||
server_name les-bosquets.fr; | |||
return 301 <nowiki>https://$host$request_uri</nowiki>; | |||
} | |||
#______________________________________________________ | |||
# | | |||
# Réécriture pour phpmyadmin, wordpress, tables et pmb | | |||
#______________________________________________________| | |||
server { | |||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
include /etc/nginx/le.conf; | |||
include /etc/nginx/realip.conf; | |||
server_name lesitadom.fr; | |||
location /phpma { | |||
return 302 <nowiki>https://phpma.lesitadom.fr</nowiki>; | |||
} | |||
location /phpmyadmin { | |||
return 302 <nowiki>https://phpma.lesitadom.fr</nowiki>; | |||
} | } | ||
location /wordpress { | |||
# | return 302 <nowiki>https://wp.lesitadom.fr</nowiki>; | ||
# | } | ||
# Conteneur | location /wp { | ||
# | return 302 <nowiki>https://wp.lesitadom.fr</nowiki>; | ||
} | |||
server { | location /mediawiki { | ||
return 302 <nowiki>https://wiki.lesitadom.fr</nowiki>; | |||
} | |||
location /wiki { | |||
return 302 <nowiki>https://wiki.lesitadom.fr</nowiki>; | |||
} | |||
location /pmb { | |||
return 302 <nowiki>https://pmb.lesitadom.fr</nowiki>; | |||
} | |||
location /bcd { | |||
return 302 <nowiki>https://pmb.lesitadom.fr/opac_css</nowiki>; | |||
} | |||
location /tables { | |||
return 302 <nowiki>https://tables.lesitadom.fr</nowiki>; | |||
} | |||
location / { | |||
proxy_pass <nowiki>http://192.168.1.21</nowiki>; | |||
include /etc/nginx/proxy_params; | |||
} | |||
location /*{ | |||
return 404; | |||
} | |||
} | |||
#________________________________________________________ | |||
# | | |||
# Conteneur phpMyAdmin : phpma.lesitadom.fr -> phpma.lxd | | |||
#________________________________________________________| | |||
server { | |||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
allow 192.168.1.0/24; | |||
deny all; | |||
include /etc/nginx/le.conf; | |||
include /etc/nginx/realip.conf; | |||
server_name phpma.lesitadom.fr; | |||
location / { | |||
rewrite ^/$ /phpmyadmin last; | |||
} | |||
location /phpmyadmin { | |||
proxy_pass <nowiki>http://phpma.lxd</nowiki>; | |||
include /etc/nginx/proxy_params; | |||
} | |||
} | |||
#______________________________________________________ | |||
# | | |||
# Conteneur PMB : bcd.lesitadom.fr -> pmb.lxd opac_css | | |||
#______________________________________________________| | |||
server { | |||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
include /etc/nginx/le.conf; | |||
include /etc/nginx/realip.conf; | |||
server_name bcd.lesitadom.fr; | |||
location / { | |||
return 302 <nowiki>https://pmb.lesitadom.fr/opac_css/</nowiki>; | |||
} | } | ||
} | } | ||
# | #___________________________________________________ | ||
# | # | | ||
# Conteneur PMB : | # Conteneur PMB admin : pmb.lesitadom.fr -> pmb.lxd | | ||
# | #___________________________________________________| | ||
server { | server { | ||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
include /etc/nginx/le.conf; | |||
include /etc/nginx/realip.conf; | |||
server_name pmb.lesitadom.fr pmb.les-bosquets.fr; | |||
location / { | |||
proxy_pass <nowiki>http://pmb.lxd</nowiki>; | |||
include /etc/nginx/proxy_params; | |||
} | } | ||
} | } | ||
# | #______________________________________________________ | ||
# | # | | ||
# Conteneur | # Conteneur Tables : tables.lesitadom.fr -> tables.lxd | | ||
# | #______________________________________________________| | ||
server { | server { | ||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
include /etc/nginx/le.conf; | |||
include /etc/nginx/realip.conf; | |||
server_name tables.lesitadom.fr tables.les-bosquets.fr; | |||
location / { | |||
proxy_pass <nowiki>http://tables.lxd</nowiki>; | |||
include /etc/nginx/proxy_params; | |||
} | } | ||
} | } | ||
# | #_____________________________________________________ | ||
# | # | | ||
# Conteneur | # Conteneur Wikimedia : wiki.lesitadom.fr -> wiki.lxd | | ||
# | #_____________________________________________________| | ||
server { | server { | ||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
include /etc/nginx/le.conf; | |||
include /etc/nginx/realip.conf; | |||
server_name wiki.lesitadom.fr; | |||
location / { | |||
proxy_pass <nowiki>http://wiki.lxd</nowiki>; | |||
include /etc/nginx/proxy_params; | |||
} | } | ||
} | } | ||
#__________________________________________________ | |||
# | | |||
# Conteneur Wordrpress : wp.lesitadom.fr -> wp.lxd | | |||
#__________________________________________________| | |||
server { | |||
#__________________________________________________ | |||
# | | |||
# Conteneur Wordrpress : wp.lesitadom.fr -> wp.lxd | | |||
#__________________________________________________| | |||
server { | |||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
include /etc/nginx/le.conf; | |||
include /etc/nginx/realip.conf; | |||
server_name wp.lesitadom.fr; | |||
location / { | |||
proxy_pass <nowiki>http://wp.lxd</nowiki>; | |||
include /etc/nginx/proxy_params; | |||
} | } | ||
} | } | ||
#___________________________________________________ | |||
# | | |||
# Redirection de serveurdd.ddns.net -> lesitadom.fr | | |||
#___________________________________________________| | |||
server { | |||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
server_name serveurdd.ddns.net; | |||
if ($request_uri = /tables){ | |||
return 301 <nowiki>https://tables.lesitadom.fr</nowiki>; | |||
} | |||
if ($request_uri = /pmb){ | |||
return 301 <nowiki>https://pmb.lesitadom.fr/opac_css/</nowiki>; | |||
} | |||
if ($request_uri = /pmb/admin.php){ | |||
return 301 <nowiki>https://pmb.lesitadom.fr</nowiki>; | |||
} | |||
if ($request_uri = /pmb/opac_css/index.php){ | |||
return 301 <nowiki>https://pmb.lesitadom.fr/opac_css/</nowiki>; | |||
} | |||
if ($request_uri = /mediawiki){ | |||
return 301 <nowiki>https://wiki.lesitadom.fr</nowiki>; | |||
} | |||
return 301 <nowiki>https://lesitadom.fr</nowiki>; | |||
} | |||
#________________________________________________ | |||
# | | |||
# Redirection de les-bosquets.fr -> lesitadom.fr | | |||
#________________________________________________| | |||
server { | |||
listen [::]:443 ssl proxy_protocol; | |||
listen 443 ssl proxy_protocol; | |||
server_name les-bosquets.fr; | |||
if ($request_uri = /tables){ | |||
return 302 <nowiki>https://tables.les-bosquets.fr</nowiki>; | |||
} | |||
if ($request_uri = /pmb){ | |||
return 302 <nowiki>https://pmb.les-bosquets.fr/opac_css/</nowiki>; | |||
} | |||
if ($request_uri = /adminbcd){ | |||
return 302 <nowiki>https://pmb.les-bosquets.fr</nowiki>; | |||
} | |||
if ($request_uri = /pmb/opac_css/index.php){ | |||
return 302 <nowiki>https://pmb.les-bosquets.fr/opac_css/</nowiki>; | |||
} | |||
return 302 <nowiki>https://pmb.les-bosquets.fr/opac_css</nowiki>; | |||
} | |||
==le.conf== | |||
/etc/nginx/le.conf | /etc/nginx/'''le.conf''' | ||
ssl_certificate /etc/letsencrypt/live/lesitadom.fr/fullchain.pem; | ssl_certificate /etc/letsencrypt/live/lesitadom.fr/fullchain.pem; | ||
ssl_certificate_key /etc/letsencrypt/live/lesitadom.fr/privkey.pem; | ssl_certificate_key /etc/letsencrypt/live/lesitadom.fr/privkey.pem; | ||
include /etc/letsencrypt/options-ssl-nginx.conf; | include /etc/letsencrypt/options-ssl-nginx.conf; | ||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; | ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; | ||
==realip.conf== | |||
/etc/nginx/realip.conf | /etc/nginx/'''realip.conf''' | ||
real_ip_header proxy_protocol; | real_ip_header proxy_protocol; | ||
set_real_ip_from 127.0.0.1 | set_real_ip_from 127.0.0.1; | ||
==proxy_params== | |||
/etc/nginx/'''proxy_params''' | |||
proxy_redirect off; | |||
proxy_set_header Host $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; | |||
Dernière version du 14 mai 2025 à 14:04
Installation de nginx et de certbot dans un conteneur Alpine léger
Pour que la redirection fonctionne, il faut ajouter un CNAME aux sous-domaines et non les rediriger (réécriture de la requête sinon, et échec !)
Création du conteneur et installation d'Nginx
Création et mise à jour du conteneur :
lxc launch proxy locale:alpineLe lxc exec proxy apk update lxc exec proxy apk upgrade
Installation de nginx et démarrage auto du service :
lxc exec proxy apk add nginx lxc exec proxy rc-update add nginx
Mettre le conteneur en frontal (à partir de l'hôte)
lxc config device add nom_du_conteneur myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80 proxy_protocol=true lxc config device add nom_du_conteneur myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443 proxy_protocol=true
Annuler le fichier de conf par défaut :
lxc shell proxy mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf.sav
Créer les fichiers de configuration :
- /etc/nginx/le.conf
- /etc/nginx/realip.conf
- /etc/nginx/proxy_params
Configurer les redirections (voir fichier complet plus bas) :
vi /etc/nginx/http.d/proxy.conf
server {
listen 80 proxy_protocol;
listen [::]:80 proxy_protocol;
server_name tables.lesitadom.fr;
location / {
include /etc/nginx/proxy_params;
proxy_pass http://tables.lxd;
}
include /etc/nginx/realip.conf;
}
...etc
À l'usage, le module H5P de wordpress rame. Il semble qu'il faille charger le module de compression zip et configurer nginx :
apk add nginx-mod-http-zip
Dans le fichier /etc/nginx/nginx.conf, ajouter :
gzip on; gzip_types text/plain text/css application/json application/javascript application/xml application/xhtml+xml image/svg+xml; gzip_comp_level 5; gzip_vary on; gzip_min_length 1000;
Démarrer nginx
rc-service nginx start
Reconfigurer les autres conteneurs pour mettre la nouvelle adresse (fichier remoteip.conf) Sur chaque conteneur client : création du fichier /etc/apache2/conf.d/remoteip.conf avec :
/etc/apache2/conf.d/remoteip.conf
RemoteIPHeader X-Real-IP RemoteIPTrustedProxy 10.178.91.45 fd42:b9ca:1a60:95fc:216:3eff:fe71:850f
Pour une configuration en mode conteneur :
/etc/apache2/conf.d/remoteip.conf
RemoteIPHeader X-Real-IP RemoteIPTrustedProxy proxy.lxd
Modification de /etc/apache2/httpd.conf décommenter :
LoadModule remoteip_module modules/mod_remoteip.so
Relancer les services apache2
rc-service apache2 restart
Certificats Let'sEncrypt avec Certbot
(cf. https://certbot.eff.org/instructions)
Création d'un environnement virtuel pour certbot
# apk add python3 augeas-libs # python3 -m venv /opt/certbot/ # /opt/certbot/bin/pip install --upgrade pip
Installer certbot dans l'environnement créé :
# /opt/certbot/bin/pip install certbot certbot-nginx
Préparer la commande certbot :
# ln -s /opt/certbot/bin/certbot /usr/bin/certbot
(Raspberry est configuré pour écouter 80 et 443)
Configuration automatique d'nginx
# certbot --nginx
Remarque : On peut également ne générer qu'un certificat et configurer nginx à la main en lançant :
# certbot certonly --nginx
Cette procédure est préférable. Elle evite de voir Certbot mettre le bazar dans le fichier de configuration d'nginx.
Le processus demande
- une adresse mail - l'acceptation des conditions générales d'utilisation - l'autorisation d'envoyer des infos par E-mail - indiquer quels serveurs doivent être en HTTPS (se base sur le fichier de configuration de nginx : proxy.conf ici)
Automatiser la mise à jour du certificat :
# echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | tee -a /etc/crontabs/root > /dev/null
ou éditer cron et ajouter :
0 0 1 */2 * certbot renew # crontab -e 0 0 1 */2 * certbot renew -q (pour quiet)
(vérifier si certbot ne fout pas le bordel dans le fichier de conf d'nginx : faire un fichier de sauvegarde fonctionnel avant...)
| Si on choisit la configuration automatique (à éviter si possible) |
|---|
Ajouté automatiquement dans la conf de chaque redirectionlisten [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/lesitadom.fr/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/lesitadom.fr/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot Et pour chaque bloc serveur, la conf correspondante (redirection permanente) server {
if ($host = lesitadom.fr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 proxy_protocol;
listen [::]:80 proxy_protocol;
server_name lesitadom.fr;
return 404; # managed by Certbot
}
!!!! Certbot modifie le fichier de configuration d'nginx, mais ne met pas 'proxy_protocol' à la fin des directives d'écoute. ==>> ! il faut le rajouter à la main, sinon rien ne fonctionne et on est bon pour trois jours de recherches sur le net !!!! "Managed by Certbot" comme un con et codé avec les pieds !!! |
Avec '# certbot certonly --nginx'
Inclure le.conf et realip.conf dans chaque
server {
listen [::]:443 ssl ipv6only=on proxy_protocol;
listen 443 ssl proxy_protocol;
include /etc/nginx/le.conf;
server_name toto.lesitadom.fr;
location / {
...
}
include /etc/nginx/realip.conf;
}
Pour tester la validité des certificats :
https://www.ssllabs.com/ssltest/index.html https://www.sslshopper.com/ssl-checker.html
Commandes utiles
Pour lister les certificats :
# certbot certificates
pour lister les sous-domaines inclus :
# certbot certificates --cert-name lesitadom.fr
Pour ajouter ou retirer un sous-domaine du certificat :
# certbot certonly --cert-name <nom du certificat> -d <liste du domaine et des sous-domaines à inclure, séparés par ','>
Exemple :
# certbot certonly --cert-name lesitadom.fr -d lesitadom.fr,bcd.lesitadom.fr,phpma.lesitadom.fr
(ne garde que le domaine principal et les sous-domaines 'bcd' et 'phpma')
Renouveler le certificat
Ajouter un sous-domaine Impossible simplement, il faut préciser tous les sous-domaines à chaque fois (en rajoutant --expand, on met le certificat à jour) Exemple :
# certbot certonly --expand --cert-name lesitadom.fr -d lesitadom.fr,bcd.lesitadom.fr,phpma.lesitadom.fr,[sous-domaines à ajouter séparés par une ',']
-> Choix 1 : Nginx web server -> Vérifier la mise à jour puis "u" (update) Il peut être judicieux d'ajouter '--dry-run -v' pour simuler la commande en mode verbiage avant de lancer une commande effective...
Procédure pour les sous-domaines
- Chez l'hébergeur, ajouter une zone dns de type CNAME pour le sous-domaine qui pointe vers le domaine principal.
- Modifier le fichier de configuration de nginx pour prendre le sous-domaine en compte (server_name ...), redémarrer nginx.
- Ajouter le sous-domaine au certificat letsencrypt existant (--expand)
Fichiers de configuration
proxy.conf
/etc/nginx/http.d/proxy.conf (copie proxy.sav)
#_____________________________
# |
# Redirection http vers https |
#_____________________________|
server {
listen 80 proxy_protocol;
listen [::]:80 proxy_protocol;
server_name .lesitadom.fr;
return 301 https://$host$request_uri;
server_name serveurdd.ddns.net;
return 301 https://$host$request_uri;
server_name les-bosquets.fr;
return 301 https://$host$request_uri;
}
#______________________________________________________
# |
# Réécriture pour phpmyadmin, wordpress, tables et pmb |
#______________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
include /etc/nginx/le.conf;
include /etc/nginx/realip.conf;
server_name lesitadom.fr;
location /phpma {
return 302 https://phpma.lesitadom.fr;
}
location /phpmyadmin {
return 302 https://phpma.lesitadom.fr;
}
location /wordpress {
return 302 https://wp.lesitadom.fr;
}
location /wp {
return 302 https://wp.lesitadom.fr;
}
location /mediawiki {
return 302 https://wiki.lesitadom.fr;
}
location /wiki {
return 302 https://wiki.lesitadom.fr;
}
location /pmb {
return 302 https://pmb.lesitadom.fr;
}
location /bcd {
return 302 https://pmb.lesitadom.fr/opac_css;
}
location /tables {
return 302 https://tables.lesitadom.fr;
}
location / {
proxy_pass http://192.168.1.21;
include /etc/nginx/proxy_params;
}
location /*{
return 404;
}
}
#________________________________________________________
# |
# Conteneur phpMyAdmin : phpma.lesitadom.fr -> phpma.lxd |
#________________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
allow 192.168.1.0/24;
deny all;
include /etc/nginx/le.conf;
include /etc/nginx/realip.conf;
server_name phpma.lesitadom.fr;
location / {
rewrite ^/$ /phpmyadmin last;
}
location /phpmyadmin {
proxy_pass http://phpma.lxd;
include /etc/nginx/proxy_params;
}
}
#______________________________________________________
# |
# Conteneur PMB : bcd.lesitadom.fr -> pmb.lxd opac_css |
#______________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
include /etc/nginx/le.conf;
include /etc/nginx/realip.conf;
server_name bcd.lesitadom.fr;
location / {
return 302 https://pmb.lesitadom.fr/opac_css/;
}
}
#___________________________________________________
# |
# Conteneur PMB admin : pmb.lesitadom.fr -> pmb.lxd |
#___________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
include /etc/nginx/le.conf;
include /etc/nginx/realip.conf;
server_name pmb.lesitadom.fr pmb.les-bosquets.fr;
location / {
proxy_pass http://pmb.lxd;
include /etc/nginx/proxy_params;
}
}
#______________________________________________________
# |
# Conteneur Tables : tables.lesitadom.fr -> tables.lxd |
#______________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
include /etc/nginx/le.conf;
include /etc/nginx/realip.conf;
server_name tables.lesitadom.fr tables.les-bosquets.fr;
location / {
proxy_pass http://tables.lxd;
include /etc/nginx/proxy_params;
}
}
#_____________________________________________________
# |
# Conteneur Wikimedia : wiki.lesitadom.fr -> wiki.lxd |
#_____________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
include /etc/nginx/le.conf;
include /etc/nginx/realip.conf;
server_name wiki.lesitadom.fr;
location / {
proxy_pass http://wiki.lxd;
include /etc/nginx/proxy_params;
}
}
#__________________________________________________
# |
# Conteneur Wordrpress : wp.lesitadom.fr -> wp.lxd |
#__________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
include /etc/nginx/le.conf;
include /etc/nginx/realip.conf;
server_name wp.lesitadom.fr;
location / {
proxy_pass http://wp.lxd;
include /etc/nginx/proxy_params;
}
}
#___________________________________________________
# |
# Redirection de serveurdd.ddns.net -> lesitadom.fr |
#___________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
server_name serveurdd.ddns.net;
if ($request_uri = /tables){
return 301 https://tables.lesitadom.fr;
}
if ($request_uri = /pmb){
return 301 https://pmb.lesitadom.fr/opac_css/;
}
if ($request_uri = /pmb/admin.php){
return 301 https://pmb.lesitadom.fr;
}
if ($request_uri = /pmb/opac_css/index.php){
return 301 https://pmb.lesitadom.fr/opac_css/;
}
if ($request_uri = /mediawiki){
return 301 https://wiki.lesitadom.fr;
}
return 301 https://lesitadom.fr;
}
#________________________________________________
# |
# Redirection de les-bosquets.fr -> lesitadom.fr |
#________________________________________________|
server {
listen [::]:443 ssl proxy_protocol;
listen 443 ssl proxy_protocol;
server_name les-bosquets.fr;
if ($request_uri = /tables){
return 302 https://tables.les-bosquets.fr;
}
if ($request_uri = /pmb){
return 302 https://pmb.les-bosquets.fr/opac_css/;
}
if ($request_uri = /adminbcd){
return 302 https://pmb.les-bosquets.fr;
}
if ($request_uri = /pmb/opac_css/index.php){
return 302 https://pmb.les-bosquets.fr/opac_css/;
}
return 302 https://pmb.les-bosquets.fr/opac_css;
}
le.conf
/etc/nginx/le.conf
ssl_certificate /etc/letsencrypt/live/lesitadom.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/lesitadom.fr/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
realip.conf
/etc/nginx/realip.conf
real_ip_header proxy_protocol; set_real_ip_from 127.0.0.1;
proxy_params
/etc/nginx/proxy_params
proxy_redirect off; proxy_set_header Host $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;