Порт перенаправления HAProxy и URL-адрес маски - PullRequest
0 голосов
/ 18 марта 2020

У меня есть несколько веб-серверов, к которым можно напрямую перейти по следующему URL:

https://abcd.example.com: 8445 / рабочий стол / контейнер / посадка. jsp? Locale = en_US https://wxyz.example.com: 8445 / рабочий стол / контейнер / посадка. jsp? Locale = en_US

Мне нужно использовать HAProxy для балансировки нагрузки между ними и использовать следующее Вместо этого при переходе по внешнему интерфейсу URL-адреса:

http://1234.example.com/desktop/container/landing.jsp?locale=en_US или https://1234.example.com: 8445 / рабочий стол / контейнер / лендинг. jsp? Locale = en_US

Итак, другие требования, кроме двух приведенных выше:

  1. Если начальным трафиком c является порт 80, преобразуйте в порт 8445
  2. Маска URL так что в браузере, когда он перенаправляется на https и порт на 8445, хост остается неизменным, например: https://1234.example.com: 8445 / desktop / container / Landing. jsp? locale = en_US

Вот мой конфиг на данный момент:

frontend WebApp_frontend
    mode http
    bind 10.4.34.11:80
    acl is80 dst_port 80
    http-request set-uri https://%[req.hdr(Host)]:8445%[path]?%[query] if is80
    default_backend WebApp-backend

backend WebApp_backend
    description WebApp
    balance roundrobin
    mode http
    server webserver1 10.2.89.222:8445 check inter 5s fall 3 rise 5 downinter 1m ssl verify none
    server webserver2 10.4.89.223:8445 check inter 5s fall 3 rise 5 downinter 1m ssl verify none

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что при доступе к веб-интерфейсу HAProxy перенаправит вас на любой из веб-серверов и заставьте вашего клиента подключаться к веб-серверу напрямую, а не через HAProxy. Мне нужно соединение, чтобы остаться через HAProxy.

1 Ответ

0 голосов
/ 19 марта 2020

Если все ваше приложение делает перенаправление на HTTP, то вам, вероятно, следует просто обработать это непосредственно в HAProxy. Возможно, вы также захотите узнать, поддерживает ли ваше приложение X-Forwarded-Proto и X-Forwarded-Host.

Другой вариант - вы можете заставить HAProxy переписывать перенаправления из внутреннего приложения на выбранное вами имя хоста. Используя HAProxy 2.1, вы бы сделали что-то вроде этого:

http-response replace-header location https?://[^:/]*(:?[0-9]+/.*)  https://1234.example.com\1 if { status 301:302 }
...