Vous êtes ici : Installer et exploiter → Installation → Serveur applicatif
Installation HAProxy
Installation et configuration d'HAProxy pour un cluster applicatif K-Sup.
HA-Proxy
Description
HAProxy signifie High Available Proxy.
Il s'agit d'un proxy HTTP(S) ou TCP permettant de mettre en place des architectures en load-balancing afin de garantir un haut taux de disponibilité.
Site officiel : http://www.haproxy.org/
Quelques éléments de vocabulaire :
- Front-end : Entrée, reçoit les requêtes entrantes
- Back-end : Sortie, traite les requêtes
- ACL : règle/condition (restriction d'URL ou autre)
Fonctionnalités intéressantes
- HTTPS : le HAProxy peut être configuré pour traiter les paquets HTTPS (depuis la version 1.5)
- Plusieurs algorithmes de load-balancing. Cependant, l'algorithme "round-robin" correspond aux besoins de K-Sup
- Faire du routage conditionnel vers les back-end
- Le balancing peut être statique (via un cookie dans les en-têtes HTTP). C'est-à-dire qu'un client sera toujours dirigé sur les mêmes back-end
- Le serveur HAProxy peut faire des pings des back-ends afin de connaître l'état de la route (action ou inactif). Il s'agit de l'utilisation d'une sonde portée par l'application K-Sup (par défaut, la page d'accueil).
- Ajouter des informations dans les en-têtes HTTP
Installation
Debian
|
Configuration
La configuration du HAProxy se fait dans le fichier
|
Exemple de configuration
Ci-dessous la configuration du HAProxy pour :
- déclaration de deux front-ends :
- un HTTP (port 80) : redirigeant les appels vers les front-end HTTPS
- un HTTPS (port 443) :
- transfert des appels back-end tomcat
- ajout dans l'en-tête HTTP du "proto https" pour que apache puisse savoir que l'appel initial est en HTTPS
- déclaration d'un back-end :
- en load-balancing round-robin
- routing statique des serveurs
- ping des serveurs pour connaître leur état
- déclaration des serveurs
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Configuration SSL générée par https://mozilla.github.io/server-side-tls/ssl-config-generator/ pour haproxy 1.7.x
# Oldest compatible clients: Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7
# set default parameters to the intermediate configuration
tune.ssl.default-dh-param 2048
ssl-default-bind-ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
ssl-default-bind-options no-sslv3 no-tls-tickets
ssl-default-server-ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
ssl-default-server-options no-sslv3 no-tls-tickets
# Création d'une socket utilisée par la supervision par un outil de monitoring
# Peut aussi être utilisé pour consulter les statistiques de HAProxy : hatop -s /var/run/haproxy.socket
stats socket /var/run/haproxy.socket
defaults
log global
mode http
maxconn 10000
option httplog
option dontlognull
option httpclose
option forwardfor
timeout connect 5s
timeout client 30s
timeout server 30s
timeout queue 5s
timeout check 3s
timeout http-request 15s
timeout http-keep-alive 30s
# erreur lorsque qu'un back-end est inaccessible
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
frontend req_http
bind *:80
redirect scheme https if !{ ssl_fc }
frontend req_https
bind *:443 ssl crt /etc/ssl/my_ssl/haproxy.pem
reqadd X-Forwarded-Proto:\ https
default_backend tomcat
backend tomcat
balance roundrobin
cookie SERVERID insert indirect nocache
# permet de casser la persistance du balancing si un serveur est inaccessible
option redispatch
# ping des serveurs pour connaître leur état
option httpchk GET / HTTP/1.1\r\nHost:\ www
# déclaration des serveurs qui composent le balancing (dans /etc/hosts ou accessible par dns)
server tc1 tomcat1:80 check cookie tc1
# Ajout d'un serveur supplémentaire
# server tc2 tomcat2:80 check cookie tc2
Cohabitation avec Apache
Prise en compte de l'HTTPS
Pour rappel, si le HAProxy déchiffre les appels HTTPS, il les transfère en HTTP à ses back-end.
Donc afin qu'Apache et par conséquent Tomcat ait l'information que l'appel d'origine est en HTTPS il faut :
- ajouter la ligne suivant dans les VirtualHosts
SetEnvIfNoCase X-Forwarded-Proto HTTPS HTTPS=on
- s'assurer que la ligne de configuration HAProxy suivante figure bien dans la déclaration du front-end
reqadd X-Forwarded-Proto:\ https
Mise à jour des LOG Apache
Afin de faire figurer dans les logs d'Apache les IPs des clients à l'origine des appels et non l'IP du HAProxy, il est nécessaire de d'installer un nouveau module : mod_remoteip.
Avant tout, il faut s'assurer que la ligne de configuration HAProxy suivante figure bien dans la configuration :
|
Installation et activation du module sur le noeud applicatif (Tomcat / Apache)
|
Mise à jour des VirtualHosts pour intégrer le module
|
Mis à jour le 17 juin 2022
Connectez-vous (avec vos identifiants Communauté) pour suggérer une correction ou un complément :