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.
