网站压测
预计这个网站同时访问人数不会超过100人。
先用100人压了下
setUp(scn.inject(atOnceUsers(100))).protocols(httpProtocol)
一百个用户同时点会有报错,百分之八十请求在20秒内(20秒Orz)
换 heaviside 函数
setUp(scn.inject(heavisideUsers(100) over (60 seconds))).protocols(httpProtocol)
百分之九十五的用户能在20秒内打开博客任何一个页面
为啥这么慢
因为网站公网带宽只有1M哈哈哈哈,下面升级10M试试 立竿见影!
结论
没钱升级宽带,所以只能委屈用户了
限制Nginx请求数量
我网站里的页面打开时只会请求服务器一到两次,其它 js image css 全部走的CDN,所以限制每个IP每秒3次请求就差不多够了。为了防止 wifi 或者【电信局域网】的用户突然一起打开网站,我把 burst 留高一点到12
http 配置
# 全局限速配置
# 每个 ip: 3 r/s
# 每个ip 最多建立conn: 10
map $http_x_forwarded_for $clientRealIp {
default $remote_addr;
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}
map $clientRealIp $limit{
default $clientRealIp;
#1.1.1.1 "";
}
limit_req_status 429;
limit_req_log_level notice;
limit_conn_status 429;
limit_conn_log_level notice;
# 全局限制单个IP请求速率
limit_req_zone $limit zone=IpReqLimitZone:20m rate=3r/s;
# 全局限制单个IP可用链接数
limit_conn_zone $limit zone=IpConnLimitZone:20m ;
limit_conn IpConnLimitZone 10;
#分别设置每个server的链接数
limit_conn_zone $server_name zone=ServerConnLimitZone:20m;
server 配置
# 限制当前 server 最多建立 10000个链接
limit_conn ServerConnLimitZone 10000;
# 限制每个ip 的速度为 3+12 r/s
limit_req zone=IpReqLimitZone burst=12 nodelay;
缩短超时时间
因为我的博客完全是静态资源,所以在没有超过出口带宽的情况下,一般请求应该立即返回,故而超时时间可以设置的非常小。真超过带宽了,那只要对不起了。。。
client_header_timeout 10;
client_body_timeout 10;
send_timeout 2;
压测的同时,我在手机上刷新博客丝毫不受影响,问题(不)完美解决。最终的结论是,在线用户数两百以内完全可以撑得住。