HAProxy · 5 min read · Nov 12, 2025
Bilanciamento del Carico del Server Web con HAProxy su Ubuntu 14.04
Cos’è HAProxy?
HAProxy (High Availability Proxy) è un bilanciatore di carico open-source che può bilanciare qualsiasi servizio TCP. HAProxy è una soluzione gratuita, molto veloce e affidabile che offre bilanciamento del carico, alta disponibilità e proxying per applicazioni basate su TCP e HTTP. È particolarmente adatto per siti web con un traffico molto elevato e alimenta molti dei più visitati al mondo.
Dalla sua esistenza, è diventato lo standard de facto per i bilanciatori di carico open-source. Anche se non si pubblicizza, è ampiamente utilizzato. Di seguito è riportato un diagramma di base di come appare la configurazione: 
Installazione di HAProxy
Sto usando Ubuntu 14.04 e lo installo con:
apt-get install haproxyPuoi controllare la versione con:
haproxy -vDobbiamo abilitare HAProxy per essere avviato dallo script di init /etc/default/haproxy. Imposta l’opzione ENABLED su 1 come:
ENABLED=1Per verificare se questa modifica è stata eseguita correttamente, esegui lo script di init di HAProxy senza parametri. Dovresti vedere quanto segue:
$ service haproxy
reload restart start status stop HAProxy è ora installato. Creiamo ora una configurazione in cui abbiamo 2 (due) istanze di Apache Web Server e 1 (una) istanza di HAProxy. Di seguito sono riportate le informazioni sulla configurazione:
Utilizzeremo tre sistemi, generati virtualmente tramite VirtualBox: Istanze 1 - Bilanciatore di Carico
Nome host: haproxy
OS: Ubuntu
IP privato: 192.168.205.15
Istanze 2 - Web Server 1
Nome host: webser01
OS: Ubuntu con LAMP
IP privato: 192.168.205.16
Istanze 2 - Web Server 2
Nome host: webserver02
OS: Ubuntu con LAMP
IP privato: 192.168.205.17
Ecco il diagramma di come appare la configurazione: 
Configuriamo ora HAProxy.
Configurazione di HAProxy
Esegui il backup del file originale rinominandolo:
mv /etc/haproxy/haproxy.cfg{,.original}Creeremo il nostro file haproxy.cfg. Utilizzando il tuo editor di testo preferito, crea il file /etc/haproxy/haproxy.cfg come:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 checkSpiegazione:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemonLa direttiva di log menziona un server syslog a cui verranno inviati i messaggi di log.
La direttiva maxconn specifica il numero di connessioni concorrenti sul front-end. Il valore predefinito è 2000 e dovrebbe essere regolato in base alla configurazione del tuo sistema.
Le direttive user e group cambiano il processo HAProxy all’utente/gruppo specificato. Queste non dovrebbero essere modificate.
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000La sezione sopra ha i valori predefiniti. L’opzione redispatch abilita la ridistribuzione delle sessioni in caso di guasti di connessione. Quindi la persistenza della sessione viene sovrascritta se un’istanza del server web si guasta.
La direttiva retries imposta il numero di tentativi da eseguire su un’istanza del server web dopo un guasto di connessione.
I valori da modificare sono le varie direttive di timeout. L’opzione contimeout specifica il tempo massimo da attendere affinché un tentativo di connessione a un’istanza del server web abbia successo.
Le opzioni clitimeout e srvtimeout si applicano quando ci si aspetta che il client o il server riconoscano o inviino dati durante il processo TCP. HAProxy raccomanda di impostare i timeout del client e del server sullo stesso valore.
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 checkIl blocco sopra contiene la configurazione sia per il frontend che per il backend. Stiamo configurando HAProxy per ascoltare sulla porta 80 per webfarm, che è solo un nome per identificare un’applicazione.
Le direttive stats abilitano la pagina delle statistiche di connessione. Questa pagina può essere visualizzata con l’URL menzionato in stats uri, quindi in questo caso è http://192.168.205.15/haproxy?stats, una demo di questa pagina può essere vista qui.
La direttiva balance specifica l’algoritmo di bilanciamento del carico da utilizzare. Le opzioni disponibili per l’algoritmo sono:
- Round Robin (roundrobin),
- Static Round Robin (static-rr),
- Least Connections (leastconn),
- Source (source),
- URI (uri) e
- URL parameter (url_param).
Informazioni su ciascun algoritmo possono essere ottenute dalla documentazione ufficiale.
La direttiva server dichiara un server backend, la sintassi è:
server [:port] [param*] Il nome che menzioniamo qui apparirà nei log e negli avvisi. Ci sono alcuni altri parametri supportati da questa direttiva e utilizzeremo il parametro check in questo articolo. L’opzione check abilita i controlli di salute sull’istanza del server web, altrimenti, l’istanza del server web è sempre considerata disponibile.
Una volta completata la configurazione, avvia il servizio HAProxy:
sudo service haproxy startTest del Bilanciamento del Carico e Fail-over
Aggiungeremo il nome del server in entrambi i file index.html predefiniti situati per impostazione predefinita in /var/www/index.html
Sull’Istanze 2 - Web Server 1 (webserver01 con IP- 192.168.205.16), aggiungi la seguente riga:
sudo sh -c "echo Nome host: webserver01 (192.168.205.16)
>> /var/www/index.html"Sull’Istanze 3 - Web Server 2 (webserver02 con IP- 192.168.205.17), aggiungi la seguente riga:
sudo sh -c "echo Nome host: webserver02 (192.168.205.17)
>> /var/www/index.html"Ora apri il browser web sulla macchina locale e naviga attraverso l’IP di haproxy, cioè http://192.168.205.15
Ogni volta che aggiorni la scheda, vedrai che il carico viene distribuito a ciascun server web. Di seguito è riportato uno screenshot del mio browser:
Per la prima volta quando visito http://192.168.205.15, ottengo: 
E per la seconda volta, cioè quando aggiorno la pagina, ottengo: 
Puoi anche controllare le statistiche di haproxy visitando http://192.168.205.15/haproxy?stats
C’è di più che puoi fare con questa configurazione. Alcune idee includono:
- mettere offline uno o entrambi i server web per testare cosa succede quando accedi a HAProxy
- configurare HAProxy per servire una pagina di manutenzione personalizzata
- configurare l’interfaccia web in modo da poter monitorare visivamente le statistiche di HAProxy
- cambiare il pianificatore in qualcosa di diverso da round-robin
- configurare priorità/pesi per server particolari
Questo è tutto!
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.