这篇文章主要介绍“Nginx速率限流怎么配置”,在日常操作中,相信很多人在Nginx速率限流怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx速率限流怎么配置”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
目前创新互联公司已为上千多家的企业提供了网站建设、域名、网络空间、网站托管、企业网站设计、凤泉网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
1 简介
Nginx作为微服务架构的流量接入层,主要使用 ngx_http_limit_req_module 模块实现漏桶算法的请求速率的限制。主要流程如下:
Nginx-速率限流主要流程
Nginx-速率限流主要流程
Nginx速率限流的主要流程如下:
① 客户端向Nginx发起请求
② Nginx近burst配置校验
③ burst未配置,则直接进行速率(rate)校验
④ 速率校验超额,则返回指定错误码给客户端
⑤ 速率校验未超额,则将请求转发至后端服务器
⑥ burst配置了且大于0,则进行burst校验
⑦ burst ⑧ burst>max,则校验延迟模式(nodelay)是否配置 ⑨ 延迟模式已配置,则进入队列进行等待被处理 ⑩ 若未配置延迟模式,则直接返回503错误码给客户端 2 核心配置 2.1 limit_req limit_req 主要用于配置限流区域、突发容量(默认为0)和是否延迟模式(默认为延迟模式)。 使用语法 配置段 2.2 limit_req_zone limit_req_zone 主要用于配置限流key、存放key对应信息的共享内存区域大小和固定请求速率。该功能只有Nginx version≥1.7.6的版本才被支持。 使用语法 配置段 2.3 limit_conn_log_level limit_conn_log_level 主要用于配置被限流后的日志级别,默认为error级别。该功能只有Nginx version≥0.8.18的版本才被支持。 使用语法 配置段 默认值 2.4 limit_conn_status limit_conn_status 主要用于配置被限流后的返回的状态,默认会返回503状态码。该功能只有Nginx version≥1.3.15的版本才被支持。 使用语法 配置段 默认值 3 注意事项 凡事都具有两面性,ngx_http_limit_req_module 模块虽可以解决当前面临的并发问题,但也会引入另外一些问题。如前端如果有做LVS或反向代理,而后端启用了该模块功能,那该机器的IP访问会特别频繁,从而导致经常出现503错误,但可以通过设置IP白名单来进行过滤解决该问题,简单配置方式如: 4 配置案例 到此,关于“Nginx速率限流怎么配置”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!limit_req zone=[name] [burst=number] [nodelay];
http,server,location
limit_req_zone [key] zone=[name]:[size] rate=[rate];
http
limit_conn_log_level info|notice|warn|error;
http,server,location
limit_conn_log_level error;
limit_conn_zone $variable zone=name:size;
http
limit_conn_status 503;
location / { # 允许一个IP的访问 allow 10.1.1.16; }
# 根据客户端IP地址进行统计,设置共享内存大小为20MB,设置固定速率大小为10r/s limit_req_zone $binary_remote_addr zone=addr:20m rate=10r/s; # 设置并发限流的日志级别为error limit_conn_log_level error; # 设置触发并发限制时直接返回503状态码 limit_conn_status 503; # ... server{ # ... location /limit{ # 设置每个IP的桶容量为10 # nodelay表示超额则立即返回503错误 # 没有配置nodelay表示超过后请求就会排队等待 limit_req zone=addr burst=10 nodelay; } } }
新闻标题:Nginx速率限流怎么配置
文章起源:http://chengdu.cdxwcx.cn/article/pedjho.html