2017/05/28 安全 No Comments Nginx限制并发连接数和白名单配置-提升整体并发 背景/需求:恶意攻击、恶意采集、恶意刷页面秒杀、抢购并发连接限制、队列缓冲web下载带宽限制、web请求速率限制CC攻击Nginx连接数限制模块:说明:Nginx有很多模块、模块下面又分很多指令,下面就说说limit_conn_zone和limit_conn两指令limit_conn_zone模块指令配置Nginx http模块中添加http{ …………………… limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server{ …………………… }}PS:配置区域名称为perip、perserver,需要写在http里面;对于关系:key => $binary_remote_addr #二进制的IP地址name => perip #随便取的一个名字,比如,你可以取成fitysize => 10m #空间大小,这里是10MB一个二进制的ip地址在32位机器上占用32个字节,在64位机器上占用63个字节,那么10M可以存放多少呢,计算一下,10x1024x1024/32 = 327680,意思就是可以存放326780个ip地址(32位),64位可以存放163840个ip1、key:键,可以说是一个规则,就是对客服端连接的一个标识,比如上面用的是IP地址2、zone:共享内存空间,作用:保存每个key对应的连接数3、size:共享内存空间大小,如1M、10M、100K当共享内存空间被耗尽,服务器将会对后续所有的请求返回503 (Service Temporarily Unavailable) 错误。来源:未来往事 https://www.fity.cnNginx server主机模块中添加server{ …………………… limit_conn perip 3; #调用nginx http区段中定义的perip,该指令需要写在server里面,限制除了白名单外的IP,每个IP最大并发为3个连接; #limit_conn perserver 1000; #限制该主机最大并发连接数; #PS:什么是并发呢?请求到达并已经读取了请求头信息到响应头信息发送完毕 #limit_rate 256k; #限制每个连接的带宽,可以单独定义这条指令,与连接数无关; #limit_req zone=perreq nodelay #如果请求不需要被延迟,添加nodelay参数,服务器会立刻返回503状态码。 ……………………}PS:参数补充说明:$binary_remote_addr是限制同一客户端ip地址;$server_name是限制同一server最大并发数;limit_conn为限制并发连接数;limit_rate为限制下载速度。来源:未来往事 https://www.fity.cn你也可以使Nginx limit只针对执行PHP时有效:location ~ .*\.(php|php5)?$ { limit_conn perip 3; ……………………}白名单功能配置:nginx的限速白名单需要结合geo和map指令来实现,其中map指令使用ngx_http_map_module模块提供的。ngx_http_map_module模块可以创建变量,这些变量的值与另外的变量值相关联。允许分类或者同时映射多个值到多个不同值并储存到一个变量中,map指令用来创建变量,但是仅在变量被接受的时候执行视图映射操作,对于处理没有引用变量的请求时,这个模块并没有性能上的缺失。配置参考:http{ …………………… geo $whiteiplist { default 1; #如果客户端地址不能匹配任意一个定义的地址,nginx将使用此值。来源:未来往事 127.0.0.1 0; #白名单: 127.0.0.1 172.16.0.0/16 0; #白名单 172.16.0.0 ~ 172.16.255.255 10.252.0.0/24 0; #白名单 10.252.0.0 ~ 10.252.0.255 } map $whiteiplist $limit { 1 $binary_remote_addr; 0 ""; } ……………………}PS:1)geo指令定义一个白名单$whiteiplist, 默认值为1, 所有都受限制。 如果客户端IP与白名单列出的IP相匹配,则$whiteiplist值为0也就是不受limit限制。通常白名单内的IP是你自己的IP、CND IP、负载均衡IP或反向代理IP地址等。2)map指令是将$whiteiplist值为1的,也就是受限制的IP,映射为客户端IP。将$whiteiplist值为0的,也就是白名单IP,映射为空的字符串。3)limit_conn_zone和limit_req_zone指令对于键为空值的将会被忽略,从而实现对于列出来的IP不做限制。4)geo指令使用ngx_http_geo_module模块提供的。默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module。ngx_http_geo_module模块可以用来创建变量,其值依赖于客户端IP地址。geo指令主要是根据IP来对变量进行赋值的。因此geo块下只能定义IP或网络段,否则会报错。5)map指令使用ngx_http_map_module模块提供的。默认情况下,nginx有加载这个模块,除非人为的 --without-http_map_module。完整的配置示例附:部分配置代码http{ …………………… geo $whiteiplist { default 1; 127.0.0.1 0; #白名单: 127.0.0.1 172.16.0.0/16 0; #白名单 172.16.0.0 ~ 172.16.255.255 10.252.0.0/24 0; #白名单 10.252.0.0 ~ 10.252.0.255 } map $whiteiplist $limitlist { 1 $binary_remote_addr; 0 ""; } limit_conn_zone $limitlist zone=perip:10m; limit_conn_zone $limitlist zone=perserver:10m; server{ …………………… limit_conn perip 3; #调用nginx http区段中定义的perip,该指令需要写在server里面,限制除了白名单外的IP,每个IP最大并发为3个连接; #limit_conn perserver 1000; #限制该主机最大并发连接数; #PS:什么是并发呢?请求到达并已经读取了请求头信息到响应头信息发送完毕。来源:未来往事 #limit_rate 256k; #限制每个连接的带宽,可以单独定义这条指令,与连接数无关; …………………… }}ngx_http_limit_req_module模块ngx_http_limit_req_module模块的使用和ngx_http_limit_conn_module模块差不多,不在赘述,可查看本文底部推荐的文章。未来往事编写本文的背景及初衷:解决网站遭受恶意攻击的过程及方法思路分享,希望对你有所帮助^_^[root@web ~]#netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'([root@web ~]#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}')ESTABLISHED t 681TIME_WAIT t 155………………[root@web ~]#netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n通过上述命令也可以查看有许多连接的ip,如:1 61.190.80.2261 68.180.228.1832 36.5.133.72 36.6.64.2293 218.75.39.583 223.247.41.1684 112.238.71.2024 112.65.135.385 10.165.13.1705 103.40.223.636 117.69.251.81………………limit_zone处理前后服务器性能监控对比图:推荐阅读:《Tengine限制连接数和白名单功能》《nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录》《Module ngx_http_limit_req_module》《Nginx模块 ngx_http_limit_req_module限制请求速率》《nginx 的限制连接模块limit_zone与limit_req_zone》直白的说就是降低单IP的并发连接数提升整体IP并发连接个数,在一定程度上可能会存在可用率的下降情况。如果上述方法在没能解决你的问题,建议你联系你的运营商提供安全增值服务或增加硬件安全设备进行解决问题,欢迎补充。 本文最后更新于 2019-06-27 13:53:30 并被添加「linux nginx web安全 安全 高并发 性能优化 攻击」标签,已有 5928 位童鞋阅读过。 本文作者:未来往事 本文链接:https://felixway.cn/post/608.html 本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处 相关文章 nginx防盗链(适用于图片与文件下载) http跳转https_设置指定目录不跳转nginx rewrite 记一次阿里云ECS DDOS攻击。。。 2台机器之间的端口转发iptables Nginx配置文件参数详细说明
此处评论已关闭