2016-06-13 2 views
2

J'ai un Wildfly derrière un équilibreur de charge, la connexion entre eux est toujours HTTP. La connexion entre le client et l'équilibreur de charge peut être HTTP ou HTTPS.Règle dans undertow-handlers.conf pour rediriger HTTP vers HTTPS

L'équilibreur de charge définit un en-tête (X-Forwarded-Proto) pour permettre à Wildfly de savoir quel protocole le client utilise.

J'essaye d'écrire une règle Undertow pour rediriger vers HTTPS en tenant compte de toutes les conditions ci-dessus.

C'est l'un de mes essais les plus réussis (cette règle est écrite dans le fichier -undertow handlers.conf et il est la seule chose dans ce fichier):

regex ('/(.*) ') et regex (modèle =' http », valeur = '% {i, X-Forwarded-Proto}', full-match = true) -> redirect (https://server.com/ $ {1})

Lorsque le client essaie d'accéder à une URL comme: http: //server.com/m yapp est redirigé vers https: //server.com, mais le chemin /myapp est manquant.

Comment puis-je corriger ma règle Undertow pour conserver le chemin complet?

+0

Je ne connais pas vraiment cette règle de Wildfly (écrite sur Undertow) pour appliquer une redirection, mais j'aimerais deviner quelque chose qui m'est venu à l'esprit pendant que je lisais votre question: est "regex ('/(.*) ') "censé correspondre seulement au" chemin relatif "ou il correspondra à l'URL entière (par exemple" http://server.com/some_endpoint)? – Miere

+0

Il correspond seulement au chemin relatif, je l'ai utilisé dans d'autres scénarios et il fonctionne parfaitement, mais c'est la première fois que j'utilise un prédicat avec 2 conditions regex, je ne sais pas si cela pourrait poser problème –

Répondre

4

Essayez:

equals('http', %{SCHEME}) -> redirect(https://server.com/%U) 

Ou

equals('http', %{i,X-Forwarded-Proto}) -> redirect(https://server.com/%U) 

Selon si vous avez activé proxy-adresse-transfert dans l'écouteur HTTP (si vous avez undertow se chargera automatiquement le X-Forwarded-Proto donc il apparaît sous% {SCHEME}).

+0

Cela fonctionne parfaitement! –