特定LB下で「X-Forwarded-For」を使ったベーシック認証のかけ方

VarioSecureなどの低下価格のLB(ロードバランサ)の場合、Apacheサーバから見てクライアントの送信元IPアドレスがすべてLBのIPになってしまうことがあります。
この状況下でベーシック認証をかけた場合、LBのヘルスチェックまでBasic認証がかかり、メンバーサーバのWEBサーバがすべて障害したと誤検知し、Sorryサーバに割り振られてしまう。

また特定IPアドレス以外は、すべてBasic認証をかけたい場合もあると思います。

そんな時は、HTTP ヘッダーの「X-Forwarded-For」にクライアントIPアドレスを付与して、そのIPアドレスを判断材料にしてBasic認証をかけることができます。

具体的なApache設定方法
当該ディレクトリに対して「SetEnvIf」を使って、「X-Forwarded-For」にマッチしたクライアントに対して「許可」の環境変数を付加し、それ以外に対しては、Basic認証を求めることで実現可能です。

・「192.168.0.」にマッチするIPのBasic認証を外す
・X-Forwarded-For の値が何もない場合にのみBasic認証を外す(LBのヘルスチェック)


※LB側のヘルスチェックはX-Forwarded-Forがない状態でアクセスしてきます。


###LBのヘルスチェックを許可
SetEnvIf X-Forwarded-For "^$" empty_ok
Order Deny,Allow
Deny from all
Allow from env=empty_ok

###LBのヘルスチェック以外の特定IPを許可
SetEnvIf X-Forwarded-For "192.168.0." ip_ok
Order Deny,Allow
Deny from all
Allow from env=ip_ok

###上記以外のベーシック認証
AuthType Basic
AuthDBUserFile /var/www/.htpasswd
AuthName "Please input your Password"
Require valid-user

Satisfy Any



※X-Forwarded-For(XFF)
HTTPヘッダフィールド(英語)の一つ。HTTPプロキシサーバまたは負荷分散装置(ロードバランサ)を経由してウェブサーバに接続するクライアントの送信元IPアドレスを特定する際のデファクトスタンダードである。


できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応
著者:辻 秀典
出版日:2013-01-25

Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集
著者:Ken Coar
出版日:2008-09-26



Google+