Capitolo 5 · 5.3
Un'app dietro un reverse proxy
Molte app hanno un proprio piccolo server web su una porta, come 3001 o 5678. Questa porta non va aperta verso Internet. Il Suo server web riceve il traffico sulla porta 443 con https e lo inoltra all'app: si tratta di un reverse proxy.
Con Caddy
Se l'app ascolta sul server stesso sulla porta 3001:
status.example.com {
reverse_proxy 127.0.0.1:3001
}
Caddy inoltra automaticamente le intestazioni corrette (come X-Forwarded-For e X-Forwarded-Proto) e i websocket. Se l'app gira in Docker accanto a Caddy, utilizzi il nome del container, come in La Sua cartella di lavoro con compose.yaml, .env e Caddy.
Con nginx
server {
listen 80;
listen [::]:80;
server_name status.example.com;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Successivamente esegua sudo nginx -t, sudo systemctl reload nginx e sudo certbot --nginx -d status.example.com.
Buono a sapersi
- Faccia ascoltare l'app solo su
127.0.0.1, non su tutti gli indirizzi. In questo modo nessuno può aggirare il Suo proxy. - Molte app devono sapere a quale indirizzo sono raggiungibili, ad esempio tramite un'impostazione come
DOMAINoN8N_HOST. Inserisca lì l'indirizzo https. - Un pannello di amministrazione che non è destinato a tutti va protetto ulteriormente: con una password nell'app stessa, con la verifica in due passaggi, oppure rendendolo accessibile solo tramite un tunnel SSH (vedere Una configurazione SSH: accedere con un nome breve).
- Le intestazioni di sicurezza aggiuntive come HSTS si impostano con
headerin Caddy o conadd_headerin nginx. Attivi HSTS solo quando https funziona correttamente ovunque.
