2017-07-24 2 views
0

J'utilise WildFly derrière un équilibreur de charge AWS. Je veux que le serveur Undertow dans WildFly redirige le trafic http vers https, et je peux le faire le plus souvent avec succès la ligne suivante placée dans undertow-handlers.conf:Avancé Tweak sur Undertow-handlers.conf pour http https redirect

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

Grâce à these folks pour m'avoir amené jusqu'ici! Maintenant, voici mon tweak désiré. Parfois, je lance mon application Web derrière un programme d'équilibrage de charge de test en utilisant 'dev.server.com' et parfois je l'exécute derrière un programme d'équilibrage de la charge de production en utilisant 'app.server.com'. Actuellement, je dois me rappeler d'éditer manuellement undertow-handlers.conf chaque fois que je change de balancier. J'espère qu'il y a un moyen de changer le 'dev' et 'app' codés en dur à quelque chose de mécanique. Existe-t-il un moyen de dire à Undertow d'utiliser simplement le nom de domaine demandé initialement?

Merci.

Répondre

1

Heureusement, la configuration de sous-flux vous donne accès aux en-têtes de demande via Exchange Attributes, que vous utilisez déjà pour accéder à l'en-tête X-Forwarded-Proto. Donc, la solution est d'utiliser simplement l'en-tête Host de la demande comme ceci:

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

1

Si vous souhaitez le conserver dans le cadre du déploiement, essayez d'utiliser le %h dans les expressions de redirection. Par exemple:

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

Une autre option consiste à configurer le serveur pour gérer la redirection pour vous. Les commandes CLI ressembleraient à ce qui suit en supposant les ports par défaut de 8080 pour http et 8443 pour https.

/subsystem=undertow/configuration=filter/rewrite=http-to-https:add(redirect=true, target="https://%h:8443%U") 
/subsystem=undertow/server=default-server/host=default-host/filter-ref=http-to-https:add(predicate="equals(%p, 8080)") 

Vous pouvez voir tous les attributs d'échange possibles dans le Undertow documentation.

+0

Merci, @ James. J'ai essayé d'échanger% h de Undertow à la place de 'dev.server.com', mais cela n'a pas fonctionné: la redirection ne fonctionnait plus. Je suppose que% h n'est pas une réplique exacte du domaine demandé. –

+0

Oui, je suppose que ce n'est peut-être pas une réplique exacte. http://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html#getHostString--. Si vous utilisez le paramètre sous-système Undowow, vous pouvez utiliser une expression pour l'attribut cible sur le filtre de réécriture. 'target =" https: // $ {jboss.host.name:%h}: 8443% U "' –