Ngxin的限流方式
一、简介
Nginx的限流的实现,可以保证高并发场景下的服务的可用性,控制网络以及CPU/内存负载,极端场景下还可以减小暴力破解对系统的危害性。Nginx本身自带了几个限流模块 :
对客户端的限流模块:
- ngx_http_limit_conn_module:按照连接数限流,限制单个IP的并发连接数;
- ngx_http_limit_req_module:按照请求速率限流,使用漏桶的方式限制请求的处理速率;
对服务端的限流模块:
- ngx_http_upstream_module:用于定义可以由
proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass和grpc_pass指令引用的服务器组;
- ngx_http_upstream_module:用于定义可以由
二、限流模块
2.1、ngx_http_limit_conn_module
用于设置单IP最大允许的连接数,当超过该连接数,服务器将返回错误信息(默认错误码为503)。
|
limit_conn_zone:- 语法:
limit_conn_zone key zone=name:size; - 示例解释:设置共享内存的大小,用于存储各Client的状态,其中
zone配置对应的值可以自定义; - 配置位置:可配置于
http中;
- 语法:
limit_conn:- 语法:
limit_conn zone number; - 示例解释:访问
/download/地址的IP可以允许同时存在10个连接,其中one可以为其他值,需要保持与limit_conn_zone配置中的zone后的信息对应; - 配置位置:可配置于
http、server、location中;
- 语法:
更多参数请参考
ngx_http_limit_conn_module模块的官方文档;
2.2、ngx_http_limit_req_module
使用令牌桶的方式限制每个Client的请求处理速率,如果请求的速率超过限制则会被延迟处理,当数量超过突发值时会返回错误信息(默认错误码为503)。
|
limit_req_zone:- 语法:
limit_req_zone key zone=name:size rate=rate[sync]; - 示例解释:分配
10m大小的共享内存存储客户端的状态,每个地址每秒只能请求1次; - 配置位置:可配置于
http中;
- 语法:
limit_req:- 语法:
limit_req zone=name [burst=number] [nodelay | delay=number]; - 示例解释:令牌桶一共有
5块令牌,并且每秒钟只新增1块令牌,5块令牌发完后,多出来的请求就会返回503; - 配置位置:可配置于
http、server、location中;
- 语法:
更多参数请参考
ngx_http_limit_req_module模块的官方文档;
2.3、ngx_http_upstream_module
|
max_conns:从1.5.9版本后开支持该参数(商业版本中),从1.11.5版本之后非商业版本也可以使用;
- 语法:
max_conns=number - 示例解释:限制连接后端服务器的最大连接数为
10; - 配置位置:可配置于
upstream中;
- 语法:
更多参数请参考
ngx_http_upstream_module模块的官方文档;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 咕咕!
评论


