0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(模索中)LaravelでグローバルIPアドレス取るのってどうすんだっけという記事

Posted at

環境

  • laravel 11
  • react-router
  • docker
  • nginx

起こった事

要件でログイン画面にアクセス元のグローバルIPアドレスを表示する実装で躓いた。
やりたいこととしてはそのIPアドレスをログイン時に送信してuserテーブルが持っているipadressカラムの値じゃなかったらNGみたいなものを作ろうとしていた。

実装

以下のようにBE側でIPアドレス取得のメソッドを作ってFEでloaderから呼べばいいんじゃないかと思って実装

BE側

        $forwardedFor = request()->headers->get('X-Forwarded-For');
        $realIp = request()->headers->get('X-Real-IP');
        $clientIp = null;
        $isClientIpReliable = true;

        if ($forwardedFor) {
            $ipAddresses = explode(',', $forwardedFor);
            $clientIp = trim($ipAddresses[0]);
        } elseif ($realIp) {
            $clientIp = $realIp;
        } elseif (request()->ip()) {
            // ローカルホストのIPは除外
            $clientIp = request()->ip();
            $isClientIpReliable = false;
        }

        return ['clientIp' => $clientIp, 'isClientIpReliable' => $isClientIpReliable];

FE側

export const loader = async () => {
  const { data, error } = await apiClient.GET('/get-ip(みたいなURL)')

  if (error) {
    return { error: error.message }
  }

  return { data }
}

とれてるっちゃ取れてるけど

Swaggerから行った値が以下
192.168.xx.x
FEに表示されてる値は
172.18.x.x
だった。
ちなみにpostmanでも同じ結果だった

まだデプロイしていない状態だから自身のプライベートアドレスが返ってくるかなと思ったらどうやら違う。
ちなみにプライベートIPは
10.x.x.x
全部違う値や。。。

NGINXではどうなのか

ログは見た感じ以下のようなことがわかった
192.168.xx.x172.18.x.xはnginx側のログに残っているのでおそらく192側はBE、172はFEなのかなという感じ。

dockerの方ではどうなのか

docker network inspect bridge | grep Gateway
で見てみると
Gateway: 172.17.x.x

どうしようか

多分Docker内のネットワークを参照してIPアドレスを取得してる感じがするのでdockerが外部IPを取れるような感じにするんかなぁdockerを雰囲気でやってきたので少し勉強しよ。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?