【Laravel・PHP】リクエスト(クライアント)のIPアドレスを取得する方法

記事内に商品プロモーションを含む場合があります

技術メモ

LaravelでAPIを作成した際に、送信されてきたリクエスト(クライアント)のIPアドレスを取得する必要があったため、その方法を記載します。

使用例)リクエストのIPアドレスによって、処理をするかどうか判断する場合

 

Laravel

LaravelではリクエストのIPアドレスを簡単に取得する事ができます。

 

$request-> ip()

 

PHP

PHPでリクエストのIPアドレスを取得する場合は

 

$_SERVER['REMOTE_ADDR']

 

このように書きます。

 

PHP: $_SERVER - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.

 

ロードバランサーを経由する場合

ロードバランサーを経由する場合は、$_SERVER['REMOTE_ADDR']にはクライアントではなくロードバランサーのIPアドレスが入ってしまいます。

そこで

 

$_SERVER["HTTP_X_FORWARDED_FOR"]

 

このように記載することでクライアントのIPアドレスを取得する事ができます。

 

$_SERVER["HTTP_X_FORWARDED_FOR"]でクライアントのIPアドレスを取得できる理由

X-Forwarded-For (XFF)フィールドの一般的なフォーマットは、以下のようになっています。

 

X-Forwarded-For: client1, proxy1, proxy2,・・・
※一番先頭がクライアントのIPアドレス

 

クライアントからサーバーまでに経由するIPアドレスが、コンマとスペースで分けられて記載されています。

複数のIPアドレスが記載されており、左がクライアントのIPアドレスで右に行くほどサーバー側になっています。

 

複数のIPアドレスが記載されていても、先頭(一番左側)のIPアドレスがクライアントのIPアドレスであることは変わりません。

そのため、$_SERVER["HTTP_X_FORWARDED_FOR"]で先頭のIPアドレスを取得することで、クライアントのIPアドレスを取得することができます。

 

X-Forwarded-ForはHTTPヘッダフィールドの一つです。Wikipediaに詳細が記載されています。

X-Forwarded-For - Wikipedia

 

技術メモ
スポンサーリンク
スポンサーリンク
のすけをフォローする
やばブロ!

コメント