特定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対応 |
Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集 |