URL: https://linuxfr.org/news/haproxy-1-6 Title: Haproxy 1.6 Authors: David Carlier claudex, palm123, Nÿco, ZeroHeure, Nils Ratusznik, NeoX, Benoît Sibaud et bubar🦥 Date: 2015年10月20日T05:54:20+02:00 License: CC By-SA Tags: haproxy, load-balancing et admin Score: 46 Haproxy est un serveur proxy et un [[répartiteur de charge]] pour les contraintes de haute-disponibilité. Écrit en C, il a la réputation d'être efficace, simple et rapide. Après 16 mois de développement la nouvelle branche 1.6 est la nouvelle stable, par conséquent une nouvelle branche 1.7 a été crée pour tout nouveau développement. De nombreux ajouts ont vu le jour depuis la version 1.5 et d'autres contributeurs ont rejoint le projet. Actuellement, Haproxy est utilisé par de nombreux sites et services web, tels que Github, Twitter, StackOverflow, Reddit, ainsi que Amazon Web Service. ![HAProxy](http://www.haproxy.org/img/haproxy-pmode.png) ---- [Site officiel](http://www.haproxy.org) [Brève liste des changements](http://blog.haproxy.com/2015/10/14/whats-new-in-haproxy-1-6/) [Manuel d'utilisation de Cyril Bonté](https://cbonte.github.io/haproxy-dconv/configuration-1.6.html) ---- # Nouveautés - Intégration de Lua. - Capture slots. - Nouvelles régles HTTP. - Nouveaux converters. - Détection d'appareils mobiles. - Déclarations de variables. - Traitement du corps d'une requête HTTP. - Partage de connection HTTP. - Lancement de scripts "health check". ## Intégration de Lua C'est clairement la plus importante nouveauté de cette release, elle apporte la possibilité d'étendre les possibilités de base d'Haproxy sans avoir à écrire des modules en C. Les niveaux où Lua peut intervenir : - Action. - Service. - Sample / Fetch et converters. Cela dit, cela requiert d'avoir installé Lua> 5.3. Exemple utilisant le module lua MD5 haproxy.cfg: ```sh global ... lua-load content.lua ... frontend http-in ... mode http http-request use-service lua.content ... ``` content.lua : ```sh core.register_service("content", "http", function(applet) local md5 = require("md5") local content = '{"myjson":1}' local contentchksum = md5.sumhexa(content) applet:set_status(200) applet:add_header("Content-MD5", contentchksum) applet:add_header("Content-Type", "application/json") applet:start_response() applet:send(content) end) ``` ## Capture slots C'est la possibilité de stocker une donnée en lui attribuant un identifiant comme suit ```sh frontend myfrontend ... declare capture request len 128 http-request capture req.hdr(User-Agent) id 0 ... backend mybackend ... http-response set-header X-User-Agent %[capture.req.hdr(0)] ``` ## Nouveaux converters Trop nombreux à énumérer, une liste complète est présentée [ici](https://cbonte.github.io/haproxy-dconv/configuration-1.6.html#7.3.1). ## Détection d'appareil mobiles Haproxy supporte désormais la détection d'appareils mobiles via deux bibliothèques tierces, 51 degrees ou DeviceAtlas via l'User-Agent, ou tous les entêtes HTTP via un converter ou un sample / fetch. Exemple de configuration ```sh global #### 51 degrees 51degrees-data-file /etc/51Degrees-Premium.dat 51degrees-property-name-list IsMobile DeviceType 51degrees-property-separator , 51degrees-cache-size 4096 #### DeviceAtlas deviceatlas-json-file /etc/deviceatlas.json deviceatlas-property-separator , frontend http-in bind *:8881 default mybackend #### 51 degrees #### with sample / fetch http-request set-header X-51D-IsMobileDeviceType %[51d.all(IsMobile,DeviceType)] #### with converter http-request set-header X-51D-IsMobileDeviceType %[req.fhdr(User-Agent),51d.single(IsMobile,DeviceType)] #### DeviceAtlas #### with sample / fetch http-request set-header X-DeviceAtlas-Data %[da-csv-fetch(primaryHardwareType,osName,osVersion,browserName,browserVersion)] #### with converter http-request set-header X-DeviceAtlas-Data %[req.fhdr(User-Agent),da-csv-conv(primaryHardwareType,osName,osVersion,browserName,browserVersion)] ``` ## Déclaration de variables Il existe maintenant la possibilite de déclarer (et d'utiliser) une variable comme suit : ```sh ... http-request set-var(txn.whereitcomesfrom) req.hdr(Referer) ... http-response set-header X-WhereitComesFrom %[var(txn.whereitcomesfrom)] ``` ## Traitement du corps d'une requête HTTP Via la nouvelle option http-buffer-request (niveau frontend ou backend), il est maintenant possible d'attendre que la requête soit complète avant tout traitement ce qui permet par exemple de traiter en fonction du corps de la requête. ## Partage de connexion HTTP Via le nouveau mot-clé http-reuse, il est possible pour plusieurs clients de partager la même connection pour un serveur. Plusieurs politiques sont possibles : never, safe, aggressive, always. ## Lancement de scripts « health check » Via le mot clé external-check, on peut vérifier l'état avec un script externe. Exemple ```sh global external-check backend mybackend external-check command ```

AltStyle によって変換されたページ (->オリジナル) /