nginx限速

nginx 要实现限速,完整的实现是要限制客户端请求频率,并发连接和传输速度

1.请求限制

Nginx 请求限制的功能来自于 ngx_http_limit_req_module 模块。使用它需要首先在 http 配置段中定义限制的参照标准和状态缓存区大小。比如下面的配置就是定义了使用客户端的 IP 作为参照依据,并使用一个 10M 大小的状态缓存区。结尾的 rate=1r/s 表示针对每个 IP 的请求每秒只接受一次。

limit_req_zone $binary_remote_addr zone=NAME:10m rate=1r/s;

NAME 是自定义的缓存区名称,可以随意命名,比如 per_ip 或 one 等。在 server 配置段中会用到。10M 的状态缓存空间够不够用呢?官方给出的答案是 1M 的缓存空间可以在 32 位的系统中服务 3.2 万 IP 地址,在 64 位的系统中可以服务 1.6 万 IP 地址,所以需要自己看情况调整。如果状态缓存耗光,后面所有的请求都会收到 503(Service Temporarily Unavailable) 错误。

然后就可以在 server 段中配置具体的连接限制了。比如下面的配置:

server {
    location / {
        limit_req zone=NAME burst=5;
    }
}

后面的 burst=5 是一个宽容度配置。表示如果单个 IP 有每秒有超过 1 个请求限制的时候,最多接受多少个超出的配额。超出的请求会被加入到队列延迟处理。如果不想延迟,可以使用 nodelay 参数。示例如下:

 

server {
    location / {
        limit_req zone=NAME burst=5 nodelay;
    }
}

2.并发限制

Nginx 并发限制的功能来自于 ngx_http_limit_conn_module 模块。跟请求配置一样,使用它之前,需要先定义参照标准和状态缓存区。

limit_conn_zone $binary_remote_addr zone=NAME:10m;

然后同样在 server 段中配置具体的限速数据。比如针对下载目录,每个 IP 只允许一个连接:

server {
    location /download/ {
        limit_conn NAME 1;
    }
}

速度限制:

Nginx 除了限制请求和并发外,还可以使用 limit_rate 来限制传输速度。例如:

server {
    location / {
        limit_rate 100k;
    }
}

上面的配置意思表示每个连接的传输速度不能超过 100k。

参考文档:

http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate

 


posted @ 2017-06-29 09:22  行知散人  阅读(494)  评论(0编辑  收藏  举报