HAProxy, come suggerisce il nome, è un server proxy e un sistema di bilanciamento del carico per fornire un'elevata disponibilità. In questo articolo prima mostrerò come installare HAProxy in FreeBSD. Successivamente ci imposteremo per agire come proxy inverso.
L'installazione
In FreeBSD mi piace creare e installare il mio software dall'albero dei port, quindi esegui come root:
# cd /usr/ports/net/haproxy
# make install clean
Presta attenzione allo schermo per vedere se vengono visualizzate alcune finestre di dialogo delle opzioni (principalmente dalle dipendenze). Abilita HAProxy in /etc/rc.conf una volta installato e continua con la sezione successiva:
# /usr/local/etc/rc.d/haproxy enable
haproxy enabled in /etc/rc.conf
La configurazione
Prima di procedere alla modifica del file di configurazione, lascia che ti spieghi uno scenario:
Innanzitutto abbiamo un solo IP pubblico disponibile. In secondo luogo, abbiamo un paio di servizi che vogliamo esporre su Internet, diciamo un'app (webapp) e il nostro sito web. Entrambi sono in esecuzione sui propri server. Finalmente abbiamo un terzo server di riserva dove abbiamo già installato HAProxy nella sezione precedente e questo sarà quello esposto su internet.
Un utente punterà il proprio browser su http://haproxy/website o http://haproxy/app e haproxy invierà la query al server corretto e restituirà i risultati al browser.
________ /------- [server A] [ client browser] -----> | haproxy |-----+ +----------+ \--------[server B]
Ad ogni modo, Wikipedia spiega meglio come funziona un proxy inverso.
Aggiungi le seguenti sezioni a /usr/local/etc/haproxy.conf. Per iniziare vanno bene i valori di default globali:
frontend http-in bind *:80 option forwardfor use_backend uno if { path_beg /app} use_backend dos if { path_beg /www } backend uno mode http server nodea ipAp.or.fqdn:port backend dos mode http server nodeb ipB.or.fqdn:port
Se tu, come me, non hai un esempio haproxy.conf, aggiungi questa sezione all'inizio del file:
global daemon maxconn 4096 defaults log global mode http timeout connect 5s timeout client 10s timeout server 10s
Con questa configurazione minima puoi verificare se tutto è a posto e avviare il servizio:
A scopo di test ho creato haproxy per ottenere cose dal mio PC:
Ho un Apache in cui memorizzo alcuni programmi di cui potrei aver bisogno quando sono sul PC di qualcun altro. La parola magica è l'URL completo di alcuni di questi programmi.
Che ne dici di alcuni reali uso di HAProxy?
Questo è un esempio minimo, non molto utile tra l'altro. Consiglio vivamente di leggere almeno due documenti di HAProxy:
- Guida introduttiva e
- Manuale di configurazione
E il tuo haproxy.conf file sarebbe complicato o semplice quanto necessario.