Application Spring derrière un reverse proxy

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.