美文网首页
nginx--preaccess阶段

nginx--preaccess阶段

作者: 温岭夹糕 | 来源:发表于2020-06-06 23:01 被阅读0次

preaccess阶段主要进行限速

1.limit_conn模块(默认不编译进nginx)

该模块是对连接客户端的限制。即对同一个ip的连接限制
文档:limit_conn模块
nginx配置

在http块中定义
    #定义共享内存大小
    limit_conn_zone $binary_remote_addr zone=addr:10m;
在server或location中定义
       location / {
          limit_conn addr 10; 
        #单个最大连接数
          limit_rate 50;
         #限速
          limit_conn_log_level warn;
          #记录日志
          limit_conn_status 500;
          #超出响应500状态码       
}

进行ab多次压测
ab -n 15 -c 15 域名
结果显示

Concurrency Level: 5
Time taken for tests: 20.021 seconds
Complete requests: 5
Failed requests: 0
Write errors: 0
Total transferred: 4225 bytes
HTML transferred: 3060 bytes
ab -n 200 -c 200 域名

Concurrency Level: 200
Time taken for tests: 20.020 seconds
Complete requests: 200
Failed requests: 10
(Connect: 0, Receive: 0, Length: 10, Exceptions: 0)
Write errors: 0
Non-2xx responses: 190
貌似连接数小的时候就不起作用了

若去掉限速后,甚至完全不起作用???
Concurrency Level: 200
Time taken for tests: 1.264 seconds
Complete requests: 200
Failed requests: 0
Write errors: 0
Total transferred: 169000 bytes
HTML transferred: 122400 bytes
Requests per second: 158.26 [#/sec] (mean)
Time per request: 1263.722 [ms] (mean)

总结:限制客户端每秒连接数不好用

2.limit_req模块(默认编译进nginx)

文章参考:https://blog.csdn.net/hellow__world/article/details/78658041
官方文档

nginx配置

http块下
limit_req_zone $binary_remote_addr zone=one:10m rate=2r/m;
#每分种只处理同一个ip的2个请求(平均),若超过则响应503状态码
       location / {
          limit_req zone=one;
          #limit_req zone=one burst=3 nodelay;
       }
  

参数介绍:

1.zone=one :设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应
2.burst=5:重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求**可以先放到这个缓冲区内等待**,但是这个等待区里的位置只有5个,超过的请求会直接报503的错误然后返回。
3.nodelay:
    如果设置,会在瞬时提供处理(burst + rate)个请求的能力,请求超过(burst + rate)的时候就会直接返回503,**永远不存在请求需要等待的情况**。(这里的rate的单位是:r/s)
    如果没有设置,则所有请求会依次等待排队(也就意味着不设置后面的请求可能会出现超时)

进行ab压测
Concurrency Level: 10
Time taken for tests: 0.002 seconds
Complete requests: 10
Failed requests: 9
(Connect: 0, Receive: 0, Length: 9, Exceptions: 0)
Write errors: 0
Non-2xx responses: 9
Total transferred: 7037 bytes
HTML transferred: 5058 bytes
Requests per second: 5959.48 [#/sec] (mean)
Time per request: 1.678 [ms] (mean)
Time per request: 0.168 [ms] (mean, across all concurrent requests)
Transfer rate: 4095.39 [Kbytes/sec] received

生效,还不错
修改配置

       location / {
          #limit_req zone=one;
          limit_req zone=one burst=3 nodelay;
       }

Concurrency Level: 10
Time taken for tests: 0.002 seconds
Complete requests: 10
Failed requests: 6
(Connect: 0, Receive: 0, Length: 6, Exceptions: 0)
Write errors: 0
Non-2xx responses: 6
虽然请求被延迟,但也有效果

注意点

limit_req模块的执行在limit_conn模块之前,所以当超出限制的连接数到来后,后面响应的是limit_req的503响应码

3.其他

文档http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_except
limit_rate 限速多少b
limit_rate_after 设置多少bytes过后将启动limit计数,如果小于此值则不限速
limit_except 方法 限制除了该方法外的方法

location / {
    limit_except GET {  
   #除了GET以外方法都收到下面条款限制(但是GET已经包含HEAD)
       deny all;
    }
}

相关文章

  • nginx--preaccess阶段

    preaccess阶段主要进行限速 1.limit_conn模块(默认不编译进nginx) 该模块是对连接客户端的...

  • 阶段

    从20岁起的人生,总有三个阶段,迷茫期,尴尬期,黄金期。 迷茫期,20多岁的时候,除了吃喝玩乐性,对其他一无所好,...

  • 阶段

    人的一生中有很多的阶段,就譬如幼儿园是一个阶段,小学是一个阶段,初中是一个阶段,高中是一个阶段,大学也是一个阶段。...

  • 阶段

    停止所有的闹钟, 切断电话, 给狗一块浓汁的骨头, 让它别叫。 拉好门帘, 随着滴答的雨声, 好好睡觉, 让梦前来...

  • 阶段

    热恋 是两个人乘火箭火速上升 分手 是两个人缘分到头自然离 热恋瘾还没过就分手 是一人在飞速火箭里将另一人推下 不...

  • 阶段

    每个人在不同的阶段,有不同的苦恼,每个人在不同的状态也有不同的苦恼,空闲的人有空闲人的苦恼,忙碌人有忙碌人的苦恼 ...

  • 阶段

    说不上在乎不在乎,爱不爱,欢喜不欢喜,只是都来得太突然,来得太仓促,来得太美,真真如烟火般转眼就没了。 决绝地删掉...

  • 阶段

    从2016.718.到2016.11.22的座右铭:大话好说,琐事难做!已经结束 接下来就是2016.11.22的...

  • 阶段

    这只是一个阶段。 十月十日的早晨躺在床上发了今天的...

  • 阶段

    最近和一个老朋友聊天,聊到回家乡工作的事情,听他说了许多之后颇有感触。 工作的城市离家其实也五六百公里,但终究是异...

网友评论

      本文标题:nginx--preaccess阶段

      本文链接:https://www.haomeiwen.com/subject/ljaftktx.html