2016-06-13 5 views
2

Ich habe eine Wildfly hinter einem Load Balancer, die Verbindung zwischen ihnen ist immer HTTP. Die Verbindung zwischen dem Client und dem Load Balancer kann HTTP oder HTTPS sein.Regel in undertow-handlers.conf HTTP auf HTTPS umleiten

Der Load Balancer legt einen Header (X-Forwarded-Proto) fest, damit Wildfly weiß, welches Protokoll der Client verwendet.

Ich versuche, eine Undertow-Regel auf HTTPS umleiten unter Berücksichtigung aller oben genannten Bedingungen zu schreiben.

Dies ist einer meiner erfolgreichen Versuche (diese Regel in der undertow-handlers.conf Datei geschrieben wird und es ist das einzige, was in dieser Datei):

regex ('/(.*) ') und regex (pattern =' http‘, Wert = '% {i, X-Forwarded-Proto}' Voll match = true) -> Redirect (https://server.com/ $ {1})

Wenn der Client versucht, auf eine URL wie folgt zuzugreifen: http: //server.com/m yapp wird zu https: //server.com umgeleitet, aber der Pfad /myapp fehlt.

Wie kann ich meine Undertow-Regel beheben, um den vollständigen Pfad zu behalten?

+0

Ich kenne diese Wildfly-Regel (geschrieben über Undertow) nicht wirklich, um eine Umleitung vorzunehmen, würde aber gerne etwas erraten, das mir beim Lesen Ihrer Frage in den Sinn kam: is "regex ('/(.*) ') "soll nur dem" relativen Pfad "entsprechen oder es wird die gesamte URL übereinstimmen (zB" http://server.com/some_endpoint)? – Miere

+0

Es passt nur den relativen Pfad, ich habe es in anderen Szenarien verwendet und es funktioniert perfekt, aber dies ist das erste Mal, dass ich ein Prädikat mit 2 Regex-Bedingungen verwende, ich weiß nicht, ob das ein Problem sein könnte. –

Antwort

4

Versuchen:

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

Oder

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

Je nachdem, ob Sie die Proxy-Adresse Weiterleitung in den HTTP-Listener aktiviert haben (wenn Sie undertow haben die X-Forwarded-Proto automatisch handhaben also erscheint es unter% {SCHEME}).

+0

Es funktioniert perfekt! Danke –

Verwandte Themen