Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 拉威尔:用户';在使用负载平衡器和kubernetes的后台作业中,s的IP地址返回为127.0.0.1_Laravel_Kubernetes - Fatal编程技术网

Laravel 拉威尔:用户';在使用负载平衡器和kubernetes的后台作业中,s的IP地址返回为127.0.0.1

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

我正在使用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 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服务器配置为仅通过选定代理驱动流量。