Reverse proxy e certificati
Nginx, Caddy, Traefik e i certificati Let's Encrypt: vhost, reload, wildcard e scadenze. Ogni comando è verificato e copiabile; in chat basta descrivere cosa vuoi fare.
13 comandi in questa pagina
- Come configuro un reverse proxy con Nginx?
- Come testo e ricarico la config di Nginx senza downtime?
- I WebSocket non funzionano dietro Nginx: come sistemo?
- Errore 413 in upload dietro Nginx: come alzo il limite?
- Come scrivo un Caddyfile per un reverse proxy?
- Come ricarico Caddy dopo una modifica?
- Come espongo un container con le label di Traefik?
- Come chiedo un certificato con certbot in standalone?
- Come chiedo un certificato senza fermare il web server (webroot)?
- Come ottengo un certificato wildcard (challenge DNS)?
- Come testo (e forzo) il rinnovo dei certificati?
- Come genero un certificato self-signed per test?
- Come controllo la scadenza (e la catena) di un certificato?
# Come configuro un reverse proxy con Nginx?
server {
listen 443 ssl;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
Senza gli header X-Forwarded-* l'app dietro vede solo 127.0.0.1: log e rate-limiting diventano ciechi.
Approfondisci: Cos'è un reverse proxy e a cosa serve?Errore 502 Bad Gateway: cause e soluzioni
# Come testo e ricarico la config di Nginx senza downtime?
nginx -t && systemctl reload nginx
Il && è la cintura: se il test fallisce, il reload non parte e il sito resta su con la config vecchia.
Approfondisci: Cos'è un reverse proxy e a cosa serve?
# I WebSocket non funzionano dietro Nginx: come sistemo?
location /ws/ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
}
Senza Upgrade/Connection il handshake WebSocket muore in silenzio; il timeout lungo evita i drop dopo 60s.
Approfondisci: Cos'è un reverse proxy e a cosa serve?Errore 502 Bad Gateway: cause e soluzioni
# Errore 413 in upload dietro Nginx: come alzo il limite?
# nel server o location block:
client_max_body_size 512m;
Il default è 1 MB: ogni Nextcloud dietro Nginx inciampa qui al primo upload serio. Anche l'app dietro ha il SUO limite.
Approfondisci: Cos'è un reverse proxy e a cosa serve?
# Come scrivo un Caddyfile per un reverse proxy?
app.example.com {
reverse_proxy 127.0.0.1:8080
}
Tutto qui: HTTPS con certificato automatico incluso. È il motivo per cui Caddy è il default sensato del self-hosting.
Approfondisci: Cos'è un reverse proxy e a cosa serve?Come funziona Let's Encrypt e il protocollo ACME?
# Come ricarico Caddy dopo una modifica?
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
validate prima del reload: stesso principio di nginx -t.
Approfondisci: Cos'è un reverse proxy e a cosa serve?
# Come espongo un container con le label di Traefik?
services:
app:
image: miaapp:1.0
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`app.example.com`)
- traefik.http.routers.app.tls.certresolver=le
- traefik.http.services.app.loadbalancer.server.port=8080
La label della porta serve quando l'immagine non la dichiara (EXPOSE): è l'errore Traefik più comune.
Approfondisci: Cos'è un reverse proxy e a cosa serve?Cos'è Docker Compose?
# Come chiedo un certificato con certbot in standalone?
certbot certonly --standalone -d app.example.com
--standalone apre lui la porta 80: il web server va fermato per la sfida, o usa il webroot (scheda dopo).
Approfondisci: Come funziona Let's Encrypt e il protocollo ACME?Cos'è CertMate e come gestisce i certificati TLS/SSL?
# Come chiedo un certificato senza fermare il web server (webroot)?
certbot certonly --webroot -w /var/www/html -d app.example.com
La sfida passa dal sito già in piedi: zero downtime. Il path -w deve essere servito su http://dominio/.well-known/.
Approfondisci: Come funziona Let's Encrypt e il protocollo ACME?
# Come ottengo un certificato wildcard (challenge DNS)?
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cf.ini -d '*.example.com' -d example.com
Il wildcard esige la challenge DNS-01: serve il plugin del tuo provider e un token API custodito bene.
Approfondisci: Cos'è un certificato wildcard (e i SAN)?Come funziona Let's Encrypt e il protocollo ACME?
# Come testo (e forzo) il rinnovo dei certificati?
certbot renew --dry-run
certbot renew --force-renewal # solo se serve davvero
Il --dry-run usa l'ambiente staging: prova il rinnovo senza bruciare i rate limit di Let's Encrypt.
Approfondisci: Come funziona Let's Encrypt e il protocollo ACME?Certificato TLS scaduto: perché succede e come evitarlo?
# Come genero un certificato self-signed per test?
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=test.local'
Per lab e reti interne; il browser protesterà per design. In produzione: Let's Encrypt, che ormai è gratis e automatico.
Approfondisci: Come funziona Let's Encrypt e il protocollo ACME?Errore SSL handshake failure: cosa significa?
# Come controllo la scadenza (e la catena) di un certificato?
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -issuer
-servername è obbligatorio con la SNI (host multipli sullo stesso IP), o ispezioni il certificato sbagliato.
Approfondisci: Certificato TLS scaduto: perché succede e come evitarlo?Come si monitorano scadenza dominio, SSL, DNS e reputazione IP?