测试代码:https://github.com/MacwinWin/docker_nginx_quick_test
不知道什么时候开始,我对Nginx的limit_req印象是下面这样的:
下面的配置通过rate参数,实现每秒300次请求的处理
http {
limit_req_zone $binary_remote_addr zone=perip:2m rate=300r/s;
server {
location ~ / {
limit_req zone=perip;
}
}
}
但如果你用ab进行测试,你会发现
>>> ab -c 300 -n 300 'http://0.0.0.0:8080/'
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 0.0.0.0 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 300 requests
Server Software: nginx/1.21.3
Server Hostname: 0.0.0.0
Server Port: 8080
Document Path: /
Document Length: 153 bytes
Concurrency Level: 300
Time taken for tests: 0.183 seconds
Complete requests: 300
Failed requests: 275
(Connect: 0, Receive: 0, Length: 275, Exceptions: 0)
Non-2xx responses: 300
Total transferred: 97500 bytes
HTML transferred: 50300 bytes
Requests per second: 1635.59 [#/sec] (mean)
Time per request: 183.420 [ms] (mean)
Time per request: 0.611 [ms] (mean, across all concu

本文介绍了Nginx的limit_req模块配置误区,澄清了rate参数实际含义,并通过实例展示了如何正确设置burst参数以避免大量503错误。正确理解limit_req的配置能有效限制请求速率,防止DDoS攻击,确保服务稳定性。
最低0.47元/天 解锁文章
571

被折叠的 条评论
为什么被折叠?



