Docker×Laravelでアクセス元のIPアドレスを取得する方法

Docker×Laravelでアクセス元のIPアドレスを取得する方法

Docker×Laravelでアクセス元のIPアドレスを取得する方法

久しぶりにアクセスログを確認してみたら想定と違う動きがありました。

アクセスログ

アクセスしてきたIPがみんな同じ(1件だけ何故か違いますが…)。

このIP:172.22.0.1 はDockerコンテナのIPです。

AmazonのMWSではシステムに対してアクセスしてきたIPを取得して適正に処理(不正アクセスのログインを拒否)するようにとの指示がありますが、この状態では要請に対して満足な結果を返すことはできません。

AmazonMWSの取得で実装しなくてはいけない仕様

アクセスIPに係る項目では大きく2つあります。

  1. アクセスログを取得する事
  2. 不正アクセスIPに対してアクセス禁止処理等適正な処理を実行する仕組みがある事

この方針に則り、私の場合は次のような仕組みを構築しています。

  • アクセスログにIPとアクセスURLを保存する
  • 不正アクセスを実行したIPと不正アクセスURLをDBに蓄積
  • 不正アクセスURLにアクセスしたIPを記録

詳細はこちらの記事に残しているので興味ある方はどうぞ。

logに記載したIPがDockerのIPになってしまってはMWSの求める要件を満たせません。
と言う事で、Access元のIPを取得する方法について調べて実装してみました。

Access元IPは $_SERVER[‘HTTP_X_FORWARDED_FOR’] で取得できる

意外とあっさり。

$request->ip(); とか Request::ip(); とかで取得していたパーツを下記コードに切り替えます。

$_SERVER[‘HTTP_X_FORWARDED_FOR’]

参考サイトはこちら

http://tech-blog.tsukaby.com/archives/1464

https://github.com/tsukaby/tsukaby-tech-blog-docker/commit/1e15c63537d3e78604b1e154c08a1cfdd1feea08

 まとめ

同じ悩みを持った方がやっぱり居たんですね。

そういう方のブログ、とてもありがたいです。おかげであっさりと解決できました。

このブログもそんな役に立っていれば嬉しいですね。