designetwork

ネットワークを軸としたIT技術メモ

BIG-IPでX-Forwarded-Protoを付与する設定

f:id:daichi703n:20170514162355p:plain

F5 BIG-IPでHTTP/Sの負荷分散をする際に、S-NATした上でX-Forwarded-Proto, X-Forawarded-ForのHTTPヘッダを付与する設定をする。

なお、今回の設定方法はこちらのディスカッションの情報を元にしている。

devcentral.f5.com

検証構成

検証バージョン: F5 BIG-IP VE 13.0.0 (Build 0.0.1645)

f:id:daichi703n:20170514162414p:plain

MacBookでWebサーバ(Rails)を起動し、Webブラウザ(Chrome)からBIG-IPのVirtual Server経由で自身にアクセスする。このとき、正常に通信ができるようS-NATを有効化しておく。

設定と動作確認

基本的な設定はこちらの通り。Rails向けのNode, Poolを設定した上でVirtual Serverを作成し割り当てる。通常のHTTPで試験するため種類(Type)はPerformance(HTTP)を使用する。

f:id:daichi703n:20170514164330p:plain

パケットはこちらの通り。

f:id:daichi703n:20170514164404p:plain

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

f:id:daichi703n:20170514164928p:plain

HTTP関連の設定欄で、Insert X-Forwarded-For: Enabled, Request Header Insert: X-Forwarded-Proto: httpと設定する。 f:id:daichi703n:20170514165706p:plain

作成したプロファイルをVirtual Serverに適用する。

f:id:daichi703n:20170514165855p:plain

適用後はコネクションが残存していることがあるため、必要に応じてNodeのOffline/Online等でクリアする。

改めてHTTPアクセスすると、以下の通りHTTPヘッダにX-Forwarded-For, X-Forwarded-Protoが追加されている。

f:id:daichi703n:20170514165913p:plain

HTTPSは適用プロファイルを変更

上記はperformance(http)での適用方法を記載した。HTTPS(SSL)等で適用する際には、使用するプロファイルを合わせて同様に設定すればよい。

通常のHTTPプロファイルを使用する場合は場所は違うが同様にRequest Header InsertでXFPヘッダを設定する。

f:id:daichi703n:20170514170156p:plain

X-Forwarded-Portは?

X-Forwarded-Protoの他に、X-Forwarded-Portを付与したいケースもあるかもしれない。残念ながら、こちらについてはiRulesでの指定が必要となる。

devcentral.f5.com

GUIで変数指定しても展開されず、動的に情報を取得できなかった。

まとめ - BIG-IPでX-Forwarded-Protoを付与する設定

HTTPプロファイルを作成することで、S-NAT環境でHTTPヘッダにX-Forwarded-Protoを付与した。なお、X-Forwarded-Portを付与したい場合にはiRulesを使用する必要がある。