网站nginx配置限制单个IP访问频率,预防DDOS恶意攻击
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网站nginx配置限制单个IP访问频率,预防DDOS恶意攻击相关的知识,希望对你有一定的参考价值。
参考技术A对于网站来说,尤其是流量较大出名的网站,经常遇到攻击,如DDOS攻击等,虽然有些第三方,如Cloudflare可以挡,但对于动态网站php来说,只能挡一部分。这时候需要对于单个IP恶意攻击做出限流。nginx的两个模块可以限流。
nginx两个限流模块:
连接频率限制,ngx_http_limit_conn_module:官方文档:https://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
请求频率限制,ngx_http_limit_req_module:官方文档:https://nginx.org/en/docs/http/ngx_http_limit_req_module.html
网上理论很多,根据名字可知:
当然还是看不懂的话,通俗点讲(相对于时间比较):
比如秒杀,抢购,连接频率限制和请求频率限制应该配合使用 , 使用连接频率限制同一IP同时只能有3个连接, 再使用请求频率限制对于同一ip的请求,限制平均速率为5个请求/秒 , 这样比单独只使用一种限制要好很多。
比如只使用请求频率限制 , 可以精确地限制同一ip1秒只能发起5次的http请求 , 假如同一ip1秒内发起了100000次请求 , 虽然限制了只有5次成功响应 , 但是其他的99995次的请求TCP握手建立http连接是不是会消耗服务器资源? 所以还需要配合使用。
1、limit_req_zone,示例:
2、limit_conn_zone,示例:
3、搭配一起使用
1、ab命令
ab是apache自带的压力测试工具。一般不用额外安装,ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
测试命令
2、wrk命令
需自己安装,地址:https://github.com/wg/wrk
安装
测试命令:
还有其他压测工具,自行研究
Nginx如何配置除某个IP之外,其他IP,同一IP访问频率限制为30次/每秒
一、限制所有单个ip的访问频率
1、http中的配置
http { #$limit_conn_zone:限制并发连接数 limit_conn_zone $binary_remote_addr zone=one1:10m; #limit_req_zone:请求频率 #$binary_remote_addr:以客户端IP进行限制 #zone=one:10m:创建IP存储区大小为10M,用来存储访问频率 #rate=10r/s:表示客户端的访问评率为每秒10次 limit_req_zone $binary_remote_addr zone=one2:10m rate=30r/s; }
2、server配置
server { listen 80; server_name localhost; location / { #限制并发数2 limit_conn one1 2; #burst:如果请求的频率超过了限制域配置的值,请求处理会被延迟 #nodelay:超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,这个请求会被终止,并返回503 limit_req zone=one2 burst=10 nodelay; root html; index index.html index.htm; } }
3、访问白名单设置
http { # geo:指令定义了一个白名单$limited变量,默认值为1,如果客户端ip在上面的范围内,$limited的值为0 geo $limited{ default 1; 10.0.0.140 0; #把10.0.0.140设置为白名单 10.0.0.141 0; #白名单ip,可继续添加 } #使用map指令映射搜索引擎客户端的ip为空串,如果不是搜索引擎就显示本身真是的ip #这样搜索引擎ip就不能存到limit_req_zone内存session中,所以不会限制搜索引擎的ip访问 map $limited $limit { $binary_remote_addr; ""; } limit_conn_zone $limit zone=one:20m; limit_req_zone $limit zone=one2:20m rate=30r/s; }