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.
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
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