HAProxy, comme son nom l'indique, est un serveur proxy et un équilibreur de charge pour fournir une haute disponibilité. Dans cet article, je vais d'abord montrer comment installer HAProxy dans FreeBSD. Ensuite, nous allons configurer pour agir en tant que proxy inverse.
L'installation
Sous FreeBSD, j'aime construire et installer mon logiciel à partir de l'arborescence des ports, donc exécutez-le en tant que root :
# cd /usr/ports/net/haproxy
# make install clean
Faites attention à l'écran si certaines options de dialogue apparaissent (principalement à partir de dépendances). Activez HAProxy dans /etc/rc.conf une fois installé et passez à la section suivante :
# /usr/local/etc/rc.d/haproxy enable
haproxy enabled in /etc/rc.conf
La configuration
Avant de procéder à la modification du fichier de configuration, laissez-moi vous expliquer un scénario :
Tout d'abord, nous n'avons qu'une seule adresse IP publique disponible. Deuxièmement, nous avons quelques services que nous voulons exposer sur Internet, disons une application (webapp) et notre site Web. Les deux fonctionnent sur leurs propres serveurs. Enfin, nous avons un troisième serveur de secours sur lequel nous avons déjà installé HAProxy dans la section précédente et ce sera celui exposé sur Internet.
Un utilisateur pointera son navigateur vers http://haproxy/website ou http://haproxy/app et haproxy enverra la requête au bon serveur et renverra les résultats au navigateur.
________ /------- [server A] [ client browser] -----> | haproxy |-----+ +----------+ \--------[server B]
Quoi qu'il en soit, wikipedia explique mieux comment fonctionne un proxy inverse.
Ajoutez les sections suivantes à /usr/local/etc/haproxy.conf. Pour commencer, les valeurs globales par défaut conviennent :
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
Si vous, comme moi, n'avez pas d'exemple haproxy.conf, ajoutez cette section en haut du fichier :
global daemon maxconn 4096 defaults log global mode http timeout connect 5s timeout client 10s timeout server 10s
Avec cette configuration minimale, vous pouvez vérifier si tout va bien et démarrer le service :
À des fins de test, j'ai créé haproxy pour obtenir des éléments de mon propre ordinateur :
J'ai un Apache où je stocke certains programmes dont je pourrais avoir besoin lorsque je suis sur le PC de quelqu'un d'autre. Le mot magique est l'URL complète de certains de ces programmes.
Qu'en est-il du vrai utiliser HAProxy ?
Ceci est un exemple minimal, pas très utile d'ailleurs. Je recommande fortement de lire au moins deux documents de HAProxy :
- Guide de démarrage et
- Manuel de configuration
Et votre haproxy.conf le fichier serait aussi compliqué ou simple que nécessaire.