次のセットアップがあります。
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
元のURLを含むカスタムヘッダーを追加するようにHAProxyを構成したいと思います。たとえば、ユーザーがリクエストする場合http://example.com/foo?bar=baz
、つまり:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
HAProxyがこのリクエストをバックエンドに変換するようにしたいと思います。
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
このreqadd
オプションでは、静的な値を持つヘッダーのみを追加できます。を使用してリクエストからパス部分を取得できましたreqrep
:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
ただし、残念ながら、これは元のURLのパス部分のみをキャプチャし、次のヘッダーを生成します。
x-custom-header: /foo?bar=baz
したがって、私の質問は、HAProxy 1.4でHost
HTTPリクエストのヘッダーと最初の行の両方をカスタムヘッダーに結合できるかどうかです。
reqadd
を参照するacl と組み合わせてみましたbe_id
か?それは正確に動的ではありませんが、バックエンドの数が少ない場合に近づく可能性があります...reqirep
オプションのaclもサポートしているので、バックエンドごとに別々の正規表現を書くことができます。 id。