Aller au contenu

Domaines (DNS) et certificats HTTPS

Comment ajouter une adresse (ex. un nouveau sous-domaine) et lui donner son cadenas HTTPS, avec le proxy web central déjà en place. Compréhensible sans être technique.

Rappel : c'est le proxy central (nginx-proxy-central) qui reçoit tout le trafic et aiguille chaque adresse vers le bon conteneur. On ne configure pas de nginx « système ».


Étape 1 — Créer l'adresse chez OVH (DNS)

  1. OVH → Zone DNSAjouter une entrée.
  2. Type A, sous-domaine = le nom voulu (ex. nouveau), cible = l'IP du serveur (151.80.144.98).
  3. Valider et attendre la propagation (quelques minutes).

Vérifier :

1
2
dig +short nouveau.boaz-study.tech
# doit afficher 151.80.144.98

Ne passe pas à la suite tant que cette commande ne renvoie pas la bonne IP (sinon le certificat HTTPS échouera).


Étape 2 — Router l'adresse dans le proxy central

Les configurations vivent dans /home/ubuntu/nginx-proxy-center/conf.d/ (un fichier par projet). Pour une nouvelle adresse, on crée d'abord une config temporaire (le temps de générer le certificat) :

1
nano /home/ubuntu/nginx-proxy-center/conf.d/nouveau-http.conf
1
2
3
4
5
6
server {
    listen 80;
    server_name nouveau.boaz-study.tech;
    location /.well-known/acme-challenge/ { root /var/www/certbot; }
    location / { return 200 'en attente du certificat'; add_header Content-Type text/plain; }
}

Vérifier + recharger (toujours dans cet ordre) :

1
2
docker exec nginx-proxy-central nginx -t        # doit dire "syntax is ok"
docker exec nginx-proxy-central nginx -s reload

Le nginx -t avant le reload est une sécurité : s'il y a une faute, on ne recharge pas et rien n'est cassé.


Étape 3 — Générer le certificat HTTPS (Let's Encrypt)

1
2
3
4
5
6
7
cd /home/ubuntu/nginx-proxy-center
docker run --rm \
  -v "$(pwd)/certs:/etc/letsencrypt" \
  -v "$(pwd)/www:/var/www/certbot" \
  certbot/certbot certonly --webroot --webroot-path=/var/www/certbot \
  --email admin@boaz-study.tech --agree-tos --no-eff-email \
  -d nouveau.boaz-study.tech

Vérifier : le message se termine par « Successfully received certificate ».


Étape 4 — Activer le HTTPS définitif

Remplace la config temporaire par la version HTTPS :

1
2
rm /home/ubuntu/nginx-proxy-center/conf.d/nouveau-http.conf
nano /home/ubuntu/nginx-proxy-center/conf.d/nouveau.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Redirige l'ancien HTTP vers HTTPS
server {
    listen 80;
    server_name nouveau.boaz-study.tech;
    location /.well-known/acme-challenge/ { root /var/www/certbot; }
    location / { return 301 https://$host$request_uri; }
}

# Le vrai service, en HTTPS
server {
    listen 443 ssl;
    http2 on;
    server_name nouveau.boaz-study.tech;

    ssl_certificate     /etc/letsencrypt/live/nouveau.boaz-study.tech/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nouveau.boaz-study.tech/privkey.pem;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    resolver 127.0.0.11 valid=30s ipv6=off;      # DNS interne de Docker
    set $cible NOM_DU_CONTENEUR;                  # ex: transaction_frontend
    location / {
        proxy_pass http://$cible:PORT;            # ex: 3004 (site) ou 8004 (API)
        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;
        proxy_read_timeout 90;
    }
}

Vérifier + recharger :

1
2
docker exec nginx-proxy-central nginx -t
docker exec nginx-proxy-central nginx -s reload


Étape 5 — Tester

1
2
curl -I https://nouveau.boaz-study.tech/          # -> HTTP/2 200, cadenas valide
curl -I http://nouveau.boaz-study.tech/           # -> 301 (redirige vers https)
Puis ouvre l'adresse dans un navigateur : le cadenas doit être vert.


Bon à savoir

  • Renouvellement automatique : les certificats se renouvellent tout seuls (tâche planifiée qui lance certbot renew). Rien à faire.
  • Le conteneur cible doit être sur le réseau proxy-network pour être joignable par le proxy (c'est déjà le cas des applications du projet).
  • Ne jamais modifier le fichier de config d'un autre projet : on ajoute son propre fichier .conf, on teste (nginx -t), puis on recharge.

Problèmes courants

Problème Cause Solution
Certbot échoue (challenge) DNS pas encore propagé attends, revérifie dig +short
502 Bad Gateway le proxy ne joint pas le conteneur vérifie le nom du conteneur et qu'il est sur proxy-network
nginx -t en erreur faute dans le fichier .conf corrige la faute ; ne recharge pas tant que ce n'est pas « ok »