« Proxy » : différence entre les versions
| (2 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 215 : | Ligne 215 : | ||
server_name .lesitadom.fr; | server_name .lesitadom.fr; | ||
return 301 https://$host$request_uri; | return 301 <nowiki>https://$host$request_uri</nowiki>; | ||
server_name serveurdd.ddns.net; | server_name serveurdd.ddns.net; | ||
return 301 https://$host$request_uri; | return 301 <nowiki>https://$host$request_uri</nowiki>; | ||
server_name les-bosquets.fr; | server_name les-bosquets.fr; | ||
return 301 https://$host$request_uri; | return 301 <nowiki>https://$host$request_uri</nowiki>; | ||
} | } | ||
| Ligne 238 : | Ligne 238 : | ||
server_name lesitadom.fr; | server_name lesitadom.fr; | ||
location /phpma { | location /phpma { | ||
return 302 https://phpma.lesitadom.fr; | return 302 <nowiki>https://phpma.lesitadom.fr</nowiki>; | ||
} | } | ||
location /phpmyadmin { | location /phpmyadmin { | ||
return 302 https://phpma.lesitadom.fr; | return 302 <nowiki>https://phpma.lesitadom.fr</nowiki>; | ||
} | } | ||
location /wordpress { | location /wordpress { | ||
return 302 https://wp.lesitadom.fr; | return 302 <nowiki>https://wp.lesitadom.fr</nowiki>; | ||
} | } | ||
location /wp { | location /wp { | ||
return 302 https://wp.lesitadom.fr; | return 302 <nowiki>https://wp.lesitadom.fr</nowiki>; | ||
} | } | ||
location /mediawiki { | location /mediawiki { | ||
return 302 https://wiki.lesitadom.fr; | return 302 <nowiki>https://wiki.lesitadom.fr</nowiki>; | ||
} | } | ||
location /wiki { | location /wiki { | ||
return 302 https://wiki.lesitadom.fr; | return 302 <nowiki>https://wiki.lesitadom.fr</nowiki>; | ||
} | } | ||
location /pmb { | location /pmb { | ||
return 302 https://pmb.lesitadom.fr; | return 302 <nowiki>https://pmb.lesitadom.fr</nowiki>; | ||
} | } | ||
location /bcd { | location /bcd { | ||
return 302 https://pmb.lesitadom.fr/opac_css; | return 302 <nowiki>https://pmb.lesitadom.fr/opac_css</nowiki>; | ||
} | } | ||
location /tables { | location /tables { | ||
return 302 https://tables.lesitadom.fr; | return 302 <nowiki>https://tables.lesitadom.fr</nowiki>; | ||
} | } | ||
location / { | location / { | ||
proxy_pass http://192.168.1.21; | proxy_pass <nowiki>http://192.168.1.21</nowiki>; | ||
include /etc/nginx/proxy_params; | include /etc/nginx/proxy_params; | ||
} | } | ||
location /*{ | location /*{ | ||
return 404; | return 404; | ||
} | |||
} | } | ||
#________________________________________________________ | #________________________________________________________ | ||
| Ligne 293 : | Ligne 294 : | ||
location /phpmyadmin { | location /phpmyadmin { | ||
proxy_pass http://phpma.lxd; | proxy_pass <nowiki>http://phpma.lxd</nowiki>; | ||
include /etc/nginx/proxy_params; | include /etc/nginx/proxy_params; | ||
} | } | ||
| Ligne 311 : | Ligne 312 : | ||
server_name bcd.lesitadom.fr; | server_name bcd.lesitadom.fr; | ||
location / { | location / { | ||
return 302 https://pmb.lesitadom.fr/opac_css/; | return 302 <nowiki>https://pmb.lesitadom.fr/opac_css/</nowiki>; | ||
} | } | ||
} | } | ||
| Ligne 329 : | Ligne 330 : | ||
server_name pmb.lesitadom.fr pmb.les-bosquets.fr; | server_name pmb.lesitadom.fr pmb.les-bosquets.fr; | ||
location / { | location / { | ||
proxy_pass http://pmb.lxd; | proxy_pass <nowiki>http://pmb.lxd</nowiki>; | ||
include /etc/nginx/proxy_params; | include /etc/nginx/proxy_params; | ||
} | } | ||
| Ligne 348 : | Ligne 349 : | ||
server_name tables.lesitadom.fr tables.les-bosquets.fr; | server_name tables.lesitadom.fr tables.les-bosquets.fr; | ||
location / { | location / { | ||
proxy_pass http://tables.lxd; | proxy_pass <nowiki>http://tables.lxd</nowiki>; | ||
include /etc/nginx/proxy_params; | include /etc/nginx/proxy_params; | ||
} | } | ||
| Ligne 367 : | Ligne 368 : | ||
server_name wiki.lesitadom.fr; | server_name wiki.lesitadom.fr; | ||
location / { | location / { | ||
proxy_pass http://wiki.lxd; | proxy_pass <nowiki>http://wiki.lxd</nowiki>; | ||
include /etc/nginx/proxy_params; | include /etc/nginx/proxy_params; | ||
} | } | ||
| Ligne 387 : | Ligne 388 : | ||
server_name wp.lesitadom.fr; | server_name wp.lesitadom.fr; | ||
location / { | location / { | ||
proxy_pass http://wp.lxd; | proxy_pass <nowiki>http://wp.lxd</nowiki>; | ||
include /etc/nginx/proxy_params; | include /etc/nginx/proxy_params; | ||
} | } | ||
| Ligne 404 : | Ligne 405 : | ||
server_name serveurdd.ddns.net; | server_name serveurdd.ddns.net; | ||
if ($request_uri = /tables){ | if ($request_uri = /tables){ | ||
return 301 https://tables.lesitadom.fr; | return 301 <nowiki>https://tables.lesitadom.fr</nowiki>; | ||
} | } | ||
if ($request_uri = /pmb){ | if ($request_uri = /pmb){ | ||
return 301 https://pmb.lesitadom.fr/opac_css/; | return 301 <nowiki>https://pmb.lesitadom.fr/opac_css/</nowiki>; | ||
} | } | ||
if ($request_uri = /pmb/admin.php){ | if ($request_uri = /pmb/admin.php){ | ||
return 301 https://pmb.lesitadom.fr; | return 301 <nowiki>https://pmb.lesitadom.fr</nowiki>; | ||
} | } | ||
if ($request_uri = /pmb/opac_css/index.php){ | if ($request_uri = /pmb/opac_css/index.php){ | ||
return 301 https://pmb.lesitadom.fr/opac_css/; | return 301 <nowiki>https://pmb.lesitadom.fr/opac_css/</nowiki>; | ||
} | } | ||
if ($request_uri = /mediawiki){ | if ($request_uri = /mediawiki){ | ||
return 301 https://wiki.lesitadom.fr; | return 301 <nowiki>https://wiki.lesitadom.fr</nowiki>; | ||
} | } | ||
return 301 https://lesitadom.fr; | return 301 <nowiki>https://lesitadom.fr</nowiki>; | ||
} | } | ||
| Ligne 437 : | Ligne 438 : | ||
server_name les-bosquets.fr; | server_name les-bosquets.fr; | ||
if ($request_uri = /tables){ | if ($request_uri = /tables){ | ||
return 302 https://tables.les-bosquets.fr; | return 302 <nowiki>https://tables.les-bosquets.fr</nowiki>; | ||
} | } | ||
if ($request_uri = /pmb){ | if ($request_uri = /pmb){ | ||
return 302 https://pmb.les-bosquets.fr/opac_css/; | return 302 <nowiki>https://pmb.les-bosquets.fr/opac_css/</nowiki>; | ||
} | } | ||
if ($request_uri = /adminbcd){ | if ($request_uri = /adminbcd){ | ||
return 302 https://pmb.les-bosquets.fr; | return 302 <nowiki>https://pmb.les-bosquets.fr</nowiki>; | ||
} | } | ||
if ($request_uri = /pmb/opac_css/index.php){ | if ($request_uri = /pmb/opac_css/index.php){ | ||
return 302 https://pmb.les-bosquets.fr/opac_css/; | return 302 <nowiki>https://pmb.les-bosquets.fr/opac_css/</nowiki>; | ||
} | } | ||
return 302 https://pmb.les-bosquets.fr/opac_css; | return 302 <nowiki>https://pmb.les-bosquets.fr/opac_css</nowiki>; | ||
} | } | ||
| Ligne 468 : | Ligne 469 : | ||
==proxy_params== | ==proxy_params== | ||
/etc/nginx/proxy_params | /etc/nginx/'''proxy_params''' | ||
proxy_redirect off; | proxy_redirect off; | ||
proxy_set_header Host $host; | proxy_set_header Host $host; | ||
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;