PHP開発で管理画面などのアクセスを社内のにみ制限をかけるため、社内IP以外弾くようなロジックなどを作る際にハマりました。
PHPでIPアドレスを取得するには通常以下のように記述します。
$_SERVER['REMOTE_ADDR']
しかしAWSのELB(ロードバランサー)を挟んだ場合は$_SERVER['REMOTE_ADDR']
に設定される値がELBのIPアドレスになってしまします。
ELBのIPアドレスを取得したい場合は以下のようにすれば取得できます。
$_SERVER['HTTP_X_FORWARDED_FOR']
ELBを通さない場合エラーになってしまうので、以下のようにすればELB環境でもテスト環境でも動作するのでオススメです。
$_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? '';
ELB + K8S環境でingress-nginxを通した場合、上記の方法でも取れないことがあります。
その場合はHTTP_X_ORIGINAL_FORWARDED_FOR
を設定にIPアドレスが設定されています。
$_SERVER['HTTP_X_ORIGINAL_FORWARDED_FOR']
最後まで読んでいただきありがとうございました。