Un bilanciatore di carico su un server Linux distribuisce il traffico in entrata su più server backend per migliorare le prestazioni, la disponibilità e la scalabilità. Per utilizzarlo: scegli uno strumento (HAProxy, Nginx, o LVS/IPVS), configura i backend e i controlli di integrità, abilita SSLSe necessario, utilizzare /TLS, rafforzare la sicurezza e monitorare il traffico. Testare il failover e le prestazioni prima di andare in produzione.
Se stai scalando le tue applicazioni, imparare a utilizzare un bilanciatore di carico su un server Linux è uno dei passaggi più importanti che puoi intraprendere. In questa guida, configurerai un sistema pronto per la produzione. bilanciamento del carico con Nginx e HAProxy, confronta gli approcci (L4 vs L7), aggiungi SSLsessioni persistenti, controlli di integrità, alta disponibilità e ottimizzazione per velocità e sicurezza.
Che cos'è un Load Balancer e perché utilizzarlo su un server Linux?
Un bilanciatore di carico si posiziona davanti ai server delle applicazioni e distribuisce il traffico per prevenire il sovraccarico, ridurre la latenza e garantire un'elevata disponibilità. Su Linux, le opzioni comuni includono: Nginx (HTTP/HTTPS di livello 7), HAProxy (TCP/HTTP di livello 4/7) e LVS/IPVS (bilanciamento del carico in-kernel di livello 4 ad alte prestazioni).

