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 haproxy

Puoi controllare la versione con:

haproxy -v

Dobbiamo abilitare HAProxy per essere avviato dallo script di init /etc/default/haproxy. Imposta l’opzione ENABLED su 1 come:

ENABLED=1

Per 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 check

Spiegazione:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

La 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     50000

La 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 check

Il 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 start

Test 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!

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.