mod_limit
mod_limit 限制并发连接数或每秒请求数。
这两种限制都可以是“总计”或“每个IP”。
limit.con (动作)
限制并发连接总数到指定上限。
limit.con (limit, action);
- 限制
- 最大并发连接数
- 动作
- (可选) 达到限制时要执行的动作
如果没有定义任何动作,将返回一个503错误页面。如果指定了动作,则除了在达到限制时运行指定的动作外,没有其他特殊处理。
示例
limit.con 10;
limit.con_ip (动作)
限制每个IP的并发连接总数到指定上限。
limit.con_ip (limit, action);
- 限制
- 每个IP的最大并发连接数
- 动作
- (可选) 达到限制时要执行的动作
如果没有定义任何动作,将返回一个503错误页面。如果指定了动作,则除了在达到限制时运行指定的动作外,没有其他特殊处理。
示例
limit.con_ip 2;
limit.req (动作)
限制每秒请求数到指定上限。
limit.req (limit, action);
- 限制
- 每秒最大请求数
- 动作
- (可选) 达到限制时要执行的动作
如果没有定义任何动作,将返回一个503错误页面。如果指定了动作,则除了在达到限制时运行指定的动作外,没有其他特殊处理。
示例
limit.req 100;
limit.req_ip (动作)
限制每个IP的每秒请求数到指定上限。
limit.req_ip (limit, action);
- 限制
- 每个IP的每秒最大请求数
- 动作
- (可选) 达到限制时要执行的动作
如果没有定义任何动作,将返回一个503错误页面。如果指定了动作,则除了在达到限制时运行指定的动作外,没有其他特殊处理。
示例
limit.req_ip 100;
限制并发连接
此配置片段将允许总计只有10个活动下载,并且每个IP只允许1个。如果超过此限制,无论是由于超过10人尝试访问此资源,还是某人在已有下载运行的情况下再次尝试下载,他们都将被重定向到 /connection_limit_reached.html。
setup {
module_load ("mod_limit","mod_redirect");
}
limit_reached = {
redirect "/connection_limit_reached.html";
};
if req.path =^ "/downloads/" {
limit.con 10 => limit_reached;
limit.con_ip 1 => limit_reached;
}
限制每秒请求数
如果 /login 页面在一秒内被访问多次,此配置片段将向日志写入一条包含客户端IP地址的消息。然而,它不会执行任何其他操作。客户端将能够随心所欲地使用 /login 页面。
setup {
module_load "mod_limit";
}
if req.path == "/login" {
limit.req_ip 1 => { log.write "Possible bruteforce from %{req.remoteip}"; };
}