Reverse Proxy

Document

Le reverse proxy est l'architecture que j'ai choisi, depuis des années, pour assurer la liaison avec le tiers de confiance letsencrypt lors de la demande de certificats gratuits https (protocole ACME) et pour cacher l'architecture des logiciels de serveurs Web locaux/distants non cryptés.

L'avantage est que toute la complexité du protocole https crypté repose sur lui, laissant au développeur le libre choix du logiciel serveur Web, même si celui-ci n'est pas équipé pour travailler en mode crypté.

C'est une phase délicate, le protocole ACME est chatouilleux !
Votre nom de domaine, acheté chez un registrar officiel, doit pointer sur l'adresse IP de votre serveur (paramètre A DNS de votre registrar).

Les serveurs Web locaux doivent travailler sur l'adresse locale 127.0.0.1 mais sur un canal différent entre eux (cas de plusieurs serveurs Web/noms de domaines)

J'utilise le programme certbot de l'EFF (Electronic Frontier Foundation) pour la demande de certificats https avec ce tiers de confiance letsencrypt. Il s'installe via la commande (alpine linux) :

doas apk add certbot certbot-nginx

J'utilise le logiciel nginx, oeuvre d'un talentueux développeur Russe (et oui, ils sont très bons en logiciels).
Il s'installe via la commande :

doas apk add nginx

On ne touche rien des fichiers de configuration de nginx, il faut aller dans le répertoire (sous root) /etc/nginx/http.d/

Et créer des fichiers de configuration pour chaque domaine géré par nginx nom -> votrenomdedomaine.conf

Si nginx a été lancé par l'OS, vérifier par :

ps | grep nginx

S'il est lancé, killer le nginx master process en référence au no de process ID

Tester la syntaxe des fichiers de configs de vos domaines

doas nginx -t

## à placer dans /etc/nginx/http.d/

server {
server_name votrenomdedomaine.com;
location / {
proxy_pass http://127.0.0.1:no_canal_local/;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/votrenomdomaine/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/votrenomdomaine/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
}
server {
    if ($host = votrenomdedomaine) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
server_name votrenomdedomaine;
listen 80;
return 404; # managed by Certbot
}
server {
    if ($host = votrenomdedomaine) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

server_name votrenomdedomain;
    listen 80;
    return 404; # managed by Certbot
}

Si tout est OK du côté de la config de nginx lancer le commande

doas certbot certonly

Si un firewall comme ufw tourne, penser à vérifier que les ports 80 et 443 sont ouverts !

Letsencrypt vous demandera une adresse de contact pour renouveler votre certificat (valable 3 mois mais gratuit !), il vous préviendra qu'il faudra le faire...

Commande de renouvellement du certificat :

doas certbot renew

C'est un domaine complexe et délicat. Il y a plein de choses qui peuvent mal tourner. Restez concentré !

Hasta la vista

Document

Retour