专栏首页运维经验分享Nginx 配置对流量、连接和请求的限制

Nginx 配置对流量、连接和请求的限制

首先给出配置段:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

http {       limit_conn_zone $binary_remote_addr zone=one:10m;       limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;       ...       server {       ...           location /download/ {            limit_rate 500k;            limit_rate_after 50m;            limit_conn one 1;          limit_req zone=one burst=5;<br>    }<br><br>  ... }

1、 limit_rate指令

  limit_rate开启nginx限速功能,可配置在http、server、location和if in location配置段。 limit_rate 500k表示限速500kB每秒,限速对象是单个连接,因此如果一个IP有多个连接的话,每个连接都是限速500k。limit_rate还有在特定情况下开启限速的功能。

limit_rate_after和 limit_rate配合使用表示在下载的文件大小达到设定数后开启限速效果(逐渐降速)。同样针对于单个连接。设定大小设置太小的话可能效果不准确。

2、Module ngx_http_limit_conn_module 模块

  limit_conn_zone $binary_remote_addr zone=one:10m模块开启对单个ip、单个会话同时存在的连接数的限制。这里定义一个记录区one,one的总容量是10m,该记录区针对于变量$binary_remote_add生效,这里是针对单个IP生效。该模块只是一个定义,配置在http配置段,需要配合limit_conn指令使用才生效, limit_conn one 1表示该location段使用one定义的 limit_conn_zone ,对单个IP限制同时存在一个连接。

PS:limit_conn_zone0.8版本之前叫

与现在有一定的差别。

3、ngx_http_limit_req_module 模块

   limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s模块开启对单个ip、单个会话在单位时间内请求的限制。这里zone和limit_conn_zone模块一样,rate表示限制的速率,1r/s表示一秒之内最多1次请求,也可以用5r/m,表示一分钟之内最多5次请求。limit_req_zone同样配置在http配置段。与limit_req指令配合使用才生效。limit_req zone=one burst=5表示该location段使用one定义的limit_req_zone,如果请求数超过 rate=1r/s,剩下的请求将被延迟处理,如果请求数超过burst定义的数量,多余的请求则直接返回503错误。

如果开启nodelay,则超过rate=1r/s的请求直接返回503,不再延迟处理。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx限制访问速率和最大并发连接数模块--limit (防止DDOS攻击)

    具体连接请参考 http://tengine.taobao.org/document_cn/http_limit_req_cn.html

    拓荒者
  • Nginx限制连接数和请求数

    其中limit_req_conn模块可以根据源IP限制单用户并发访问的连接数或连接到该服务的总并发连接数

    拓荒者
  • nginx limit配置参数解读

    解析一下ngx_http_core_module、ngx_http_limit_conn_module以及ngx_http_limit_req_module中的...

    拓荒者
  • 今天写出一个十分弱智的bug!

    因为一些新的需求,要在后面加一些where条件,limit操作不能在嵌套查询里面加了,于是乎把limit 0,10提出来放到最外面,结果order by还留在里...

    Java技术栈
  • 分表分页/跨库分页为什么这么难?

    当业务数据达到一定量级(比如:mysql单表记录量>1千万)后,通常会考虑“分库分表”将数据分散到不同的库或表中,这样可以大大提高读/写性能。但是问题来了,对于...

    菩提树下的杨过
  • SQL优化之LIMIT语法, limit n,m 和 limit n有什么区别?

    在某些面试题中会遇到这样的问答或笔试题:“limit 0,1 和 limit 1有什么区别?” 要准确回答这个问题就等深入明白limit一个参...

    Java深度编程
  • laravel自定义分页的实现案例offset()和limit()

    情景:因个人使用layui在开发后台模块,因为layui自带了table模块,是都封装了分页的,并且返回数据格式也是有固定要求的

    砸漏
  • MySQL的limit查询优化

    我们大家都知道MySQL数据库的优化是相当重要的。其他最为常用也是最为需要优化的就是limit。MySQL的limit给分页带来了极大的方便,但数据量一大的时候...

    java达人
  • 【死磕Sharding-jdbc】---结果合并

    接下来以执行 SELECT o.*FROM t_order o whereo.user_id=10order byo.order_id desc limit 2...

    用户1655470
  • 马斯克说,特斯拉卡车有Mad Max狂野模式,危险的变道操作?

    量子位

扫码关注云+社区

领取腾讯云代金券