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}"; };
}