Livello 4 vs Livello 7
Il livello 4 (TCP/UDP) inoltra le connessioni senza ispezionare HTTP; è estremamente veloce e semplice. Il livello 7 comprende HTTP/HTTPS e può instradare tramite URL, intestazioni, cookie e handle. SSL Terminazione. Scegli L4 per la massima velocità di trasmissione (ad esempio, servizi TCP), L7 per un routing più intelligente (applicazioni web, API).
Vantaggi principali
- Alta disponibilità: rimuovere i nodi non riusciti tramite controlli di integrità
- Scalabilità: aggiungi o rimuovi server backend senza problemi
- Performance: concorrenza, livelli di memorizzazione nella cache, riutilizzo TCP
- Distribuzioni senza tempi di inattività: nodi di drenaggio e distribuzione in sicurezza
- Sicurezza: centralizzare TLS, WAF, limitazione della velocità (L7)
Scelta di un bilanciatore di carico Linux (Nginx vs HAProxy vs LVS/IPVS)
Nginx (Livello 7 HTTP/HTTPS)
Ottimo come proxy inverso e bilanciatore di carico HTTP, facile SSL terminazione e prestazioni dei file statici. I controlli di integrità passivi sono integrati; i controlli attivi richiedono Nginx Inoltre, è possibile aggiungere moduli di terze parti. Facile da imparare e ampiamente supportato.
HAProxy (Livello 4/7)
Un cavallo di battaglia per la produzione con controlli di integrità avanzati, statistiche dettagliate, offload TLS, stabilità e prestazioni elevate. Ideale per routing dinamico, microservizi e modelli di traffico complessi.
LVS/IPVS (livello 4, livello kernel)
IPVS (con Keepalived) fornisce un bilanciamento del carico L4 estremamente veloce nello spazio kernel. Ideale per throughput molto elevato (milioni di connessioni), spesso abbinato a HAProxy o Nginx al livello L7 per la logica HTTP.
Quale dovresti usare?
- Applicazioni web/API che necessitano di SSL, intestazioni, routing URL: HAProxy o Nginx
- Enorme throughput L4 (TCP/UDP): IPVS/Keepalived
- Un semplice proxy inverso per iniziare subito: Nginx
- Controlli sanitari avanzati e aderenza: HAProxy
Prerequisiti e architettura di riferimento
- 1–2 nodi di bilanciamento del carico Linux (Ubuntu/Debian/CentOS/Alma/Rocky)
- 2+ server applicativi (ad esempio, 10.0.0.11, 10.0.0.12)
- DNS A/AAAA per il tuo dominio all'IP pubblico o VIP del bilanciatore di carico
- Firewall aperto: 80/443 a LB, 8404 (statistiche HAProxy opzionali), protocollo 112 per VRRP (Keepalived)
- Accesso al sistema: sudo, SSH, editore, riccio
Avvio veloce: Nginx Bilanciatore di carico (HTTP/HTTPS)
Nginx Questo è un modo semplice per iniziare a utilizzare un bilanciatore di carico L7 su un server Linux. Di seguito è riportata una configurazione HTTP minima con il principio del minimo numero di connessioni e controlli di integrità passivi.
# Ubuntu/Debian
sudo apt update && sudo apt install -y nginx
# RHEL/CentOS/Alma/Rocky
sudo dnf install -y nginx
sudo systemctl enable --now nginx# /etc/nginx/conf.d/lb.conf
upstream app_pool {
least_conn;
server 10.0.0.11:80 max_fails=3 fail_timeout=10s;
server 10.0.0.12:80 max_fails=3 fail_timeout=10s;
# For session persistence, consider:
# ip_hash; # Simple stickiness by client IP (not ideal behind NAT)
}
server {
listen 80 default_server reuseport;
server_name example.com;
location / {
proxy_pass http://app_pool;
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_connect_timeout 5s;
proxy_read_timeout 60s;
proxy_next_upstream error timeout http_502 http_503 http_504;
}
}sudo nginx -t
sudo systemctl reload nginxPer abilitare HTTPS rapidamente con Let's Encrypt su Nginx:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo systemctl reload nginxNota: i controlli di integrità HTTP attivi richiedono Nginx Inoltre, è possibile utilizzare un verificatore esterno. Se sono necessari controlli più rigorosi, è preferibile utilizzare HAProxy come bilanciatore di carico.
Avvio rapido: HAProxy Load Balancer (L4/L7)
HAProxy fornisce controlli di integrità, statistiche, terminazione TLS e stabilità efficaci, ideali per applicazioni Web di produzione e API su un server Linux.
# Ubuntu/Debian
sudo apt update && sudo apt install -y haproxy
# RHEL/CentOS/Alma/Rocky
sudo dnf install -y haproxy# /etc/haproxy/haproxy.cfg (minimal but production-friendly)
global
log /dev/log local0
log /dev/log local1 notice
user haproxy
group haproxy
daemon
maxconn 50000
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
option http-server-close
option forwardfor
retries 3
timeout http-request 10s
timeout queue 30s
timeout connect 5s
timeout client 60s
timeout server 60s
timeout http-keep-alive 10s
timeout check 5s
frontend http-in
bind *:80
http-response add-header Strict-Transport-Security "max-age=31536000; includeSubDomains" if { ssl_fc }
redirect scheme https code 301 if !{ ssl_fc }
default_backend app
frontend https-in
bind *:443 ssl crt /etc/haproxy/certs/
http-request set-header X-Forwarded-Proto https
default_backend app
backend app
balance leastconn
option httpchk GET /health
http-check expect status 200
cookie SRV insert indirect nocache
server app1 10.0.0.11:80 check cookie s1
server app2 10.0.0.12:80 check cookie s2
listen stats
bind :8404
stats enable
stats uri /
stats realm HAProxy\ Stats
stats auth admin:StrongPass123!Per TLS, posizionare i file PEM in /etc/haproxy/certs (un .pem per dominio, contenente fullchain + chiave privata):
# Using Certbot to obtain certs, then combine for HAProxy:
sudo certbot certonly --standalone -d example.com
sudo bash -c 'cat /etc/letsencrypt/live/example.com/fullchain.pem \
/etc/letsencrypt/live/example.com/privkey.pem \
> /etc/haproxy/certs/example.com.pem'
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl enable --now haproxyAlta disponibilità con Keepalived (VRRP)
Gestisce due bilanciatori di carico Linux con un IP virtuale (VIP) che esegue il failover automatico. Keepalived utilizza VRRP (protocollo 112) per eleggere un MASTER e un BACKUP. In caso di guasto del primario, o di arresto dell'HAProxy, il VIP si sposta sul backup in pochi secondi.
# Install
sudo apt install -y keepalived # or: sudo dnf install -y keepalived
# /etc/keepalived/keepalived.conf (on primary)
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight -30
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass StrongPass
}
virtual_ipaddress {
10.0.0.10/24 dev eth0
}
track_script {
chk_haproxy
}
}Utilizzare la stessa configurazione sul nodo di backup, ma impostare lo stato BACKUP e una priorità inferiore (ad esempio, 100). Aprire VRRP (protocollo 112) tra i LB nel firewall o nel gruppo di sicurezza.
Persistenza della sessione (sessioni fisse)
- HAProxy: viscosità basata sui cookie (consigliata per le app web)
- Nginx OSS: ip_hash (di base, basato su IP; potrebbe essere impreciso dietro NAT o CDN)
- App senza stato: preferire nessuna viscosità; utilizzare archivi di sessioni condivisi (Redis, database) quando necessario
Controlli sanitari, monitoraggio e registrazione
- Controlli di integrità HAProxy: opzione httpchk, http-check expect, contrassegna automaticamente i nodi falliti
- Statistiche e metriche: Pagina delle statistiche di HAProxy (:8404), esportatori di Prometheus, syslog
- Nginx: registri di accesso/errore, modulo stub_status per metriche di base
- Controlli di uptime esterni: curl, Pingdom, UptimeRobot o k6/wrk per i test di carico
Ottimizzazione delle prestazioni per i bilanciatori di carico Linux
Applicare limiti sani al kernel e ai processi per gestire i picchi e mantenere bassa la latenza.
# /etc/sysctl.d/99-lb.conf
net.core.somaxconn = 65535
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 1000000
sudo sysctl --system
# Raise open files limit
echo "* soft nofile 100000" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 100000" | sudo tee -a /etc/security/limits.conf- Nginx: usa reuseport su listen, abilita keepalive sui backend
- HAProxy: tune.maxaccept, nbthread (il moderno HAProxy utilizza i thread), http-reuse sicuro, timeout ragionevoli
- Scala orizzontalmente: aggiungi più nodi LB con Keepalived o anycast
Rafforzamento della sicurezza
- limitare managesuperfici di mento: associare le statistiche a localhost o proteggere con autenticazione e firewall
- TLS forte: abilitare TLS 1.2/1.3, cifrari moderni, HSTS, OCSP stapling
- Firewall: consentire solo 80/443 (e 8404 se necessario), consentire VRRP (protocollo 112) tra LB
- Sanificare le intestazioni: imposta X-Forwarded-* e rimuovi le intestazioni hop-by-hop
- Limitazione della velocità/WAF: Tabelle di appiccicosità HAProxy o Nginx limit_req, aggiungi un WAF dove necessario
Test e risoluzione dei problemi
# Sanity checks
curl -I -H "Host: example.com" http://YOUR_LB_IP/
curl -I https://example.com/
# Validate configs
nginx -t
haproxy -c -f /etc/haproxy/haproxy.cfg
# Observe logs
sudo journalctl -u nginx -f
sudo journalctl -u haproxy -f
# Load testing (install first): wrk or ab
wrk -t4 -c200 -d60s https://example.com/Casi d'uso e modelli nel mondo reale
- WordPress su larga scala: HAProxy termina TLS e bilancia il carico PHP-FPM/Nginx backend; media su object storage o CDN
- Distribuzioni blu/verdi: svuotare un server dal pool, distribuire, controllare lo stato di integrità, aggiungere nuovamente
- Gateway dei microservizi: percorsi di instradamento (/api/, /auth/) verso diversi backend con regole L7
- Ibrido L4+L7: IPVS per la scala TCP grezza, HAProxy per l'intelligenza HTTP dietro di esso
Non vuoi costruirlo da solo? YouStable'S manageIl team di hosting d implementa regolarmente HAProxy/Nginx bilanciatori di carico con Keepalived, SSL Automazione, monitoraggio e filtraggio DDoS: così puoi concentrarti sulla tua app mentre noi gestiamo l'infrastruttura periferica.
Riepilogo passo passo: come utilizzare un bilanciatore del carico su un server Linux
- Scegli la tua pila: Nginx o HAProxy (L7), IPVS (L4) per una velocità di trasmissione estrema
- Installa su un server Linux; configura i backend e l'algoritmo di routing
- Aggiungi controlli di integrità (HAProxy) e abilita l'offload TLS
- Rafforzare la sicurezza e ottimizzare i limiti del kernel/processo
- Aggiungi facoltativamente Keepalived per un VIP e un failover automatico
- Esegui test con gli strumenti curl e load; monitora i log e le metriche
- Scala aggiungendo server backend o nodi LB aggiuntivi
Domande Frequenti
Quale è la soluzione migliore per il bilanciamento del carico su Linux? Nginx o HAProxy?
Per la maggior parte delle applicazioni HTTP/HTTPS, HAProxy offre controlli di integrità più completi, maggiore persistenza e osservabilità. Nginx è eccellente come semplice reverse proxy e può essere sufficiente per molti siti. Se hai bisogno di funzionalità L7 avanzate, inizia con HAProxy; se hai bisogno di semplicità, usa Nginx.
Come faccio a scegliere tra il bilanciamento del carico di Livello 4 e di Livello 7?
Scegli L4 per la massima velocità di trasmissione con logica minima (servizi TCP/UDP). Scegli L7 quando hai bisogno di routing compatibile con HTTP, SSL terminazione, regole basate sull'intestazione, caching o integrazioni WAF. Molte implementazioni su larga scala combinano entrambe le soluzioni.
Come posso abilitare le sessioni sticky su un bilanciatore di carico Linux?
In HAProxy, usa l'inserimento dei cookie nel backend e imposta un cookie per server. In Nginx Nel mondo open source, si consiglia di utilizzare ip_hash (base) o di spostare le sessioni in un archivio condiviso (Redis) per evitare la persistenza. La persistenza basata sui cookie è generalmente più affidabile di quella basata sull'indirizzo IP.
Posso terminare? SSL/TLS sul bilanciatore di carico?
Sì. Termina TLS su HAProxy o Nginx e inoltrare il testo in chiaro ai backend, oppure crittografarlo nuovamente verso i backend se necessario. Utilizzare l'automazione di Let's Encrypt e impostazioni TLS robuste (TLS 1.2/1.3, algoritmi di crittografia moderni, HSTS).
Come posso ottenere un'elevata disponibilità per il bilanciatore del carico stesso?
Eseguire due bilanciatori di carico Linux e utilizzare Keepalived (VRRP) per gestire un IP virtuale. I controlli di integrità garantiscono il failover automatico in caso di errore del nodo o del processo primario. Assicurarsi che il protocollo VRRP (protocollo 112) sia consentito tra i nodi e testare regolarmente il failover.