J'ai un problème avec le serveur HAProxy. Je veux transmettre en en-tête une adresse IP client. Je l'ai presque fait, mais il y a un cas intéressant et je ne peux pas le comprendre. J'ai besoin d'écrire l'IP du client à 2 endroits dans l'en-tête, dans les balises X-CLIENT-IP et X-FORWARDED-FOR.
Le problème est: quand j'utilise
option http-server-close
option forwardfor
Sur le serveur cible, je vois dans l'en-tête X-FORWARDED-FOR = xxx.xxx.xxx.xxx (ip client) mais il n'y a pas d'en-tête x-client-ip.
Quand j'utilise:
option forwardfor header X-Client-IP
option http-server-close
Sur le serveur cible, je vois l'en-tête X-CLIENT-IP = xxx.xxx.xxx (IP client) mais X-FORWARDED-FOR = xxx.xxx.xxx.xxx (HAProxy ip)
J'ai besoin de voir sur l'en-tête cible où X-CLIENT-IP et X-FORWARDED-FOR ont une valeur d'IP client.
J'essaie de mélanger des configurations comme
option forwardfor
option forwardfor header X-Client-IP
option http-server-close
Aucun effet. Je ne peux pas non plus installer de modules. La cible est IIS.
Des idées? :(
Vous pouvez essayer de configurer un en-tête personnalisé, comme ceci:
http-request set-header X-Client-IP %[src]
Ou, vous pouvez même le copier à partir de l'en-tête X-Forwarded-For, je pense que la syntaxe irait quelque chose comme:
http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])
Si vous souhaitez utiliser les deux, vous devrez ajouter le second avec un http-request
mot-clé.
# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]
La réponse suggérée ci-dessus qui ne fonctionnait pas pour KacproSo devait simplement lire la valeur en ajoutant &[...]
, cela devrait donc fonctionner correctement:
http-request set-header X-Client-IP %[req.hdr_ip([X-Forwarded-For])]
Essayer HAproxy 1.7, c'est la syntaxe correcte qui fait que cela fonctionne, sans les carrés carrés autour de X-Forwarded-For
http-request set-header X-Client-IP %[req.hdr_ip(X-Forwarded-For)]