Ngnix IP访问限制测试报告
性能测试报告 密级:内部公开
目 录
1
引言 ........................................................................................................................................................................ 3 1.1 测试目的 ......................................................................................................................................................... 3 1.2 背景 ................................................................................................................................................................. 3 1.3 术语 ................................................................................................................................................................. 3 测试资源和环境 .................................................................................................................................................... 3 2.1 测试环境及组网图 ......................................................................................................................................... 3 2.2 硬件 ................................................................................................................................................................. 3 2.3 软件 ................................................................................................................................................................. 3 NGINX IP限制策略 ............................................................................................................................................. 3 3.1 Nginx limit_req_zone 指令 ............................................................................................................................ 4 测试结果 ................................................................................................................................................................ 4 4.1 无限制场景 ..................................................................................................................................................... 4 4.2 限制场景 ......................................................................................................................................................... 5 4.3 测试结论及建议 ............................................................................................................................................. 8 遗留问题列表 ........................................................................................................................................................ 8 风险和依赖 ............................................................................................................................................................ 8
2
3 4
5 6
第2页/共8页
性能测试报告 密级:内部公开
1 引言
1.1 测试目的
主要是为了验证nginx的ngx_http_limit_req_module模块对单位时间段内的同一IP的请求数量进行限制,可以针对某些提供的API或是易于遭受DOS攻击的URL进行访问限制。
1.2 背景
1.3 术语
名词术语 Nginx
解释 Nginx (\"engine x\") 是一个高性能的 HTTP 和 反向代理 服务器
2 测试资源和环境
2.1 测试环境及组网图
loadrunnerNginx 服务器API 服务器
2.2 硬件
序号 1 2 3 名称 Loadrunner Nginx服务器 Api服务器 软件名称 Loadrunner Nginx Weblogic 操作系统 Window 7 Liunx Liunx 版本 11.50 1.4.7 10.3.6 配置 双核、4G 双核、8G 双核、8G 数量 3 1 1 数量 3 1 1 备注 模拟用户并发访问接口 2.3 软件
序号 1 2 3 备注 3 Nginx IP限制策略 ngx_http_limit_req_module模块可以通过定义的键值来限制请求处理的频率。它可以限制
第3页/共8页
性能测试报告 密级:内部公开
来自单个IP地址的请求处理频率。限制的方法是通过一种“漏桶”的方法——固定每秒处理的请求数,推迟过多的请求处理。
设置对应的共享内存限制域和允许被处理的最大请求数阈值。如果请求的频率超过了限制域配置的值,请求处理会被延迟,所以所有的请求都是以定义的频率被处理的。超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值 这时,这个请求会被终止,并返回503 (Service Temporarily Unavailable) 错误。这个阈值的默认值等于0。 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /search/ { limit_req zone=one burst=5; }
限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于5个。如果不希望超过的请求被延迟,可以用nodelay参数:limit_req zone=one burst=5 nodelay;
3.1 Nginx limit_req_zone 指令
指令 limit_req_zone
语法: limit_req_zone $variable zone=name:size rate=rate; 默认值: — 上下文: http
设置一块共享内存限制域的参数,它可以用来保存键值的状态。 它特别保存了当前超出请求的数量。 键的值就是指定的变量(空值不会被计算)。 示例用法:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
这里,状态被存在名为“one”,最大10M字节的共享内存里面。对于这个限制域来说 平均处理的请求频率不能超过每秒一次。
键值是客户端的IP地址。 如果不使用$remote_addr变量,而用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。 如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。
请求频率可以设置为每秒几次(r/s)。如果请求的频率不到每秒一次, 你可以设置每分钟几次(r/m)。比如每秒半次就是30r/m。
4 测试结果
4.1 无限制场景
1、一个用户(IP)访问服务器,每个用户每秒发出30个请求,持续请求60s。 用户 并发速率 持续时间 请求数 请求成功数 172.16.39.211 1r/s 60s 60 60 第4页/共8页
性能测试报告 密级:内部公开
2、模拟3个用户(IP)访问服务器,每个用户每秒发出30个请求,持续请求60s。 用户 并发速率 持续时间 请求数 请求成功数 172.16.39.211 30r/s 60s 1800 1800 172.16.42.220 30r/s 60s 1800 1800 172.16.42.221 30r/s 60s 1800 1800
结论:在未对接口做任何限制时,每一个IP都可以进行无限制的并发,且服务器都能正常的接受并返回;此种情况下,会出现某个IP对系统进行恶意性的并发,导致服务器性能下降甚至导致服务崩溃。
4.2 限制场景
Nginx配置:
limit_req_zone $binary_remote_addr zone=req_one:10m rate=20r/s; location /certusnet-sso/iptv/hd{
proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off;
第5页/共8页
性能测试报告 密级:内部公开
proxy_pass http://sso_server/certusnet-sso-iptvhd/iptv/hd; limit_req zone=req_one burst=5 nodelay; access_log logs/root.access.log main; }
Nginx限制每个IP只允许每秒发送20个请求,其余全部丢弃;
1、一个用户(IP)访问服务器,每个用户每秒发出15个请求,持续请求60s。 用户 并发速率 持续时间 请求数 请求成功数 172.16.39.211 15r/s 60s 900 840
2、一个用户(IP)访问服务器,每个用户每秒发出25个请求,持续请求60s。 用户 并发速率 持续时间 请求数 请求成功数 172.16.39.211 25r/s 60s 1500 1150
第6页/共8页
性能测试报告 密级:内部公开
3、一个用户(IP)访问服务器,每个用户每秒发出5个请求,持续请求60s。 用户 并发速率 持续时间 请求数 请求成功数 172.16.39.211 5r/s 60s 300 300 172.16.42.220 5r/s 60s 300 300 172.16.42.221 5r/s 60s 300 300
3、一个用户(IP)访问服务器,每个用户每秒发出25个请求,持续请求60s。 用户 并发速率 持续时间 请求数 请求成功数 172.16.39.211 25r/s 60s 1500 1150 172.16.42.220 25r/s 60s 1500 1150 172.16.42.221 25r/s 60s 1500 1150
第7页/共8页
性能测试报告 密级:内部公开
结论:通过上述几个场景的验证发现,nginx可以实现对单个IP在某一时间段的并发数的限制,超出限制部分的情况,nginx会直接返回503,通过nginx的限制,可以有效的对易于遭受DOS攻击的URL进行保护。
4.3 测试结论及建议
从上述无限制和限制的几个场景测试数据中,可以得出通过nginx的
ngx_http_limit_req_module模块对单位时间段内的同一IP的请求数量进行限制,可以针对某些提供的API或是易于遭受DOS攻击的URL进行访问限制。
5 遗留问题列表
无遗留问题
6 风险和依赖
1、此方案中的IP并发数如20r/s,如果接口的处理效率或接口消息比较复杂时,会导致在并发数<20r/s时,nginx也会直接给出503的拒绝;此处需要合理的设置并发数限制或使用“漏桶”延迟处理(需要设置具体的延迟处理数);
2、此方案只能对单个IP进行并发限制,无法对整个访问的IP数进行限制,如有人恶意使用IP欺骗或其他方法,进行多IP的并发攻击;
3、此方案使用nginx进行限制,只能对统一的并发数进行配置 ,无法做到不同接口不同的并发数的限制;
第8页/共8页
因篇幅问题不能全部显示,请点此查看更多更全内容