HAProxy에서 URL을 어떻게 마스크합니까?

HAProxy에서 URL을 어떻게 마스크합니까?

HAProxy에서 URL 마스킹을 수행할 수 있는 방법이 있습니까? 내 로드 밸런서로 연결되는 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

관련 정보