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');
});
我正在准备我的 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');
});