つい最近、CakePHPを使用して、グローバルIPを取得する処理を組みましたが、
ちょっとはまってしまったので書いていきます
##・普通に取得する場合
public function get_global_ip(){
return $this->request->clientIP();
}
普通にCakePHPでIPアドレスを取得する場合はこれで大丈夫です
ただ、LoadBarancerやリバースプロキシを使用している場合はこれでは、
内部での通信に利用されているプライベートIPが取得され、
グローバルIPが取得できませんでした
##・ではどのように?
方法としては、
public function get_global_ip(){
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
でアクセス元のグローバルIPを取得することが出来ます
※参考はこちら:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#x-headers
CakePHPでは、上記の$_SERVER
変数を使用しなくても下記のように取得することが出来ます
public function get_global_ip(){
return $this->request->clientIp(false);
}
そう、falseを引数に渡してあげるだけなんです!!
なぜそれをデフォルトでしてくれないのか。。。(´・ω・`)
※追記
ご指摘をいただいたのですが、今回はIPアドレスから地域情報を取得する機能を実装していたため、
IPアドレスの偽装は考慮しておりません。