nginx配置请求频率,如何限制一个项目下的所有请求

nginx配置请求频率,如何限制一个项目下的所有请求

问题描述:

请教各位大神:我配置nginx通过ip进行请求频率限制,但是一直只对一个路径起效果,来此求教,希望大家能够帮忙看看,谢谢
访问:http://192.168.0.187/test/ 是可以进行正常访问控制(备注:访问就是index.jsp动态页面)
访问:http://192.168.0.187/test/News/news_bus _就阻止不了请求(是通过后台进行跳转页面的)
图片说明
图片说明
图片说明

-c 1表示并发1个,所以限制不上应该是正常,倒是失败是意外的,估计是别的原因。

     -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make

建议去github去搜索nginx 限流工具

漏桶这个名字,其实就非常形象的描述了算法本身的原理。大家都知道,一个身上打了 n 个眼儿的桶,无论你倒进桶里的水多还是少,漏出来的水的流速也会保持稳定,这就是此算法的本质。再以 NGINX + PHP-FPM 为例,我们在 NGINX 配置里定义一个最大处理请求的速度,如果 PHP-FPM 的稳定处理速度峰值是 1000 RPS,那就在 NGINX 里定义处理请求速度最大为 1000 RPS。当 RPS 已经大于这个值的时候,多出来的请求就被 NGINX 这个桶暂时储存起来,排着队等待处理。在 NGINX 的精心照料下,PHP-FPM 会相对稳定的处理来自 NGINX 的请求,而不会出现突然暴增的请求让 PHP-FPM 处理不过来,甚至挂掉。

然而桶也有大小,NGINX 也一样,假如请求太多太多,桶都装不下了,那么桶将会把多出来的请求直接漏掉,返回 503 错误。

我是新版本,配置和你不同,我给看下:

nginx.conf:
limit_conn_zone $binary_remote_addr zone=perip:10m;

路径那:
     location /h5web/ {
        limit_conn perip 2;
                ...

看测试:

ab -n 100 -c 10 http://127.0.0.1/h5web/
Time taken for tests:   0.006 seconds
Complete requests:      100
Failed requests:        22
   (Connect: 0, Receive: 0, Length: 22, Exceptions: 0)

ab -n 100 -c 10 http://127.0.0.1/h5web/test/News/1.html
Time taken for tests:   0.007 seconds
Complete requests:      100
Failed requests:        16
   (Connect: 0, Receive: 0, Length: 16, Exceptions: 0)

所以应该是能限制上的,除非你有额外的单独的location配置了里面。

http://192.168.0.187/test/News/news_bus 请求后台一个Controller进行页面跳转到 http://192.168.0.187/test/bus01.html;
然后这样的话http://192.168.0.187/test/News/news_bus这个请求就没有办法进行请求频率的限制,(我也不知道是什么原因。)
最后我只好采用对连接频率的限制:limit_conn_zone
limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
一个限制请求频率一个限制链接频率

location /test/{
limit_req zone=one burst=10 nodelay;
limit_conn addr 2;
proxy_pass http://192.168.0.187:8081;
}
但是这样的话,前面的大神也说过,-c 1表示并发1个,所以限制不上应该是正常