Usine

Un wiki à l'usine !

Outils pour utilisateurs

Outils du site


frontal_web

Ceci est une ancienne révision du document !


Frontal web (reverse proxy) chiffrant avec nginx

On utilise nginx (du paquet Debian nginx-light).

Utilisé en parallèle avec Let's Encrypt.

Modifications de configuration

Décommenter server_names_hash_bucket_size 64; car très vite nécessaire.

Problèmes de buffering :

        # buffering causes issues, disable it
        # increase buffer size. still useful even when buffering is off
        proxy_buffering off;
        proxy_buffer_size 4k;

VHosts reverse-proxy

On utilise un petit script qui va générer les fichiers de configuration à partir d'un template. Comme cela, une modification du template sera bien répercutée partout. Au cas où un site aurait besoin d'une configuration spécifique, le template inclue des paramétrages supplémentaires (dans un nouveau dossier /etc/nginx/sites-customizations/) si existants.

Nous avons mis notre partie spécifique dans /etc/nginx/usine.

/etc/nginx/usine/vhost.tpl
server {
    listen                  80;
    listen                  [::]:80;
    server_name             %SERVERS%;
    include                 conf.d/acme.inc;
    include                 conf.d/redirect_https.inc;
    access_log              /var/log/nginx/vhosts/%FIRST_SERVER%/access.log main;
    error_log               /var/log/nginx/vhosts/%FIRST_SERVER%/error.log error;
}
 
server {
    listen                  443 ssl http2;
    listen                  [::]:443 ssl http2;
    server_name             %SERVERS%;
    ssl_certificate         /etc/letsencrypt/live/%FIRST_SERVER%/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/%FIRST_SERVER%/privkey.pem;
 
    include /etc/nginx/conf.d/ssl-params.inc; # SSL parameters
 
    location / {
        include     conf.d/proxy_set_headers.inc;
        proxy_pass  %PROXY%;
    }
 
    access_log              /var/log/nginx/vhosts/%FIRST_SERVER%/access.log main;
    error_log               /var/log/nginx/vhosts/%FIRST_SERVER%/error.log error;
 
    include /etc/nginx/sites-customizations/%FIRST_SERVER%.*.conf;
}

Et le petit script de génération :

/etc/nginx/usine/gen.sh
#!/bin/sh
 
cat proxy-list | while read p; do
  proxy=$(echo $p | cut -d ' ' -f1)
  servers=$(echo $p | cut -d ' ' -f2-)
  first_server=$(echo $p | cut -d ' ' -f2)
  conf=/etc/nginx/sites-available/$first_server.conf
  cp vhost.tpl $conf
  sed -i "s~%PROXY%~$proxy~g" $conf
  sed -i "s~%SERVERS%~$servers~g" $conf
  sed -i "s~%FIRST_SERVER%~$first_server~g" $conf
 
  mkdir -p /var/log/nginx/vhosts/$first_server/
done

Exemple de ligne de la liste des proxy dans le fichier /etc/nginx/usine/proxy-list :

http://192.168.1.71:80 wiki.usine.michalon.eu

Ajout d'un nouveau VHost

Procédure :

sudo certbot --rsa-key-size 4096 --nginx -d mon-super-domaine.rocks
 
cd /etc/nginx/usine
 
sudo nano proxy-list
=> rajouter le proxy
 
sudo ./gen.sh
 
sudo ln -s /etc/nginx/sites-available/mon-super-domaine.rocks.conf /etc/nginx/sites-enabled/
 
sudo service nginx reload

VHost par défaut (catch-all)

Il s'agit d'un VHost qui sera utilisé pour toutes les requêtes qui n'appartiennent pas à un autre VHost (accès direct par l'IP, nom de domaine inconnu du serveur, …). Sans cela nginx utilisera le premier VHost (par ordre lexicographique) configuré.

On peut utiliser le certificat snakeoil créé par le paquet ssl-cert car de toutes façons il sera invalide.

Exemple de configuration :

server {
    listen                  80 default_server;
    listen                  [::]:80 default_server;
    listen                  443 ssl http2 default_server;
    listen                  [::]:443 ssl http2 default_server;
    server_name             _;
    ssl_certificate         /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key     /etc/ssl/private/ssl-cert-snakeoil.key;
 
    include /etc/nginx/conf.d/ssl-params.inc; # SSL parameters
 
    return 404; # or whatever
}
frontal_web.1615457993.txt.gz · Dernière modification : le 11/03/2021 à 10h19 de john