HTTPプロキシやロードバランサーを通過して接続したクライアントのIPアドレスを取得するには

通常、クライアントのIPアドレスはREMOTE_ADDRで取得できる。

// クライアントのIPアドレスを取得するPHPのコード
$ip = $_SERVER['REMOTE_ADDR'];

HTTPプロキシやロードバランサーを通過して接続したクライアントのIPアドレスは、REMOTE_ADDRでは取得できない。
REMOTE_ADDRは、HTTPプロキシやロードバランサーのIPアドレスになる。

では、どうすれば取得できるのかというと、X-Forwarded-Forを使用する。

X-Forwarded-Forの構文は次のようになっている。

X-Forwarded-For: <client>, <proxy1>, <proxy2>

カンマで区切られたIPアドレスのうち、一番左のIPアドレスがクライアントのIPアドレスになる。

HTTPプロキシやロードバランサーを通過して接続したクライアントのIPアドレスを取得するPHPのコードは次のようになる。

/**
  * HTTPプロキシやロードバランサーを通過して接続したクライアントのIPアドレスを取得する
  * @return string
  */
function getClientIpAddress() {
    if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
        $xForwardedFor = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
        if (!empty($xForwardedFor)) {
            return trim($xForwardedFor[0]);
        }
    }
    if (isset($_SERVER['REMOTE_ADDR'])) {
        return (string)$_SERVER['REMOTE_ADDR'];
    }
    return "";
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください