Tag: nginx, reverse-proxy, devops, load-balancing, networking, http
Livello: intermedio
TL;DR: Nginx intercetta le richieste dei client e le inoltra ai backend applicativi gestendo SSL termination, bilanciamento del carico, header HTTP e caching.
Riceve le richieste HTTP/HTTPS pubbliche e le smista verso uno o piu server interni.
Nasconde l'architettura interna, la topologia di rete e gli indirizzi IP dei server applicativi.
Centralizza la terminazione TLS/SSL alleggerendo il carico computazionale delle applicazioni a valle.
La direttiva proxy_pass specifica l'indirizzo e la porta del backend di destinazione.
Inoltra metadati client con header dedicati quali Host, X-Real-IP, X-Forwarded-For e X-Forwarded-Proto.
Gestisce il bilanciamento del carico tramite blocchi upstream con algoritmi round-robin, least_conn o ip_hash.
Funge da buffer per richieste e risposte lente isolando i worker dei backend.
Offre funzionalita di caching statico e dinamico per ridurre la latenza e gli accessi al backend.
Permette di gestire timeout e fallback automatici in caso di backend non raggiungibile.
Q: A cosa serve un reverse proxy e in cosa differisce da un forward proxy?R: Il forward proxy agisce per conto dei client per uscire su internet, mentre il reverse proxy agisce davanti ai server per proteggerli, distribuire il carico e terminare SSL.
Q: Perche e fondamentale impostare l'header X-Forwarded-For su Nginx?R: Senza questo header, l'applicazione backend vedrebbe come IP sorgente solo l'indirizzo interno di Nginx e non quello reale dell'utente finale.
Q: Come gestisci WebSocket tramite un reverse proxy Nginx?R: Imposto esplicitamente gli header Upgrade e Connection nel blocco location per consentire l'upgrade del protocollo HTTP a tunnel TCP persistente.
Omettere o aggiungere lo slash / finale in proxy_pass altera la riscrittura dell'URI della richiesta verso il backend.
Dimenticare proxy_set_header Host $host puo causare errori di routing o redirect con porte errate sul backend.
Il valore predefinito di client_max_body_size e 1 MB: se non alzato, causa errori 413 Request Entity Too Large durante l'upload di file.
Errori 502 Bad Gateway indicano backend offline, porta errata o mancata risposta sulla socket configurata.
Errori 504 Gateway Timeout indicano che il backend non ha risposto entro il tempo configurato in proxy_read_timeout.
```upstream backend_cluster {
least_conn;
server 127.0.0.1:3000 max_fails=3 fail_timeout=10s;
server 127.0.0.1:3001 max_fails=3 fail_timeout=10s;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_cluster;
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;
# Supporto WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
nginx -t
nginx -s reload
```
[ ] Sintassi e comportamento dello slash finale nella direttiva proxy_pass
[ ] Configurazione della terminazione SSL con Certbot e parametri Diffie-Hellman
[ ] Algoritmi di load balancing nativi in upstream (round-robin, least_conn, ip_hash)
[ ] Configurazione corretta dei blocchi proxy_cache_path e proxy_cache
[x] Impostazione degli header X-Forwarded-For e Host