如何限制会话数?

the*_*bit 8 load-balancing high-load session apache-2.2

我需要一种方法来跟踪和限制网络会话到网络应用程序。“会话”被松散地定义为单个用户浏览所述网络应用程序的页面。我觉得可以翻译成:

  • 会话被定义为一个元组,<clientIP,vHost>或者是<clientIP,serverIP,serverPort><cookie,vHost>,具体取决于层和可用数据
  • 会话在用户将身份验证数据发送到定义的登录 URI 后开始
  • 会话在用户点击定义的注销 URI 后结束
  • 如果在客户端请求最后一个对象后指定的超时已过期,则会话结束

达到指定的会话限制后,应将下一个用户定向到自定义错误页面。我还需要一种方法来跟踪当前会话数以进行监控,以及将监控服务器(它定期向 web 应用程序发出查询)列入白名单并使其不受限制的能力。

我可以使用的东西:

  • RadWare AppDirector,其中 Web 应用程序定义了自己的场并以反向代理模式运行
  • 阿帕奇 2.2
  • SLES 11 SP2

我宁愿不涉及额外的代理服务器,但如果没有其他选择,我会考虑它。

所有这一切背后的基本原理是,上述 Web 应用程序很容易过载并开始不规律地拒绝请求,这激怒了(通常)在此过程中丢失表单输入数据的工作用户。通过指定一个不太可能发生过载条件的限制,我们希望创建一个明确定义的故障条件,如果负载可能会激增,用户将被告知稍后返回。

编辑:Web 应用程序是一个 3 层实现,第一层(表示层,在 Apache vHost 中实现为 CGI 代码)相当简单,显然仅限于应用服务器之间的基本错误处理和请求负载平衡。它不会对其运行的 Web 服务器施加任何重大负载 - 这就是为什么我们在 AppDirector 场中仅以故障转移模式(无负载平衡)运行它,这应该在某种程度上简化事情。

除此之外的一切对我们来说基本上都是一个黑匣子——在数据层,我们有一个 MSSQL 数据库,但几乎不可能从供应商那里获得有关表结构的任何有意义的信息。应用服务器是闭源的,供应商使用了一个相当全面的框架来实现,但似乎无法回答更不复杂的操作相关问题。

sym*_*ean 5

您最终要解决的问题是应用程序的容量 - 这就是您应该解决问题的地方。您提到的所有组件都与HTTP 应用程序的会话管理无关

您可以将一些技巧应用于 iptables 中的最新模块,或者以与设计目的相反的方式使用 fail2ban - 但这些都需要对工具和问题域有非常详细的了解。您可以在这些组件级别实施访问控制,但由应用程序发布的关于会话数量的状态信息驱动

我还需要一种方法来跟踪当前会话数以进行监控

暂时假设应用程序是一个没有修改/检测范围的黑盒(这是极不可能的),您可以通过包含会话 cookie 从您的 apache 日志中获取此信息 - 过滤或拖尾日志以维护一个活动 cookie 列表 - 当条目与注销 URL 重合或在 TTL 中未被看到时,从列表中删除条目。