HAProxyでHTTPヘッダーを操作する。(レスポンス編)
前回の続き(id:shimula:20101020)で、今回はレスポンスをHAProxyで操作してみます。
rspadd
HTTPレスポンスヘッダーを追加します。
設定例:"X-Resp-Greeding"ヘッダーを追加します。
listen web1 bind :8080 mode http server web1 192.0.2.1:80 check rise 1 fall 3 rspadd X-Resp-Greeding:\ Hello
http://192.0.2.1:8080/にアクセスした時のレスポンスヘッダーは、以下の結果となりました。最後に"X-Resp-Greeding"ヘッダーが追加されていることを確認できました。
HTTP/1.1 304 Not Modified Date: Sat, 13 Nov 2010 11:39:44 GMT Server: Apache/2.2.3 (CentOS) Connection: close Etag: "102a3-d-48da19b900280" X-Resp-Greeding: Hello
rspdel, rspidel
指定した正規表現にマッチするHTTPレスポンスヘッダーを削除します。
rspidelは大文字小文字を無視します。(ignore case)
設定例:"Server"ヘッダーを削除します。
listen web1 bind :8080 mode http server web1 192.0.2.1:80 check rise 1 fall 3 rspidel ^server:
http://192.0.2.1:8080/にアクセスした時のレスポンスヘッダーは、以下の結果となりました。"Server"ヘッダーがないことが確認できました。
HTTP/1.1 304 Not Modified Date: Sat, 13 Nov 2010 12:12:00 GMT Connection: close Etag: "102a3-d-48da19b900280"
rspdeny, rspideny
ステータスライン、レスポンスヘッダーに指定した正規表現がマッチする場合、レスポンスをブロックします。(ステータスコード502を返却します)
ドキュメントでは機密情報流出防止に使うのが目的だそうです。
設定例:excelファイルはダウンロードさせない。
listen web1 bind :8080 mode http server web1 192.0.2.1:80 check rise 1 fall 3 rspideny ^Content-Type:\ .*ms-excel
http://192.0.2.1:8080/test.xlsにアクセスした時に以下のメッセージが表示されました。
502 Bad Gateway The server returned an invalid or incomplete response.
このサンプル設定だとレスポンスヘッダーに"Content-Type"が正しく設定されてる場合にのみに有効なので、ステータスコード304を返却した場合は当然ながらダウンロードできてしまいます。完全に制御するのであれば組み合わせで工夫しないといけないのかもしれません。
rsprep, rspirep
ステータスライン、レスポンスヘッダー内で指定した文字列がマッチする部分を置換します。
rspirep は大文字小文字を無視します。
ドキュメントではLocationヘッダーの書き換えをするのが主な用途と書いてあります。
設定例:リダイレクト先をすべて"http://example.com/"に設定する。
listen web1 bind :8080 mode http server web1 192.0.2.1:80 check rise 1 fall 3 rsprep ^Location:\ .* Location:\ http://example.com/
リダイレクトをさせるようなURLを実行すると"http://example.com/"にリダイレクトします。