【问题标题】:Laravel Sessions database table filling up with user_agent ELB-HealthChecker/2.0 health checksLaravel Sessions 数据库表填满了 user_agent ELB-HealthChecker/2.0 健康检查
【发布时间】:2018-03-06 19:07:11
【问题描述】:

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

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

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

【问题讨论】:

  • 它为我提供了大约 900 个带有 2 个 EC2 的 ELB 会话。

标签: mysql laravel session amazon-ec2 user-agent


【解决方案1】:

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

【讨论】:

  • 很好的解决方案。完美运行。谢谢。
  • 你在这条路线上放了“ThrottleRequests”吗?
  • 只要健康检查频率低于油门限制就可以放ThrottlesRequests
【解决方案2】:

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

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

【讨论】:

  • 由于闭包不能被序列化,当你有使用闭包的路由时,你不能缓存你的路由。
猜你喜欢
  • 2014-10-02
  • 2017-07-16
  • 2020-12-18
  • 2021-05-30
  • 2019-10-25
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多