En essayant de comprendre pourquoi notre installation de Varnish 4.1 (sur CentOS7 via le repo varnish-cache.org) ne suivait pas les règles vcl établies pour enregistrer l'adresse IP du client dans un en-tête X-Forwarded-For (voir : Varnish 4 enregistre le proxy/équilibreur de charge au lieu des adresses IP des clients. ) J'ai remarqué quelque chose d'étrange en regardant les fichiers varnishlog :
- Begin req 9353447 rxreq
- Timestamp Start: 1488771709.337974 0.000000 0.000000
- Timestamp Req: 1488771709.337974 0.000000 0.000000
- ReqStart 172.25.20.65 19903
- ReqMethod GET
- ReqURL /about-us/
- ReqProtocol HTTP/1.1
- ReqHeader host: www.<notreallythishost>.com
- ReqHeader Accept: */*
- ReqHeader Accept-Encoding: gzip, deflate
- ReqHeader Cache-Control: no-cache
- ReqHeader From: bingbot(at)microsoft.com
- ReqHeader Pragma: no-cache
- ReqHeader User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
- ReqHeader X-Forwarded-For: 40.77.167.41
- ReqHeader X-Forwarded-Port: 80
- ReqHeader X-Forwarded-Proto: http
- ReqHeader Connection: keep-alive
- ReqUnset X-Forwarded-For: 40.77.167.41
- ReqHeader X-Forwarded-For: 40.77.167.41, 172.25.20.65
- VCL_call RECV
- ReqUnset X-Forwarded-For: 40.77.167.41, 172.25.20.65
- ReqHeader X-Forwarded-For: 172.25.20.65
- ReqUnset Accept-Encoding: gzip, deflate
- ReqHeader Accept-Encoding: gzip
- ReqUnset User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
- VCL_return hash
- VCL_call HASH
- VCL_return lookup
- VCL_call MISS
- VCL_return fetch
- Link bereq 9353449 fetch
- Timestamp Fetch: 1488771709.338395 0.000421 0.000421
- RespProtocol HTTP/1.1
Cela explique parfaitement pourquoi nous n'avons jamais pu obtenir autre chose que l'adresse IP de l'équilibreur de charge enregistrée par varnishncsa, quelle que soit la technique d'enregistrement utilisée.
Il semble qu'au cours du traitement de la demande, il crée l'en-tête X-Forwarded-For en ajoutant l'adresse IP de l'équilibreur de charge AWS à l'en-tête, mais lorsque vc_call est appelé, il le déconstruit à nouveau et supprime l'adresse IP du client d'origine. Alors, comment faire pour garder le X-Forwarded-For intact et pourquoi Varnish déplace-t-il les IP du côté gauche au lieu de les ajouter à l'en-tête X-Forwarded-For comme il le devrait ? Bug ?