做conn_zone 的时候,没有限制链接,正常返回200

来源:2-26 Nginx的请求限制_请求限制配置语法

极客不忙

2017-07-26

配置一样,

写回答

3回答

Jeson

2017-08-22

既然,有几个同学都遇到这个问题了,我刚把课程中的场景配置,自己再尝试了一遍:

除开配置、或者其他不细心的原因,我觉得大家出现这样的问题,和nginx处理静态元素效率有关系:

1、当我同样用课程中的配置

ab -n 200 -c 20 http://jeson.t.imooc.io/test_mysite.html

返回的结果是:

Time taken for tests:   0.411 seconds

nginx 很快就处理了,而且确实没有出现限制。

2、我把配置作了一些修改,加入了一行如下配置:

        proxy_pass http://www.youku.com;

如果学习了代理的同学,可能会清楚这个配置,这里我得目的,就是让nginx处理效率变慢,这样nginx处理请求连接起来就变慢了。

再次压测,如下:

ab -n 200 -c 20 http://jeson.t.imooc.io/test_mysite.html  

Non-2xx responses:      199

这个时候,就会出现很多非200的请求了。而且个数是:199个被限制住。

服务端error.log出现,如下错误日志:

2017/08/22 20:58:17 [error] 4920#4920: *143405 limiting connections by zone "conn_zone", client: 172.16.67.0, server: localhost, request: "GET /test_mysite.html HTTP/1.0", host: "jeson.t.imooc.io"

2017/08/22 20:58:17 [error] 4920#4920: *143407 limiting connections by zone "conn_zone", client: 172.16.67.0, server: localhost, request: "GET /test_mysite.html HTTP/1.0", host: "jeson.t.imooc.io"

2017/08/22 20:58:17 [error] 4920#4920: *143406 limiting connections by zone "conn_zone", client: 172.16.67.0, server: localhost, request: "GET /test_mysite.html HTTP/1.0", host: "jeson.t.imooc.io"

2017/08/22 20:58:17 [error] 4920#4920: *143408 limiting connections by zone "conn_zone", client: 172.16.67.0, server: localhost, request: "GET /test_mysite.html HTTP/1.0", host: "jeson.t.imooc.io"

2017/08/22 20:58:17 [error] 4920#4920: *143409 limiting connections by zone "conn_zone", client: 172.16.67.0, server: localhost, request: "GET /test_mysite.html HTTP/1.0", host: "jeson.t.imooc.io"

2017/08/22 20:58:17 [error] 4920#4920: *143410 limiting connections by zone "conn_zone", client: 172.16.67.0, server: localhost, request: "GET /test_mysite.html HTTP/1.0", host: "jeson.t.imooc.io"

那么,总结为什么?

我们限制的虽然是一个,但是由于我们的并发量不足以使得nginx端并发使用到多个连接,尤其是对于nginx处理静态元素时,效率是比较高的。因此,给你的感觉是会限制不住。

0
0

LetsShare

2017-08-22

我一开始在conf.d/default.conf中的头部,定义的limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 也是无法控制请求数。

然后我把这句放到nginx.conf中http{...}中,就可以控制了。limit_req zone=one;仍让放在default.conf的server{...}中。

0
1
Jeson
Syntax: limit_conn_zone key zone=name:size; Default: — Context: http 同学,你的认为是错误的,limit_conn_zone 配置语法只能在 http层级中,限制server的层外部。 和在哪个配置文件没有必然关系,课程中为了方便大家学习观看效果,我配置到了default.conf中。 但是需要注意的是,我同样配置的也是server层级以外的,所以不会有影响。
2017-08-22
共1条回复

Jeson

2017-07-26

学习的环境是否用的慕课网提供的docker容器环境来配置的?

0
1
极客不忙
没有 那个页面的普通用户没有权限。
2017-07-26
共1条回复

Nginx入门到实践-Nginx中间件应用+搭建Webserver架构

中间件、负载均衡、应用层安全防护、动静分离、Nginx+LUA开发等

4183 学习 · 908 问题

查看课程