![有没有办法在 apache2 中限制每个用户每小时的访问量?](https://linux22.com/image/762025/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%9C%A8%20apache2%20%E4%B8%AD%E9%99%90%E5%88%B6%E6%AF%8F%E4%B8%AA%E7%94%A8%E6%88%B7%E6%AF%8F%E5%B0%8F%E6%97%B6%E7%9A%84%E8%AE%BF%E9%97%AE%E9%87%8F%EF%BC%9F.png)
请求时,已经需要带有 userID 的 POST 表单,因此如果我可以记录 POST 表单的 userID,我认为有一种方法可以限制该 UserID 在一小时内的访问次数为 n 次(我认为每小时 3 次对我来说比较合适)。(这意味着 userID“A”在一小时内只能访问 3 次,而 userID“B”在一小时内也可以访问 3 次,......)
但是,我找不到该怎么做。
它所做的只是代理请求来为其他服务提供服务 - 现在仅在 apache2 上使用 ProxyPass,因此需要在 apache2 配置中进行配置(我认为)。
有办法吗?
答案1
不是在 Web 服务器级别,而是在应用程序级别执行此操作;即,在 POST 之后,应用程序应该告诉用户“您在太短的时间内发出了太多请求,请稍后再试”之类的信息。
据我所知,Apache Web 服务器(但 IIS 也是如此)只能使用 HTTP 参数(例如网站或 URL)或网络参数(例如源 IP 地址或带宽使用情况)来限制请求。
(如果我错了,请纠正我,我不是 Apache 专家。)
答案2
看一眼这个 mod_security 用例可以使用 cookies 或 uri 内容,因此您也可以提取 POST 数据。或者直接获取他们的 IP 并使用它,因为任何人都可以在表单中输入不同的用户名来绕过它。