En aquest xicotet article explique el muntatge que he resolt al final configurant certificat SSL per a la navegació segura a les màquines que tinc darrere del proxy invers.
Ací recupere la imatge de l'estructura de màquines Raspberry Pi 4 i del proxy invers que faig afegir en aquest article Configurar proxy invers a Nginx per tenir diferents Raspberry Pi i diferents IP i projectes, veurem que tinc una màquina principal que fa de proxy invers amb IP 192.168.0.2 i desvia l'accès http i https a màquines internes (la IP 192.168.0.3 i la IP 192.168.0.4):
Doncs bé, la problemàtica estava en que si, des de fora, des d'internet, jo ficava http://domini_de_la_màquina, el router acceptava la petició per la NAT i el proxy invers (192.168.0.2) redireccionava el domini a la màquina nº 2 amb IP 192.168.0.3 però el navegador deia que la navegació no és segura al no ser https:
I si en el proxy invers (192.168.0.2) modificava el fitxer de configuració del propi site d'Nginx /usr/local/etc/nginx/sites-enabled/domini_de_la_màquina i afegia https en la part del proxy_pass de la següent manera tampoc em funcionava:
location / {
proxy_pass https://192.168.1.42/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Em mostrava el següent error, perquè clar en el servidor de destí no hi havia un certificat SSL i no entenia la petició https al port 443:
LA SOLUCIÓ
La solució ha segut, primer, generar un certificat amb la utilitat certbot en el proxy invers, encara que la pàgina web ni la base de dades no estiguen físicament desplegades en eixe servidor 192.168.0.2 sinó en 192.168.0.3:
$ certbot certonly --force-renew -d domini_de_la_màqina
Copiarem les rutes del certificat /usr/local/etc/letsencrypt/live/domini_de_la_màquina/fullchain.pem i de la clau privada /usr/local/etc/letsencrypt/live/domini_de_la_màquinat/privkey.pem i ara, deixarem a mà el codi de la configuració dels certificats SSL que certbot, normalment, configura al vol a altres projectes web local de la pròpia màquina 192.168.0.2 (pots fer click sobre aquesta imatge per a veure-la més gran):
Per exemple, en el meu domini joancatala.net, la configuració de certbot per a escoltar el port 443 per a l'https és:
listen 443 ssl; # managed by Certbot
ssl_certificate /usr/local/etc/letsencrypt/live/joancatala.net-0003/fullchain.pem; # managed by Certbot
ssl_certificate_key /usr/local/etc/letsencrypt/live/joancatala.net-0003/privkey.pem; # managed by Certbot
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
#
server {
if ($host = www.joancatala.net) {
return 301 https://$host$request_uri;
} # managed by Certbot
#
if ($host = joancatala.net) {
return 301 https://$host$request_uri;
} # managed by Certbot
#
server_name joancatala.net www.joancatala.net;
listen 80;
return 404; # managed by Certbot
Aleshores, el que he fet ha segur copiar aquest codi, desar-ho en la configuració de l'Nginx de la pàgina que encara no tinc https i modificar la ruta del certificat i la clau pública i del domini, enlloc de joancatala.net he ficat el nou domini.
Reiniciem el servei Nginx:
doas service nginx restart
I ja ha funcionat. Quan fiques https://nom_de_la_màquina ja es veu la pàgina web albergada en la màquina nº2 (IP 192.168.0.3) en la part interna de la meua estructura informàtica: