一、模块
1. ngx_http_limit_conn_module
基于连接数进行限制
2. ngx_http_limit_req_module
基于请求数进行限制
二、功能说明
1. ngx_http_limit_conn_module
用于限定每个定义密钥的连接数,特别是来自单个ip地址的连接数
并非所有的连接都计算在内,只计算服务器正在处理的请求并且已经读取了整个请求标头的。
2. ngx_http_limit_req_module
用于限制每个定义密钥的请求处理速率(即并发请求数),特别是来自单个IP地址的请求速率。
主要使用“漏桶”方法进行限制。
三、官方文档
ngx_http_limit_conn_module
ngx_http_limit_req_module
四、常用示例
1. ngx_http_limit_conn_module
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
$binary_remote_addr是访问ip地址,这里做为了密钥。 addr为定义的规则名称。10m为区域存储空间大小。
limit_conn addr 1;限定addr此区域最大连接数为1.
2. ngx_http_limit_req_module
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
$binary_remote_addr是访问ip地址,这里做为了密钥。one为定义的规则名称。10m为区域存储空间大小。rate=1r/s 每秒最多1个请求。
limit_req zone=one burst=5; burst=5 表示最大延迟请求数量不大于5。
五、漏桶算法
假如请求处理系统是一个漏桶,访问请求就是往桶里“加水”,处理请求就是“漏水”。处理请求是有上限的,当访问请求超过处理请求,即会出现无法处理的情况。为了避免出现此种情况,即对访问请求做限制,使访问请求不超过处理请求(基于参考文章的说明理解,具体请看参考文章)。
六、参考文章
https://blog.csdn.net/weixin_29135773/article/details/60764426tengine配置
http://tengine.taobao.org/document_cn/http_limit_req_cn.html