Как маскировать URL-адреса в HAProxy?

Как маскировать URL-адреса в HAProxy?

Есть ли способ сделать маскировку URL в HAProxy? Я хотел бы иметь URL, направляющий на мой балансировщик нагрузки, т.е.www.example.com, перенаправить на другой URL, который у меня есть для другого приложения. Однако я хотел бы, чтобы браузер пользователя по-прежнему отображал исходный URL, (www.example.com). Как бы я это сделал?

решение1

Вероятно, вы можете сделать это с помощью reqrep.

frontend FE
  bind 10.10.10.10:80
  mode http

  acl is_domain.com hdr(host) -i domain.com
  use_backend BE:domain.com if is_domain.com

backend BE:domain.com
  mode http
  reqrep ^([^\ ]*)\ (.*) \1\ /path/\2
  server domain2.com:80

Хотя вам, вероятно, следует указать IP-адрес, domain2.comна который происходит преобразование, в serverстроке, чтобы не столкнуться со странным поведением.

решение2

Вместо того, чтобы делать маскировку URL, мы поняли, что можем сделать это проще, просто сделав перенаправление на бэкенде при отправке на бэкенд-сервер. Я не знаю, идеально ли это, но это достигло нашей цели на данный момент. Вот код:

фронтенд http_in

    ...
    acl is_test1.domain.com hdr(host) -i test1.domain.com                                        # Host & Domain only check.
    acl is_path_null path /                                                                                        # No path check
    use_backend domain.com.nopath if is_test1.domain.com is_path_null                   # If Host & Domain matches and path is null.
    use_backend domain.com.path if is_test1.domain.com !is_path_null                      # If Host & Domain matches and path is not null.

фронтенд https_in

    ...
    acl is_path_null path /                                                                                        # No path check
    use_backend domain.com.nopath if { ssl_fc_sni -i test1.domain.com } is_path_null # If Host & Domain matches and path is null.
    use_backend domain.com.path if { ssl_fc_sni -i test1.domain.com } !is_path_null    # If Host & Domain matches and path is not null.

бэкэнд domain.com.nopath

    ...
    server SERVER IP#:80 redir https://test1.domain.com/webapp check

бэкэнд domain.com.path

    ...
    server SERVER IP#:80 check

Связанный контент