====== Principe de fonctionnement HAProxy ======
**HAProxy** reçoit le trafic entrant via ses "**frontends**", Une fois le trafic reçu, **HAProxy** le distribue vers des "**backends**". En cas de panne d'un serveur, HAProxy **redirige** **automatiquement** le trafic vers les serveurs restants, assurant ainsi une continuité de service.
La configuration de **HAProxy** se fait via le fichier de configuration **haproxy.cfg** situé à **/etc/haproxy/haproxy.cfg**
Il est constitué de 4 sections:
* **Section global**
Cette section contient les **paramètres globaux** affectant le processus principal d'HAProxy, comme la **journalisation** et les **droits d'accès**.
* **Section defaults**
Définissez ici les **valeurs par défaut** pour les autres sections, évitant ainsi la répétition de paramètres communs
* Section **frontend**
* Section **backend**
----
===== Le Frontend et le Backend =====
{{ :wiki:proxy:haproxy:haproxy_principe_de_fonctionnement0.png?600 |}}
==== Frontend ====
Un **frontend** dans **HAProxy** définit comment les **connexions entrantes** sont gérées. C'est le point d'entrée pour le trafic client et spécifie :
* Les adresses **IP** et ports sur lesquels HAProxy **écoute**
* Le mode de fonctionnement (**HTTP ou TCP**)
* Les règles de **routage** des requêtes
Par exemple, un frontend typique pourrait ressembler à ceci :
frontend front_webservers
bind *:443
default_backend backend_webservers
option forwardfor
Dans cet exemple le frontend écoute sur le port 443 et dirige le trafic vers un backend nommé **"backend_webservers"**
----
==== Backend ====
Un **backend** dans **HAProxy** définit un groupe de serveurs qui traitent les **requêtes reçues** par le frontend. Il comprend :
* La liste des serveurs et leurs **adresses**
* L'algorithme d'**équilibrage de charge** à utiliser
* Les **options** de configuration spécifiques aux serveurs
Voici un exemple de configuration de backend :
backend backend_webservers
balance roundrobin
server srv-web-1 192.168.1.10:443 check
server srv-web-2 192.168.1.11:443 check
Ce backend utilise l'algorithme **roundrobin** pour distribuer les requêtes entre deux serveurs web.
----
===== Exemples simples d'utilisation =====
==== URL Forwarding ====
{{ :wiki:proxy:haproxy:haproxy_principe_de_fonctionnement3.png?600 |}}
----
==== Load balncing WEB ====
{{ :wiki:proxy:haproxy:haproxy_principe_de_fonctionnement2.png?600 |}}
----
==== Load balancing TLS ====
{{ :wiki:proxy:haproxy:haproxy_principe_de_fonctionnement1.png?600 |}}