J'ai la configuration suivante:
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
Je voudrais configurer le HAProxy pour ajouter un en-tête personnalisé contenant l'URL d'origine. Par exemple si l'utilisateur demande http://example.com/foo?bar=baz
, c'est-à-dire:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
J'aimerais que HAProxy traduise cette demande vers le backend comme ceci:
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
L' reqadd
option me permet uniquement d'ajouter un en-tête avec une valeur statique. J'ai pu obtenir la partie chemin de la demande en utilisant reqrep
:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
mais malheureusement, cela ne capture que la partie chemin de l'URL d'origine, ce qui entraîne l'en-tête suivant:
x-custom-header: /foo?bar=baz
Ma question est donc de savoir s'il est possible dans HAProxy 1.4 de combiner à la fois l'en- Host
tête et la première ligne de la requête HTTP dans un en-tête personnalisé
reqadd
avec un acl qui fait référence àbe_id
(backend-id)? Ce n'est pas précisément dynamique, mais cela pourrait vous rapprocher si le nombre de backends est petit ...reqirep
prend également en charge un acl facultatif, vous pouvez donc éventuellement écrire des expressions rationnelles distinctes pour chaque backend, chaque actif uniquement si un acl correspond au backend sélectionné - id.