1
4

API Gateway で転送したサーバでリクエスト元のIPアドレスを取得

Posted at

さくらインターネットのレンタルサーバでPHPを使って小規模なAPIサーバを作成しています。
このAPIサーバに対して、AWSのAPI GatewayのHTTP統合を利用してリクエストを転送しています。
わけあって、APIサーバでリクエスト元のIPアドレスを制限する必要が生じましたが、$_SERVER["REMOTE_ADDR"]ではAPI GatewayのIPアドレスが取得されてしまいます。そこで、簡易的に実際のクライアントのIPアドレスを取得する方法を記録しておきます。

$_SERVER変数を確認すると、$_SERVER["HTTP_FORWARDED"]にリクエスト元のIPアドレスが含まれていたため、これを利用することにしました。

 ["HTTP_FORWARDED"]=> string(92) "by=3.235.35.99;for=11.22.33.44;host=hogehoge.execute-api.us-east-1.amazonaws.com;proto=https"

for=11.22.33.44 がクライアントの実際のIPアドレスです。
ここから以下のようにしてIPアドレスを取得するようにしました。

if (preg_match('/for=([0-9.]+)/', $_SERVER["HTTP_FORWARDED"], $matches)) {
    $ip = $matches[1];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4