Laravel 会话数据库 table 填满 user_agent ELB-HealthChecker/2.0 健康检查

Laravel Sessions database table filling up with user_agent ELB-HealthChecker/2.0 health checks

我正在准备我的 Laravel 5.5 生产环境 运行 在弹性负载平衡器 (ELB) 后面的多个 AWS EC2 实例上。图片、css、js等所有共享数据都存储在S3上,日志流式传输到CloudWatch,数据库在RDS上。会话和缓存已配置为使用数据库。

除了我看到会话 table 填满了 user_agent "ELB-HealthChecker/2.0" 的数千个 ELB 健康检查外,一切都很好。 Laravel/PHP 显然将每次健康检查视为一个新用户并生成一个新会话,每个实例每 30 秒一次。这可能很快就会失控,而且不会持续。

所以我的问题是... Laravel 中是否有一种方法可以忽略或拒绝来自特定 user_agent 的请求,这样他们就不会启动会话?我可以编写一个 shell 脚本来定期删除记录,但这似乎是一个不必要的 hack。

我认为最简单的解决方案是将 ELB 定向到特定路由以进行健康检查 ping,然后禁用该路由的会话中间件 mentioned here

一个简单的解决方案(在你的路由文件中):

    Route::get('/healthcheck', function() {
        config()->set('session.driver', 'array');
        return response('Hello World', 200)
           ->header('Content-Type', 'text/plain');
    });