PHP高并发解决方案一 【nginx限流】

本文将分4个步骤讲解:

1.api压力测试
2.查看api响应性能
3.nginx限流进行优化
4.查看优化结果

1 api压力测试
1.1 安装压测工具

yum -y install httpd-tools	# 安装压测工具
ab -v						# 查看是否安装成功

1.2 开始api测试

ab -n1000 -c100 http://pear.tsaihoo.com/test.php # 100的并发请求,总共请求1000次

2 查看api响应性能
在这里插入图片描述

注:Requests per second: 24.47 [#/sec] (mean) 是指最大的qps (请求数/秒)

3 nignx限流进行优化

3.1 nginx限流可分为两种方式:

1)按连接数限速,即并发数(ngx_http_limit_conn_module)
2)按请求速率限速,按照ip限制单位时间内请求的数(ngx_http_limit_req_module)

3.2 nginx 限流配置:(这里用的按请求速率限速)

# 创建mylimit规则,根据用户的IP限流,限流的速率是1个请求每秒
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;	
# 应用mylimit规则,burst=1当1秒内存在2个请求可以缓存一个,其他的请求就报错,当burst很多时候,nodelay让后面的请求直接执行不用排队
limit_req zone=mylimit burst=1 nodelay;
	

3.3 在宝塔中加入配置:
在这里插入图片描述
或 vim /home/server/nginx/conf/nginx.conf直接进行配置,需要留意的是limit_req_zone放http模块,limit_req放server模块。

3.4 重启nginx

service nginx restart 

3.5.查看是否启动成功

ps aux | grep nginx

4.查看优化结果
4.1 重复1.2步骤,结果:
在这里插入图片描述
4.2 查看nginx报错信息:
在这里插入图片描述
最后,我们发现压测的结果要比一开始的qbs要大,原因:nginx进行了限流,一次只能只能2个请求成功,后面的请求nginx直接返回了503(参考4.2),所以访问速度变快了。

还有不清楚的地方欢迎留言

猜你喜欢

转载自blog.csdn.net/qq_24973351/article/details/119519652