さくらインターネットのレンタルサーバで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'];
}