ELB導入時に躓いた件


先日ELBを導入したんですが、事前の調査不足もあり思った以上に影響がでてしまい障害となってしまった(反省)。というのも、ELBというAWSのロードバランサー配下にWebサーバーを入れた場合に、クライアントのIPアドレス取得方法が今までと変わる。

にあるように「X-Forwarded-Forヘッダー」にクライアントIPアドレスが入るようになり 環境変数のREMOTE_ADDR では取得できないようになる。(知らなかった〜)

これが地味に影響範囲が広く

  • フレームワーク内のIPアドレス取得メソッド
  • Apacheのconfファイル内のIPアドレス制限
  • .htaccess内のIPアドレス制限

に影響があり、アプリケーション全体で盛大に誤動作してしまった・・・。

フレームワーク内のIPアドレス取得メソッド

PHPであれば $_SERVER['HTTP_X_FORWARDED_FOR'];で取得できる。但し複数IPアドレスが入る場合もあるので要注意。
refs : PHP – PHP ロードバランサ経由のクライアントのIP取得ができない(131)|teratail

.htaccess内のIPアドレス制限

海外のボットなど気軽にIPアドレス制限をかけたい場合に、.htaccessは大変便利なわけなのですが、記述の変更が必要です。
SetEnvIfでIPアドレスを指定する際は正規表現で指定できるのですが、複数個のIPアドレスをパイプでつなげると可読性が悪いので、個人的には下記の記法が好みです。

ELB非利用時

ELB利用時

とネット上ではありふれた情報であるのですが、最初は結構戸惑ったので自分用のメモとしてまとめました。どうにか導入できてよかった。これでグーグルクローラーに本気で来られても大丈夫だろう。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする