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
コメント