Nginx Level A+ Reverse Proxy: un percorso didattico
Sintesi
In questo breve tutorial vedremo, grazie allo splendido generatore nginxconfig offerto da Digital Ocean, come installare per passi un certificato SSL con Let's Encrypt – utilizzando Certbot – per un servizio in reverse proxy su Nginx, raggiungendo la massima certificazione A+ su SSL Labs, testando il tutto su di una Ubuntu 18.04 su di una virtuale del servizio Lightsail di AWS.
Prove con nginxconfig.io
- sul pannello di Lightsail
- creo una virtuale AWS Lightsail
- associo un IP statico alla virtuale che servirà per indicarlo nei DNS
- sui DNS del mio dominio, associo un record A (in questo esempio,
aaa.kiwifarm.it
), con l'intenzione di utilizzarlo per provare HTTPS.
HTTPS
Server HTTP locale
Apro una prima shell, collegandomi con
ssh -i xxx.pem ubuntu@aaa.kiwifarm.it
Mando in esecuzione un server, in questo caso, uso una funzione di base di Python come esempio sulla porta locale 3000.
mkdir tmp
cd tmp/
echo "a" > index.html
python3 -m http.server 3000
Apro una seconda shell e lancio i seguenti comandi per l'installazione di Certbot, al quale, quando verrà chiesto di indicare un dominio, risponderò con aaa.kiwifarm.it
.
sudo su
apt-get update
apt-get install software-properties-common
add-apt-repository universe
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install certbot python-certbot-nginx
certbot --nginx --register-unsafely-without-email
nginxconfig.io
Vado su nginxconfig.io e creo una configurazione HTTPS proxy per il mio dominio di terzo livello.
Sommariamente (indico solo le parti da modificare)
- Per-Website Config
- Presets: no
- Server: Domain
- HTTPS: tutto abilitato e Let's Encrypt
- PHP: no
- Python: no
- Reverse Proxy:
- enabled
- /
- http://127.0.0.1:3000
- Routing: default
- Logging:
- enabled
- enabled
- Global Config: non modifico nulla
Scarico lo zip generato prima in locale, caricandolo poi sulla virtuale come segue.
scp -i xxx.pem \
nginxconfig.io-aaa.kiwifarm.it.zip \
ubuntu@aaa.kiwifarm.it:
Torno sulla seconda shell e, per sicurezza, creo un backup della cartella di configurazione di Nginx
cd /etc
tar cvfz nginx.tgz nginx/
mv nginx.tgz /home/ubuntu
In seguito, scompatto il file creato da nginxconfig.io (servirà installare unzip) e creo i file e le cartelle necessari per Nginx (dhparam.pem
e /var/www/_letsencrypt/
)
mv /home/ubuntu/nginxconfig.io-tmpn.kiwifarm.it.zip /etc/nginx
cd /etc/nginx
apt-get install unzip
unzip nginxconfig.io-tmpn.kiwifarm.it.zip
openssl dhparam -out /etc/nginx/dhparam.pem 2048
mkdir -p /var/www/_letsencrypt
chown www-data /var/www/_letsencrypt
rm sites-enabled/default
Volendo, posso inoltre commentare, in /etc/nginx/sites-available/tmpn.kiwifarm.it
la riga
root /var/www/tmpn.kiwifarm.it/public;
perché, pur essendo creata dal generatore, è di fatto superflua, nel caso di reverse proxy.
Rilancio nginx
con
nginx -t
systemctl reload nginx
Verifico con un browser che ora la mia pagina è servita con HTTPS all'indirizzo https://aaa.kiwifarm.it/
.
Vado su SSL Labs e valido il certificato, ottenendo il massimo: A+.
HTTP
Ripeto la procedura, evitando la parte HTTPS e ottenendo uno zip più semplice.
--
Photo by Amos Bar-Zeev on Unsplash