Aller au contenu

Publier un site (Nginx + HTTPS)

Tous les sites passent par le reverse proxy Nginx de la CT 104, qui gère aussi les certificats Let's Encrypt. Une appli dans sa CT écoute sur un port interne (par exemple 10.0.0.48:3000) ; Nginx la publie sur https://<sous-domaine>.flgr.fr.

flowchart LR
  U[Internet] -- 80 / 443 --> N[Nginx CT 104]
  N -- HTTP interne --> A["CT du projet<br/>10.0.0.XX:PORT"]

1. Créer le sous-domaine

Chez OVH, zone DNS flgr.fr : ajouter un enregistrement CNAME <sous-domaine> → flgr.fr. (avec le point final). Vérifier qu'il résout avant de continuer :

getent hosts <sous-domaine>.flgr.fr

2. Déclarer le site en HTTP

Dans la CT 104, créer /etc/nginx/sites-available/<domaine> avec seulement la partie HTTP : elle sert à la validation Let's Encrypt et redirige tout le reste vers HTTPS.

server {
    listen 80;
    server_name <domaine>;
    location /.well-known/acme-challenge/ { root /var/www/html; }
    location / { return 301 https://$host$request_uri; }
}
ln -s /etc/nginx/sites-available/<domaine> /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

3. Obtenir le certificat

certbot certonly --webroot -w /var/www/html -d <domaine>

Le renouvellement est ensuite automatique.

4. Ajouter la partie HTTPS

Compléter le fichier :

server {
    listen 443 ssl;
    http2 on;
    server_name <domaine>;

    ssl_certificate     /etc/letsencrypt/live/<domaine>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<domaine>/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://10.0.0.<XX>:<PORT>;
        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;

        # si l'appli utilise des WebSockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
nginx -t && systemctl reload nginx
curl -I https://<domaine>

Supprimer un site

Retirer le lien dans sites-enabled, recharger Nginx, et supprimer le certificat :

certbot delete --cert-name <domaine>

Pourquoi supprimer le certificat

Un certificat dont le domaine ne répond plus échoue à chaque renouvellement nocturne. Le service de renouvellement passe alors en échec en permanence… et on ne remarque plus le jour où un vrai site ne se renouvelle pas.

Et pour un serveur de jeu ?

Les jeux n'utilisent pas HTTP : ils passent par une redirection de port sur le routeur, directement vers la CT. C'est à demander à l'admin du serveur ; ne pas exposer de port sans en avoir parlé.