我正准备将Laravel 5.5生产环境运行在Elastic Load balancer(ELB)后面的多个AWS EC2实例上。所有共享数据(如images,css,js)都存储在S3上,日志流式传输到CloudWatch,数据库位于RDS上。会话和缓存已配置为使用数据库。
除了我看到会话表填满了使用user_agent“ELB-HealthChecker / 2.0”的数千个ELB运行状况检查之外,这一切都很有效。 Laravel / PHP显然将每个运行状况检查视为新用户,并生成一个新会话,每个实例每30秒一个。这可能很快失控,不可持续。
所以我的问题是这样的...... Laravel中是否有一种方法忽略或拒绝来自特定user_agents的请求,因此它们不会启动会话?我可以写一个shell脚本来定期删除记录,但这似乎是一个不必要的黑客。
答案 0 :(得分:2)
我认为最简单的解决方案是将ELB指向特定的健康检查ping路由,然后禁用该路由的会话中间件mentioned here
答案 1 :(得分:1)
一个简单的解决方案(在你的路线文件中):
Route::get('/healthcheck', function() {
config()->set('session.driver', 'array');
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});