nginx 限流
一、 Jmeter使用入门
Apache Jmeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于
Web应用测试,但后来扩展到其他测试领域。它可以用于对静态的和动态的资源的性能进行测试。也可以用
于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你还可以使
用它做性能的图形分析或在大并发下负载测试你的服务器/脚本/对象。
(注:jmeter下载网址:http://jmeter.apache.org/download_jmeter.cgi)
jmeter使用参考如下:
- 运行Jmeter: 安装JDK环境 打开文件夹运行bin目录下的 jmeter.bat即可进入jmeter的主界面 启动不了主界面尝试直接启动bin目录下的ApacheJMeter.jar 2. 创建一个线程组 点击测试计划,右键添加Threads,选择线程组 3. 设置线程组参数 线程数:用户数量,100线程就模拟100个用户访问 Ramp-Up Period(in seconds): 每个线程用户执行间隔,0代表并发访问 循环次数:每个用户请求的次数,永远就是不停的请求 4. 创建HTTP请求 右键线程组-Sampler-HTTP请求 5. 配置HTTP请求 服务器IP 端口号 路径是端口号后面的,例如 /xxx.html 6. 添加运行结果分析监听器 右键线程组-添加-监听器- 图形结果,聚合报告,查看结果树
效果图如下:
二、限制某一IP每秒访问次数
nginx限制每个IP每秒访问1次,选择nginx.conf配置文件进行配置
配置内容如下: http {# 限制时间段请求次数,开辟了一块allips内存来统计每秒ip访问次数 limit_req_zone $binary_remote_addr zone=allips:10m rate=1r/s;#1r/s表示每秒访问1次 #限制每ip每秒不超过20个请求,漏桶数burst为5 #brust的意思就是,如果第1秒、2,3,4秒请求为19个, #第5秒的请求为25个是被允许的。 #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。 #nodelay,如果不设置该选项,严格使用平均速率限制请求数, #第1秒25个请求时,5个请求放到第2秒执行, #设置nodelay,25个请求将在第1秒执行。 location / { limit_req zone=allips burst=5 nodelay;#每秒每IP限制访问1次,缓存值为5 … }
执行测试用例,看到结果是:每秒放行的请求次数不超过允许和缓冲次数之和。
测试结果如下:
聚合报告如下:
三、限制某一IP瞬间并发量
nginx限制某一IP瞬间并发量为1
配置如下: http {# 限制并发量,开辟了一块addr内存来统计IP并发量 limit_conn_zone $binary_remote_addr zone=addr:10m; location / { limit_conn addr 1; #连接数限制 … }
执行结果如下:
聚合报告如下: