« Proxy » : différence entre les versions

De Documentation
Aller à la navigationAller à la recherche
 
(27 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :


----
----
=Installation de nginx et de certbot dans un conteneur Alpine léger=
'''<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 !)


==nginx==
=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


  # apk update && apk upgrade
Installation de nginx et démarrage auto du service :
lxc exec proxy apk add nginx
lxc exec proxy rc-update add nginx


Installation de nginx
Mettre le conteneur en frontal ''(à partir de l'hôte)''
  # apk add nginx
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


Démarrage automatique du service :
Annuler le fichier de conf par défaut :
  # rc-update add nginx
lxc shell proxy
mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf.sav


Mettre le conteneur en frontal (à partir de l'hôte)
Créer les fichiers de configuration : <br>
  # 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
:* /etc/nginx/[[#le.conf|'''le.conf''']]
  # 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
:* /etc/nginx/[[#realip.conf|'''realip.conf''']]
:* /etc/nginx/[[#proxy_params|'''proxy_params''']]


Annuler le fichier de conf par défaut
Configurer les redirections (voir fichier complet [[#proxy.conf|plus bas]]) :
  # mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf.sav
vi /etc/nginx/http.d/'''proxy.conf'''


Configuration des redirections (voir fichier complet plus bas)
server {
  # vi /etc/nginx/http.d/proxy.conf
      listen 80 proxy_protocol;
 
      listen [::]:80 proxy_protocol;
  server {
        listen 80 proxy_protocol;
      server_name tables.lesitadom.fr;
        listen [::]:80 proxy_protocol;
 
      location / {
        server_name tables.lesitadom.fr;
              include /etc/nginx/proxy_params;
 
              proxy_pass <nowiki>http://tables.lxd</nowiki>;
        location / {
      }
                include /etc/nginx/proxy_params;
                proxy_pass http://tables.lxd;
      include /etc/nginx/realip.conf;
        }
}
 
        real_ip_header proxy_protocol;
        set_real_ip_from 127.0.0.1;
  }
...etc
...etc


Créer le fichier dans /etc/nginx/proxy_params
À l'usage, le module H5P de wordpress rame. Il semble qu'il faille charger le module de compression zip et configurer nginx :
  # vi /etc/nginx/proxy_params
apk add nginx-mod-http-zip


  proxy_set_header Host $http_host;
Dans le fichier /etc/nginx/'''nginx.conf''', ajouter :
  proxy_set_header X-Real-IP $remote_addr;
gzip on;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
gzip_types text/plain text/css application/json application/javascript application/xml application/xhtml+xml image/svg+xml;
  proxy_set_header X-Forwarded-Proto $scheme;
gzip_comp_level 5;
gzip_vary on;
gzip_min_length 1000;


Démarrer nginx
Démarrer nginx
  # rc-service nginx start
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
ou
</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  
(nom du conteneur nginx, plus correct dans la configuration conteneurs)
</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
rc-service apache2 restart


----
----
==Certbot==
 
=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 : on peut également ne générer qu'un certificat et configurer nginx à la main en lançant :
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'envoiyer des infos par E-mail
  - 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 recherche sur le net !!!!
   ==>> ! 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}}


Création d'un fichier /etc/nginx/le.conf avec :
==Avec '# certbot certonly --nginx'==


    ssl_certificate /etc/letsencrypt/live/lesitadom.fr/fullchain.pem;
Inclure le.conf et realip.conf dans chaque
    ssl_certificate_key /etc/letsencrypt/live/lesitadom.fr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
 
et d'un fichier /etc/nginx/realip.conf avec :
  real_ip_header proxy_protocol;                                                         
  set_real_ip_from 127.0.0.1;
 
et les inclure dans chaque


   server {
   server {
Ligne 158 : Ligne 166 :
   }
   }


Tester la validité des certificats :
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
pas possible, il faut préciser tous les sous-domaines à chaque fois (en rajoutant --expand, on met le certificat à jour ?)
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...
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==
=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.
# Chez l'hébergeur, ajouter une zone dns de type CNAME pour le sous-domaine qui pointe vers le domaine principal.
Ligne 194 : Ligne 202 :
# Ajouter le sous-domaine au certificat letsencrypt existant (--expand)
# Ajouter le sous-domaine au certificat letsencrypt existant (--expand)


==Fichiers de configuration==
=Fichiers de configuration=
===proxy.conf===
==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 |
   #_____________________________|
   #_____________________________|
Ligne 206 : Ligne 214 :
   listen [::]:80 proxy_protocol;
   listen [::]:80 proxy_protocol;
    
    
   server_name _;
   server_name .lesitadom.fr;
  if ($host = lesitadom.fr) {
   return 301 <nowiki>https://$host$request_uri</nowiki>;
   return 301 https://$host$request_uri;
 
  }
     server_name serveurdd.ddns.net;
 
        return 301 <nowiki>https://$host$request_uri</nowiki>;
     if ($host = bcd.lesitadom.fr) {
   
        return 301 https://$host$request_uri;
     server_name les-bosquets.fr;
    }
        return 301 <nowiki>https://$host$request_uri</nowiki>;
 
    if ($host = pmb.lesitadom.fr) {
        return 301 https://$host$request_uri;
    }
    if ($host = tables.lesitadom.fr) {
        return 301 https://$host$request_uri;
    }
     if ($host = wiki.lesitadom.fr) {
        return 301 https://$host$request_uri;
    }
    if ($host = wp.lesitadom.fr) {
        return 301 https://$host$request_uri;
    }
  if ($request_uri = tables){
  return 301 https://tables.lesitadom.fr;
  }
  if ($host = serveurdd.ddns.net) {
  return 301 https://lesitadom.fr$request_uri;
  }
  return 404;
   }
   }
    
    
   #____________________________________________________
   #______________________________________________________
   #                                                   |
   #                                                     |
   # Conteneur Racine : lesitadom.fr -> serveur virtuel |
   # Réécriture pour phpmyadmin, wordpress, tables et pmb |
   #____________________________________________________|
   #______________________________________________________|
 
   server {
   server {
   listen [::]:443 ssl proxy_protocol;
   listen [::]:443 ssl proxy_protocol;
Ligne 248 : Ligne 236 :
   include /etc/nginx/realip.conf;
   include /etc/nginx/realip.conf;
    
    
  server_name lesitadom.fr;
        server_name lesitadom.fr;                                                
  location / {
                location /phpma {                                                
              proxy_pass http://192.168.1.21;
                        return 302 <nowiki>https://phpma.lesitadom.fr</nowiki>;                   
              include /etc/nginx/proxy_params;
                }                                                                 
      }
                location /phpmyadmin {                             
                        return 302 <nowiki>https://phpma.lesitadom.fr</nowiki>;
                }                                                   
                location /wordpress {                         
                        return 302 <nowiki>https://wp.lesitadom.fr</nowiki>; 
                }                                                   
                location /wp {                               
                        return 302 <nowiki>https://wp.lesitadom.fr</nowiki>; 
                }                                             
                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;             
        }                                                     
  }             
   #______________________________________________________
   #______________________________________________________
   #                                                      |
   #                                                      |
Ligne 269 : Ligne 312 :
   server_name bcd.lesitadom.fr;
   server_name bcd.lesitadom.fr;
   location / {
   location / {
   root /var/www/localhost/htdocs/opac_css;
   return 302 <nowiki>https://pmb.lesitadom.fr/opac_css/</nowiki>;
  proxy_pass http://pmb.lxd;
  include /etc/nginx/proxy_params;
       }
       }
   }
   }
Ligne 287 : Ligne 328 :
   include /etc/nginx/realip.conf;
   include /etc/nginx/realip.conf;
    
    
   server_name pmb.lesitadom.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 306 : Ligne 347 :
   include /etc/nginx/realip.conf;
   include /etc/nginx/realip.conf;
    
    
   server_name tables.lesitadom.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 327 : 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 347 : 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;
       }
       }
  }
 
  #___________________________________________________               
  #                                                  |       
  # 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===
==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===
==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===
==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;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   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 :

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 redirection

 listen [::]: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

  1. Chez l'hébergeur, ajouter une zone dns de type CNAME pour le sous-domaine qui pointe vers le domaine principal.
  2. Modifier le fichier de configuration de nginx pour prendre le sous-domaine en compte (server_name ...), redémarrer nginx.
  3. 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;