私は 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
、見つかった値を返します。(技術的には、このヘッダーの最後の出現を読み取りますが、ヘッダーはHost
1 回だけ出現する必要があります。)
のmap
コンバータは、その前にある値( で接続,
)を取得し、マップ テーブルで検索して、結果を返します。
一致するものが見つからない場合、結果は返されません。そのため、-m found
テストは結果を返さず、ルールは一致しません。(-i
検索で大文字と小文字を区別しません)。
ルールが一致した場合、Location
リテラル文字列(必要に応じてhttps://
に変更) + マップ ファイルから書き換えられたホスト名 + 先頭で始まり、パスとクエリ文字列を含む元の要求 URI を使用して、応答ヘッダーの新しい URL を構築し、要求 URI 全体を保持します。http
/
元の URI を保持せず、すべてをターゲット サイトのメイン ページに送信するだけの場合は、%[capture.req.uri]
式から削除します。