Nginx系列:使用Nginx进行限流 | 八月更文挑战

1,501

这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战

📖前言

心态好了,就没那么累了。心情好了,所见皆是明媚风景。

“一时解决不了的问题,那就利用这个契机,看清自己的局限性,对自己进行一场拨乱反正。”正如老话所说,一念放下,万般自在。如果你正被烦心事扰乱心神,不妨学会断舍离。断掉胡思乱想,社区垃圾情绪,离开负面能量。心态好了,就没那么累了。心情好了,所见皆是明媚风景。


Jmeter 使用入门

Apache JmeterApache 组织开发的基于 Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于对静态的和动态的资源的性能进行测试。也可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你还可以使用它做性能的图形分析或在大并发下负载测试你的服务器/脚本/对象。

(注:jmeter下载网址:jmeter.apache.org/download_jm…)

完成后首先切换为我们熟悉的简体中文环境:

1. 首先打开 jmeter 软件,发现显示的为英文
2. 首先可以通过 `jmeter` 的界面工具来设置语言为中文 点击菜单栏【Options】按钮
3. 然后依次单击【Choose language】>【Chinese(simplified)】...
4. 设置完成查看效果
5. 也可以通过设置jmeter.properties配置文件来设置语言为中文

jmeter使用参考如下:

  1. 运行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. 添加运行结果分析监听器
    • 右键线程组-添加-监听器-
    • 图形结果,聚合报告,查看结果树

效果图如下

创建的压测线程组 在这里插入图片描述 HTTP 请求 在这里插入图片描述 聚合报告 在这里插入图片描述

限制某一个IP访问次数

nginx限制每个IP每秒访问1次,选择nginx.conf配置文件进行配置

在这里插入图片描述

找到http下的这个

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秒执行。

    server {
        listen       8086;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

		# 超过超时时间则进行故障转移
        location /chenOne {
			#每秒每IP限制访问1次,缓存值为5
			limit_req zone=allips burst=5 nodelay;
			# 放置静态资源的地方
            root   static;# (d:/nginx/static)
			# 访问的首页
            index  index.html index.htm;
			# 进行负载均衡的配置指向地址
			proxy_pass http://tomcate_server;
			proxy_connect_timeout 3;#默认单位是秒 
			proxy_read_timeout 3; 
			proxy_send_timeout 3;
        }

执行测试用例,看到结果是:每秒放行的请求次数不超过允许和缓冲次数之和。

至于结果要你自己去测试你自己的接口喽


限制某一个IP瞬间并发量

Nginx 限制某一个 Ip 瞬间并发量为 1,选择nginx.conf配置文件进行配置

http{
    # 限制并发量,开辟出一块addr内存来统计IP并发量 
	limit_conn_zone $binary_remote_addr zone=addr:10m;
    
    # 找到location加入如下代码
    # 连接数限制
	limit_conn addr 1;

至于结果要你自己去测试你自己的接口喽


🎉总结:

  • 更多参考精彩博文请看这里:《陈永佳的博客》

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!