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' reqaddoption 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- Hosttête et la première ligne de la requête HTTP dans un en-tête personnalisé
reqaddavec 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 ...reqirepprend é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.