Laravel 拉威尔:用户';在使用负载平衡器和kubernetes的后台作业中,s的IP地址返回为127.0.0.1
我正在使用docker+kubernetes和aws负载平衡器部署我的laravel应用程序 有一个中间件“EventLogger”,在用户登录系统后运行。此记录器记录用户的IP地址并保存到mongo db中 以下是中间件:Laravel 拉威尔:用户';在使用负载平衡器和kubernetes的后台作业中,s的IP地址返回为127.0.0.1,laravel,kubernetes,Laravel,Kubernetes,我正在使用docker+kubernetes和aws负载平衡器部署我的laravel应用程序 有一个中间件“EventLogger”,在用户登录系统后运行。此记录器记录用户的IP地址并保存到mongo db中 以下是中间件: <?php namespace App\Http\Middleware; use Closure; use Auth; use App\Models\EventLogger as Logger; use App\Models\OauthClient; use Je
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
use App\Models\EventLogger as Logger;
use App\Models\OauthClient;
use Jenssegers\Agent\Agent;
use App\Models\Advertisement;
use App\Jobs\ProcessEventLogger;
class EventLogger
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $event = null)
{
//$request->request->add(["event" => $event]);
$request->merge(["event" => $event]);
return $next($request);
}
public function terminate($request, $response)
{
if($response->getStatusCode() != 200){
return;
}
$response_contents = $response->getContent();
//allow only status = true responses
if(false == json_decode($response_contents)->status){
return;
}
if (env('APP_ENV') === 'testing') {
$client_id = 3;
} else{
if ($request->event == Logger::LOGIN) {
$client_id = $request->client_id;
} else {
$client_id = Auth::user()->token()->client_id;
}
}
$agent = new Agent();
$agent->browser();
$agent->device();
$agent->platform();
ProcessEventLogger::dispatch($request->all(),$response, Auth::user()->id, $request->ip(),$client_id, $response_contents, $request->coin_id,$agent->browser(),$agent->device(),$agent->platform());
}
}
因为我不想要受保护的$proxies='*'
对不起,看起来你没有太多选择。您必须知道允许的IP范围。或者相应地配置web服务器。引用拉威尔使用的Symphony Doc
一些反向代理(如AWS弹性负载平衡)没有
静态IP地址,甚至可以是CIDR的目标范围
符号在这种情况下,你需要非常小心地相信所有人
代理
将您的web服务器配置为不响应来自任何
负载平衡器以外的客户端。对于AWS,这可以通过
安全小组
一旦你保证流量只来自你信任的用户
反向代理,将Symfony配置为始终信任传入请求:
谢谢@Jigar,最终我不得不允许中间件中的所有代理,并将Web服务器配置为仅通过选定代理驱动流量。