HAProxy 1.7 マップファイルを使用して特定のドメインをリダイレクト/書き換える

HAProxy 1.7 マップファイルを使用して特定のドメインをリダイレクト/書き換える

私は HAProxy を初めて使用しており、ドメインが定義されたマップ ファイル内のリクエストをリダイレクトしたいと考えています。簡単な例: 私の redirect.map ファイルでは次のようになります:

abc.com xyz.com
def.ru idk.com

したがって、ユーザーがドメイン abc.com または def.ru にリクエストを送信すると、定義されたドメインにリダイレクトされます。ただし、asd.com をリクエストした場合は、リダイレクトは行われません。私の目的は、これらのリダイレクトをマップ ファイルで定義して、簡単に変更できるようにすることです。

次に、URI の書き換えで同じことをしたいと思います。次のようになります。

http-request set-uri X if Y from rewrite.map

したがって、マップ ファイルは次のようになります。

 (my X variable)    (my Y variable)
/abc/def/specific  www.mydomain.com/specific

HAProxy でこれを行う機会はあるのでしょうか?

答え1

http-request redirect location https://%[hdr(host),map(/etc/haproxy/rewrite.map)]%[capture.req.uri] code 301 if { hdr(host),map(/etc/haproxy/rewrite.map) -i -m found }

hdr(x)フェッチリクエスト ヘッダーを読み取りx、見つかった値を返します。(技術的には、このヘッダーの最後の出現を読み取りますが、ヘッダーはHost1 回だけ出現する必要があります。)

mapコンバータは、その前にある値( で接続,)を取得し、マップ テーブルで検索して、結果を返します。

一致するものが見つからない場合、結果は返されません。そのため、-m foundテストは結果を返さず、ルールは一致しません。(-i検索で大文字と小文字を区別しません)。

ルールが一致した場合、Locationリテラル文字列(必要に応じてhttps://に変更) + マップ ファイルから書き換えられたホスト名 + 先頭で始まり、パスとクエリ文字列を含む元の要求 URI を使用して、応答ヘッダーの新しい URL を構築し、要求 URI 全体を保持します。http/

元の URI を保持せず、すべてをターゲット サイトのメイン ページに送信するだけの場合は、%[capture.req.uri]式から削除します。

関連情報