环境ubuntu 20.04
限流包括限制并发数以及限制连接频率
限制并发数
涉及的参数为以下两个:
- limit_conn_zone
- limit_conn
其中limit_conn_zone只能出现在http全局块中
例:
# /etc/nginx/nginx.conf
http {
...
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
}
说明:设置一个10m的容器,按照32bytes/session, 可以处理320000个session
# /etc/nginx/sites-enabled/default
server {
...
location / {
...
limit_conn addr 1;
...
}
}
说明:限制每个IP只能发起一个并发连接
参考:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
限制连接频率
涉及的参数为以下两个:
- limit_req_zone
- limit_req
其中limit_req_zone只能出现在http全局块中
例:
# /etc/nginx/nginx.conf
http {
...
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
...
}
说明:限制了每秒只接受某个ip 5次每秒的请求频率。
server {
...
location / {
...
limit_req zone=one burst=5;
...
}
}
说明:burst参数为超过频率限制的最大ip数量,如果超出burst,则其他ip再超出频率就直接返回503
参考:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
测试
使用go-stress-testing进行压测
>>> ./go-stress-testing-mac -c 7 -n 2 -H 'X-Signature: 123' -H 'X-DeliverId: 123' -u 'http://127.0.0.1:4000/pid/1/production_page'
可以看到成功数最多为5,其余的返回503
参考:
https://blog.csdn.net/hellow__world/article/details/78658041
https://webcache.googleusercontent.com/search?q=cache:eck2kMAqXzsJ:https://www.cnblogs.com/pengyunjing/p/10662612.html+&cd=2&hl=zh-CN&ct=clnk
https://segmentfault.com/a/1190000004688125