Configuration de HaProxy en reverse proxy

HaProxy est un outil formidable qui permet notamment de faire de l’équilibrage de charge ou du proxy inversé. C’est sur cette seconde fonctionnalité que nous allons travailler.

Le but est de rendre accessible deux serveurs web différents à partir de la même adresse IP et du même port via deux sous-domaines.

Schéma représentant une batterie de serveurs Apache et Haproxy

Prérequis :

Deux serveurs web, ici apache

Un serveur linux fonctionnel, sur lequel nous allons mettre en place HaProxy

Une règle sur votre routeur redirigeant le ports 80 du WAN vers le serveur HaProxy (sauf si local)

La configuration DNS chez votre registar ou de votre serveur DNS si local, de vos deux sites

Les adresses des serveurs pour ce lab

  • 10.10.10.1 -> a.monsite.fr
  • 10.10.10.2 -> b.monsite.fr
  • 10.10.10.20 -> haproxy

Connectez vous sur votre serveur HaProxy pour installer le logiciel

root@CT-HAPROXY:~# apt-get install haproxy

Normalement un utilisateur haproxy a été créé, si ce n’est pas le cas vous pouvez le créer vous même.

Modifiez le fichier de configuration de HaProxy.

Les parties qui nous intéressent réellement sont le frontend et les deux backend.

Il s’agit là d’une configuration HTTP, mais il est tout à fait possible de faire du HTTPS du WAN jusqu’au HaProxy puis du HTTP du HaProxy vers les serveurs Apache.

Je mets un lien vers un fichier de configuration HTTPS ici -> HTTPS-HaProxy

root@CT-HAPROXY:~# nano /etc/haproxy/haproxy.cfg


global
maxconn 2048
user haproxy
group haproxy
daemon
log /dev/log    local0
log /dev/log    local1 notice
chroot /var/lib/haproxy


defaults
log     global
mode http
option  httplog
option  dontlognull
option forwardfor
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http


#Le nom de mon frontend (ce que vous voulez)
frontend http_fe
#Tout ce qui arrive sur le port 80 de notre haproxy
bind *:80
#L'acl_a correspondra à a.monsite.fr
acl acl_a hdr(host) a.monsite.fr
#Et l'acl_b à b.monsite.fr
acl acl_b hdr(host) b.monsite.fr
#si c'est l'acl a qui est appelée alors on utilise le backend a
use_backend backend_a if acl_a
#si c'est l'acl b qui est appelée alors on utilise le backend b
use_backend backend_b if acl_b


#Déclaration du backend a
backend backend_a
#Utilisation des cookies afin de maintenir la connexion 
cookie cookie_monsite.fr insert nocache
#Ajout de notre premier server web + les options pour la vérification et le cookie
server a.monsite.fr 10.10.10.1:80 check cookie stcookie01 


#Déclaration du backend a
backend backend_b
#Utilisation des cookies afin de maintenir la connexion 
cookie cookie_monsite.fr insert nocache
#Ajout de notre second server web + les options pour la vérification et le cookie
server b.monsite.fr 10.10.10.2:80 check cookie stcookie02 

Il est tout à fait possible de faire fonctionner HaProxy sans les ACL et avec un seul backend mais personnellement j’ai eu beaucoup de soucis donc je ne le recommande pas.

Une fois le fichier complété, redémarrez le service haproxy

root@CT-HAPROXY:~# systemctl restart haproxy.service

Dirigez vous sur votre plus beau navigateur internet

et dans deux onglets différents tapez a.monsite.fr et b.monsite.fr

Capture d'écran du navigateur sur l'adresse siteA
Capture d'écran du navigateur sur l'adresse siteB

Si vous souhaitez faire un test en local n’oubliez pas de modifier le fichier hosts de votre système d’exploitation

C:\Windows\System32\drivers\etc\hosts sous Windows
/etc/hosts sous Linux

10.10.10.20	a.monsite.fr
10.10.10.20	b.monsite.fr

0 Commentaires

Ecrire un commentaire

XHTML: Vous pouvez utiliser les balises : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>