Help us understand the problem. What is going on with this article?

CakePHPでグローバルIPを取得する

More than 3 years have passed since last update.

つい最近、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アドレスの偽装は考慮しておりません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away