Chronique de l'AdminSys - 3 : réfléchir sa configuration Nginx autrement

Utilisant depuis longtemps maintenant des distributions linux dérivés de debian ou debian directement, j'ai toujours eu l'habitude d'installer des paquets comme nginx ou apache via le système de paquet.

Ce système vient avec une configuration et une philosophie de base qui aide à appréhender ce nouvel environnement et avoir un environnement homogène :

  • l'installation de apache ou nginx créera un user www-data et ils seront lancés avec ce compte utilisateur
  • la conf sera dans /etc/{apache, nginx}
  • ils utiliseront comme système pour activer et désactiver les virtuals hosts deux dossiers :
    • /etc/{apache, nginx}/sites-avaiable dans le quel on pourra mettre nos virtuals hosts
    • /etc/{apache, nginx}/sites-enabled dans lequel on placera les confs que l'on veut activer.
      • la bonne pratique voulant que l'on place dans sites-enabled des liens symbolique de fichiers présent dans sites-avaiable

Et encore pas mal de choses avec l'intégration de php etc...

Problème

C'est une excellente initiative de la part de ces distributions, mais quand on commence à gérer un serveur qui est accessible par pas mal de domaines/sous-domaines différents, ça devient très vite le bordel dans ces dossiers sites-avaiable et sites-enabled.

Moi je suis un mec qui adore tout catégoriser, et voir mon sites-avaiable avec une douzaine de fichiers en vrac, sachant que certains sont lié entre eux.

ls sites-avaiable  
antarka-home antarka-node antarka-games ethernium ethernium-conception …  

Je n'ai qu'une envie, c'est de les rassembler dans des dossiers. De plus le principe de sites-enabled = duplicata de sites-avaiable, commençait vraiment à me gaver, ça passe pour des petites conf, mais à force ça devient chiant.

Solution

L'idée va être d'abuser des directives include.

Une nouvelle structure du dossier /etc/{apache, nginx}

Ajouts d'un dossier 'sites'

Dans ce dossier sites, je vais placer et organiser en sous dossier toute mes configurations et ajouter un fichier root.conf :

ls sites  
antarka.com ethernium root.conf  

Le fichier root.conf servira de 'noeud' d'inclusion, j'importe dedans toutes les confs des sites que je veux activer.

#/etc/nginx/sites/root.conf
# Sites vraiment reliés à Antarka
include /etc/nginx/sites/antarka.com/antarka.com;       # Site d'acceuil de Antarka (PHP)  
include /etc/nginx/sites/antarka.com/blog.antarka.com;  # Blog de Antarka, sous Ghost (NodeJS)  
include /etc/nginx/sites/antarka.com/games.antarka.com; # Tout les sous domaines des jeux Antarka  
include /etc/nginx/sites/antarka.com/main.antarka.com;  # future site d'acceuil de antarka sous NodeJS  
# ...

Et pour que ça fonctionne bien, il va bien falloir que ce root.conf soit chargé quelque part.
On va donc éditer le fichier nginx.conf et remplacer la ligne include /etc/nginx/sites-enabled/*; par include /etc/nginx/sites/root.conf;

Si par la suite je souhaite désactiver un hôte virtuel, je commente sa ligne include dans le root.conf

Utilisation de https (optionnel):

on va créer un dossier ssl dans le quel on va positionner des template de configuration ssl.

pour la petite info, mes certificats sont générés avec Let's Encrypt, ils sont multi-domaine, je m'arrange pour avoir le domaine et tous les sous-domaines que j'utilise dans le certificat. pour plus d'infos

ls /etc/nginx/ssl/  
antarka.com.conf ...  

Voyons ce qu'on met dans ce fichier

# /etc/nginx/ssl/antarka.com.conf
#SSL Conf
listen 443 ssl;  
listen [::]:443 ssl;

ssl_certificate         /path/to/antarka.com/fullchain.pem;  
ssl_certificate_key     /path/to/antarka.com/privkey.pem;  
ssl_client_certificate  /path/to/antarka.com/cert.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
ssl_ciphers HIGH:!aNULL:!MD5;  

Et dans chaque conf de sites, on peut aller inclure ce fichier pour activer l'https.

exemple :

# /etc/nginx/ethernium/conception.antarka.com
server {  
    listen           80;
    listen           [::]:80;

    include /etc/nginx/ssl/include.ssl;

    server_name  conception.antarka.com;

    root         /var/www/Ethernium-conception;
    index        index.html;
    charset      utf-8;
}

Nota Bene

Ce principe d'inclusions de fichier de configurations est applicable sur Apache bien évidement en utilisant la directive Include

image de Une tiré de la Nasa

Purexo

Developpeur et AdminSys sur Antarka

IN DA FACKIN KLOOD https://purexo.eu/