HAProxy で URL をマスクするにはどうすればよいですか?

HAProxy で URL をマスクするにはどうすればよいですか?

HAProxyでURLマスキングを行う方法はありますか?ロードバランサーにURLを誘導したいのですが、参考文献、別のアプリケーション用の別のURLにリダイレクトします。ただし、ユーザーのブラウザには元のURLが表示されたままにしておきたいのですが、(参考文献)。どうすればいいでしょうか?

答え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.

バックエンドドメイン.com.nopath

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

バックエンドドメイン.com.path

    ...
    server SERVER IP#:80 check

関連情報