2016-06-13 3 views
2

У меня есть Wildfly за балансировщиком нагрузки, между ними всегда есть HTTP. Соединение между клиентом и балансировщиком нагрузки может быть HTTP или HTTPS.Правило inhand-handlers.conf для перенаправления HTTP на HTTPS

Балансировщик нагрузки устанавливает заголовок (X-Forwarded-Proto), чтобы Wildfly знал, какой протокол использует клиент.

Я пытаюсь написать правило Undertow для перенаправления на HTTPS с учетом всех вышеперечисленных условий.

Это одна из моих более успешных попыток (это правило написано в прибойный-handlers.conf файл, и это единственное, что в этом файле):

регулярное выражение ('/(.*) ') и регулярное выражение (шаблон =' HTTP», значение = '% {I, X-Forwarded-Proto}', полный матч = истина) -> переадресацией (https://server.com/ $ {1})

Когда клиент пытается получить доступ к URL-адресу: http: //server.com/m yapp перенаправляется на https: //server.com, но путь /myapp отсутствует.

Как я могу исправить свое правило Undertow, чтобы сохранить полный путь?

+0

Я действительно не знаю этого правила Wildfly (написанного над Undertow), чтобы применить некоторое перенаправление, но хотел бы угадать то, что пришло мне в голову, когда я читал ваш вопрос: «regex ('/(.*) '), «должен соответствовать только« относительному пути »или соответствовать всему URL-адресу (например,« http://server.com/some_endpoint ») – Miere

+0

Он соответствует только относительному пути, я использовал его в других сценариях, и это отлично работает, но это первый раз, когда я использую предикат с 2 регулярными выражениями, я не знаю, может ли это быть проблемой. –

ответ

4

Try:

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

Или

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

В зависимости от того, если вы включили прокси-адреса переадресации в HTTP слушателя (если у вас есть прибойный будет автоматически обрабатывать X-Forwarded-Proto поэтому он отображается в% {SCHEME}).

+0

Он отлично работает! –