F5 BIG-IPでHTTP/Sの負荷分散をする際に、S-NATした上でX-Forwarded-Proto, X-Forawarded-ForのHTTPヘッダを付与する設定をする。
なお、今回の設定方法はこちらのディスカッションの情報を元にしている。
https://devcentral.f5.com/questions/x-forwarded-proto-assistancedevcentral.f5.com
検証構成
検証バージョン: F5 BIG-IP VE 13.0.0 (Build 0.0.1645)
MacBookでWebサーバ(Rails)を起動し、Webブラウザ(Chrome)からBIG-IPのVirtual Server経由で自身にアクセスする。このとき、正常に通信ができるようS-NATを有効化しておく。
設定と動作確認
基本的な設定はこちらの通り。Rails向けのNode, Poolを設定した上でVirtual Serverを作成し割り当てる。通常のHTTPで試験するため種類(Type)はPerformance(HTTP)を使用する。
パケットはこちらの通り。
IPアドレスは以下の通り。キャプチャはPCで取得しているため、Client(Chrome)->Virtual Server, S-NAT->Server(Rails)のパケットが見える。
Client: 192.168.1.102
Server: 192.168.1.102
Vertual Server: 192.168.1.91
S-NAT Address: 192.168.1.8
ここではX-Forwarded-Proto(XFP), X-Forwarded-For(XFF)のいずれも付与されていない。
X-Forwarded-Proto, X-Forawarded-Forを付与する
HTTPヘッダにXFF, XFPを追加するよう、Profileを作成する。
Local Traffic > Profiles > Protocols > Fast HTTP
HTTP関連の設定欄で、Insert X-Forwarded-For: Enabled
, Request Header Insert: X-Forwarded-Proto: http
と設定する。
作成したプロファイルをVirtual Serverに適用する。
適用後はコネクションが残存していることがあるため、必要に応じてNodeのOffline/Online等でクリアする。
改めてHTTPアクセスすると、以下の通りHTTPヘッダにX-Forwarded-For, X-Forwarded-Protoが追加されている。
HTTPSは適用プロファイルを変更
上記はperformance(http)での適用方法を記載した。HTTPS(SSL)等で適用する際には、使用するプロファイルを合わせて同様に設定すればよい。
通常のHTTPプロファイルを使用する場合は場所は違うが同様にRequest Header InsertでXFPヘッダを設定する。
X-Forwarded-Portは?
X-Forwarded-Protoの他に、X-Forwarded-Portを付与したいケースもあるかもしれない。残念ながら、こちらについてはiRulesでの指定が必要となる。
https://devcentral.f5.com/questions/x-forwarded-in-f5devcentral.f5.com
GUIで変数指定しても展開されず、動的に情報を取得できなかった。
まとめ - BIG-IPでX-Forwarded-Protoを付与する設定
HTTPプロファイルを作成することで、S-NAT環境でHTTPヘッダにX-Forwarded-Protoを付与した。なお、X-Forwarded-Portを付与したい場合にはiRulesを使用する必要がある。