Ah, j'ai eu la même question ! Nos développeurs ont produit un service Web multifonctionnel à partir d'un seul nom d'URL, parce que nous devons prendre en charge les navigateurs non conformes à la norme CORS (IE 8 et 9). Un nom DNS menant à une adresse VIP comporte plusieurs sous-répertoires, chacun correspondant à une application différente. Notre équilibreur de charge doit donc vérifier l'état de santé de chacun des services, puis le traiter comme un grand test "ET", c'est-à-dire que si même un des services ne passe pas le contrôle, alors nous devons retirer ce serveur de la ferme jusqu'à ce que todo d'entre eux passent.
Nous sommes en train de passer des équilibreurs de charge Cisco ACE, et sur cette plate-forme, il suffit de définir plusieurs configurations de "sondes", puis d'appeler plusieurs sondes au sein d'une même batterie de serveurs, une ligne après l'autre, et toutes les sondes sont exécutées. Comme vous l'avez probablement découvert, HAProxy ne vous permet pas de définir plus d'une "option httpchk"... ou du moins il les ignore toutes sauf une, ce qui ne vous permet pas d'obtenir les tests que vous recherchez. Mais j'ai trouvé dans le manuel que je pouvais le faire en n'utilisant pas httpchk, en substituant une série de lignes "connect, send, check" sous "option tcp-check". Cela fonctionne parfaitement.
option tcp-check
tcp-check connect
tcp-check send GET\ /FirstApplication/check.aspx?healthcheck\ HTTP/1.0\r\n\r\n
tcp-check expect string Healthy
tcp-check connect
tcp-check send GET\ /SecondApplication/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesThisIsGood
tcp-check connect
tcp-check send GET\ /ThirdApp/Check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string ExpectedCheckResult
tcp-check connect
tcp-check send GET\ /NumberFourApp/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesItIsWorking
Notez que vous devez rétrograder chaque espace dans la chaîne que vous envoyez. J'utilise HTTP/1.0 dans la requête, qui par défaut ne fait pas de keepalive, donc je me reconnecte dans chaque série de lignes. Je suppose que je pourrais aussi utiliser HTTP/1.1, mais je devrais alors transmettre un en-tête Host, donc je pense que c'est plus facile de cette façon. En exécutant ces quatre vérifications d'affilée, cela ne prend toujours que 60 ms, donc je suis satisfait. Notez également que je n'utilise que "expect string", mais qu'il existe également un "expect rstring" pour la recherche par expression régulière dans le contenu du résultat renvoyé par le serveur.