nginx-访问限制

一、模块

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

Previous Post

nginx模块之echo-nginx-module

Next Post

docker概述

Related Posts