[转帖]nginx限速

nginx,限速 · 浏览次数 : 0

小编点评

**1. 限制规则** ```nginx limit_req zone=addr:10m rate=5r/s; limit_conn_status 418; limit_conn_zone $limited zone=one:5m rate=10r/s; limit_req_zone $limited zone=two:5m rate=20r/s; limit_req_zone $limited zone=three:5m rate=30r/s; limit_req_zone $limited zone=four:5m rate=30r/s; limit_req_zone $limited zone=five:5m rate=50r/s; ``` **2. 测试 HTML 测试配置文件** ```html 限制请求测试

请求数:300

``` **3. 白名单配置** ``` 10.0.0.0/8 0;60.205.246.14 0;59.110.62.117 0;59.110.49.218 0;127.0.0.1 1; ``` **4. 运行测试** 在命令行中运行以下命令: ``` ab -c 100 -n 300 'http://127.0.0.1/' ``` 该命令将运行 300 个请求,每个请求都限制在 10 秒内,并从 127.0.0.1 上请求。 **5. 检查日志** 在测试完成后,访问 `logs/access.log` 文件查看日志内容。日志中应该包含一些状态码 418 的信息,表示请求被拒绝。

正文

https://www.cnblogs.com/fengzi7314/p/16541440.html

 

第一步,先创建限制的规则,我这里直接在nginx默认的配置文件目录下配置,如果想自定义,需要在主配置文件添加include xx/xxx/xxx/*.conf配置

复制代码
[root@node5 nginx]# cat conf.d/limit_zone.conf 
geo $white_ip {
    default 1;
    include whiteip.conf;
}
map $white_ip $limited {
    1 $binary_remote_addr;
    0 "";
}
limit_req_status 418;
limit_conn_status 418;

limit_conn_zone $limited zone=addr:10m;
limit_req_zone $limited zone=one:5m rate=5r/s;
limit_req_zone $limited zone=two:5m rate=10r/s;
limit_req_zone $limited zone=three:5m rate=20r/s;
limit_req_zone $limited zone=four:5m rate=30r/s;
limit_req_zone $limited zone=five:5m rate=50r/s;
limit_req_zone $limited zone=ten:10m rate=100r/m;

limit_req_log_level error;
limit_conn_log_level error;
复制代码

第二步,创建测试的html测试配置文件,这里的limit_req可以配置在server里也可以配置在location里,配置在server里的话作用于全局,配置在location里,只作用于某一个uri

复制代码
[root@node5 nginx]# cat conf.d/test_limit.conf 
server{
    listen          80;
    server_name     _;
    access_log      /var/log/nginx/logs/test_limit.log main;
    error_log      /var/log/nginx/logs/test_limit.log error;
 
    limit_req zone=two burst=5 nodelay;
    limit_req zone=ten burst=5 nodelay;
    #limit_rate 10M;
    location  / {
        root /html;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}
复制代码

第三步,在nginx.conf主配置文件的同目录下,创建白名单,可以不受我们所配置的限制

复制代码
[root@node5 nginx]# cat whiteip.conf 
10.0.0.0/8 0;
60.205.246.14 0;
59.110.62.117 0;
59.110.49.218 0;
127.0.0.1 0;
复制代码

第四步,重启

nginx -s reload 

测试1:ab命令来测试,可以看到我们用127.0.0.1这个ip访问是没有问题的

复制代码
[root@node5 nginx]# ab -c 100 -n 300 'http://127.0.0.1/'
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 300 requests


Server Software:        nginx/1.20.1
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /
Document Length:        236 bytes

Concurrency Level:      100
Time taken for tests:   0.019 seconds
Complete requests:      300
Failed requests:        0
Write errors:           0
Total transferred:      107400 bytes
HTML transferred:       70800 bytes
Requests per second:    15714.21 [#/sec] (mean)
Time per request:       6.364 [ms] (mean)
Time per request:       0.064 [ms] (mean, across all concurrent requests)
Transfer rate:          5493.84 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.5      1       2
Processing:     2    4   0.4      4       5
Waiting:        0    3   0.3      3       4
Total:          2    6   0.3      6       6

Percentage of the requests served within a certain time (ms)
  50%      6
  66%      6
  75%      6
  80%      6
  90%      6
  95%      6
  98%      6
  99%      6
 100%      6 (longest request)
复制代码

测试2:我们把白名单的参数从0改为1,之后nginx -s reload 在测试,可以看到并发如果过高就有失败的了,在去看日志

复制代码
[root@node5 nginx]# cat whiteip.conf 
10.0.0.0/8 0;
60.205.246.14 0;
59.110.62.117 0;
59.110.49.218 0;
127.0.0.1 1;
复制代码
复制代码
[root@node5 nginx]# ab -c 100 -n 300 'http://127.0.0.1/'
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 300 requests


Server Software:        nginx/1.20.1
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /
Document Length:        236 bytes

Concurrency Level:      100
Time taken for tests:   0.018 seconds
Complete requests:      300
Failed requests:        294
   (Connect: 0, Receive: 0, Length: 294, Exceptions: 0)
Write errors:           0
Non-2xx responses:      294
Total transferred:      35664 bytes
HTML transferred:       1416 bytes
Requests per second:    17066.79 [#/sec] (mean)
Time per request:       5.859 [ms] (mean)
Time per request:       0.059 [ms] (mean, across all concurrent requests)
Transfer rate:          1981.35 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.6      1       3
Processing:     3    4   0.4      4       5
Waiting:        0    3   0.3      3       3
Total:          3    5   0.5      5       6

Percentage of the requests served within a certain time (ms)
  50%      5
  66%      5
  75%      5
  80%      5
  90%      6
  95%      6
  98%      6
  99%      6
 100%      6 (longest request)
复制代码

日志内容,418位设置的状态码

 

 
分类: linux基础

与[转帖]nginx限速相似的内容:

[转帖]nginx限速

https://www.cnblogs.com/fengzi7314/p/16541440.html 第一步,先创建限制的规则,我这里直接在nginx默认的配置文件目录下配置,如果想自定义,需要在主配置文件添加include xx/xxx/xxx/*.conf配置 [root@node5 nginx

[转帖]Nginx上传文件大小限制(请求报文过大)413 Request Entity Too Large

在nginx使用过程中,上传文件的过程中,通常需要设置nginx报文大小限制。避免出现413 Request Entity Too Large。 于是奇葩的问题被我们遇到了,详细配置请参考下面。我们的问题是,无论client_max_body_size设置在哪里,nginx -s reload后,依

[转帖]nginx如何实现负载均衡、限流、缓存、黑白名单和灰度发布

https://zhuanlan.zhihu.com/p/464491494 挺好的文章. nginx负载均衡配置 1.负载均衡配置 http { upstream real_server { server 192.168.1.100:8082 weight=1; #轮询服务器和访问权重 serve

[转帖]Nginx(四)负载均衡

一 nginx目录的说明 1 nginx/ 3 |-- client_body_temp 4 |-- conf #这是Nginx所有配置文件的目录,极其重要 5 | |-- fastcgi.conf 'fastcgi相关参数的配置文件' 6 | |-- fastcgi.conf.default #f

[转帖]Nginx支持WebSocket反向代理

https://www.cnblogs.com/zhengchunyuan/p/12923692.html WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类

[转帖]Nginx内置变量以及日志格式变量参数详解

补充 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为空字符串 $uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$reques

[转帖]nginx proxy_pass keepalive

Syntax: keepalive connections; Default: — Context: upstream This directive appeared in version 1.1.4. Activates the cache for connections to upstream

[转帖]Nginx超时timeout 设置

Nginx 超时配置,连接时间过长直接关闭连接,显示timeout http { #每个 TCP 连接最多可以保持多长时间 keepalive_timeout 60; #客户端向服务端发送一个完整的 request header client_header_timeout 10; #客户端发送服务端

[转帖]nginx反向代理时保持长连接

https://www.cnblogs.com/liufarui/p/11075630.html ·【场景描述】 HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。 如果我们使用了nginx去作为反

[转帖]Nginx报错404,由于请求处理时间过长

问题复现 近期部门内部有一个应用由于数据量过于庞大,或者说sql优化性能问题,导致查询全量数据时老报错nginx404,后来查看浏览器timing信息,发现其竟然时常达到可怕的2分钟十秒,抛去解决sql优化问题,这里从Nginx端的配置来说如何解决这类问题! 存在的问题 服务器处理请求时间过长,导致