Lorsqu’on déploie une application derrière un reverse proxy, l’application risque de publier des URLs non confirmes. En effet, Spring contruit des URLs et pour ça il utilise le hostname privé alors qu’il devrait utiliser le hostname public, c’est-à-dire celui utilisé par le client.
Dans une architecture avec un reverse proxy, celui-ci reçoit les requêtes HTTP et les transfère vers l’application Spring.
De façon classique, le reverse proxy ajoute des headers X-Forwarded-Xxx
que Spring peut utiliser.
RemoteIpValve
Il peut le faire de deux façons, soit en le gérant lui-même, soit en le délégant à Tomcat avec la RemoteIpValve
.
Ce choix se fait avec la propriété server.forward-headers-strategy
.
Pour activer la valve RemoteIpValve
de Tomcat:
server.forward-headers-strategy=NATIVE
ForwardedHeaderFilter
Pour utiliser le filtre ForwardedHeaderFilter
de Spring Framework:
server.forward-headers-strategy=FRAMEWORK
Ce dernier supporte à la fois les classiques X-Forwarded-Xxx
, mais aussi le header Forwarded
de la RFC-7239.