首页 > 解决方案 > 如何在 Laravel Vapor 应用程序中获取 HTTP 请求的 IP?

问题描述

我最近将一个 Laravel 应用程序从服务器移到了 Vapor。此应用依赖于使用 记录请求 IP 地址Request::ip(),但自从切换到 Vapor 后,所有 IP 都记录为 127.0.0.1。

我查看了https://laravel.com/docs/5.6/requests#configuring-trusted-proxies上的 Trusted Proxy 文档,但我们没有设置负载均衡器,因此该解决方案似乎不相关。我怀疑这个 IP 地址来自 Amazon API Gateway。

我们如何在 Vapor 上部署的应用程序中获取传入请求的实际客户端 IP?

下面是我们如何使用 IP 地址的一个最小示例:

public function store(Request $request)
    {
        $workerIP = $request->ip();
        $worker = Worker::create(['ip_address' => $workerIP]);
        return view('workers.show')->withWorker($worker);

    }

标签: laravelaws-lambdalaravel-vapor

解决方案


x-vapor-source-ip最新的 Vapor 核心包 (vapor-core:v2.2.1) 中有一个标头,它公开了 Lambda 的sourceIp属性,以便安全地获取客户端的真实 IP。

您可以检索IP:

Request::header('x-vapor-source-ip')

推荐阅读