laravel - 如何在 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);
}
解决方案
x-vapor-source-ip
最新的 Vapor 核心包 (vapor-core:v2.2.1) 中有一个标头,它公开了 Lambda 的sourceIp
属性,以便安全地获取客户端的真实 IP。
您可以检索IP:
Request::header('x-vapor-source-ip')