HAProxyリダイレクト関数にヘッダーを挿入する

HAProxyリダイレクト関数にヘッダーを挿入する

HAProxy 1.5.8 を使用しています。

基本的な 301 ルールは次のとおりです。

frontend http_frontend
  bind *:80
  mode http
  redirect location https://xxxx.com code 301

応答は次のようになります。

HTTP/1.1 301 Moved Permanently
Content-length: 0
Location: https://xxxx.com
Connection: close

通常の Web サーバーと同様に、ヘッダーに日付を追加する必要があります。

レスパッド関数はリダイレクトに影響を与えないようです。

出来ますか ?

答え1

これを実行することは可能です。HaProxy の Willy がここで解決策を特定しました:

メールアーカイブ[メールアドレス]/メッセージ25061.html

http-request redirect location "https://blah..\r\nDate: xyz"

私が解決したかった問題は、HSTS ヘッダーを追加することでしたが、日付にはそれを使用できると思います。

見た目は良くありませんが、機能します。私はこれを実装しました。複数の HaProxy ボックスがあるため、リダイレクトを生成しているボックスを識別するヘッダーもレンダリングしたいと考えていました。

これは私が HaProxy 1.6 でテストしたもので、他のバージョンについては保証できません。

答え2

リダイレクトを見たことのあるブラウザでは、これは不可能です。リダイレクトは無期限にキャッシュされます。301 リダイレクトは、サイトを永久に廃止する場合にのみ使用してください。その場合でも、古いサイトにまだアクセスしているトラフィックが見えなくなるため、使用はお勧めできません。

したがって、他の操作を行う前に、302 リダイレクトに変更してください。

Haproxy は Web サーバーではありません。動的なデータを含むヘッダーを生成する手段はありません。日付ヘッダーが本当に必要な場合は、Web サーバーを使用してください。このタスクを実行できる軽量の Web サーバーがいくつかあります。

あるいは、理由を教えてください必要このようなヘッダーがあれば、より適切な解決策をアドバイスできるかもしれません。

答え3

githubの問題の議論で、Haproxy 2.2以降で可能であることがわかりました。

https://stackoverflow.com/a/72830822/1849577

http-after-response set-header Cache-Control max-age=3600 if {condition}

関連情報