网站首页linux
Nginx限制IP并发连接数及每秒处理请求数
发布时间:2016-02-16 22:19:11编辑:阅读(6544)
为了防止服务器被恶意采集或ddos攻击给搞死, 所以给限个速。
这里主要使用Nginx的ngx_http_limit_req_module和ngx_http_limit_conn_module来控制访问量.
这两个模块在Nginx中已内置, 在nginx.conf文件中加入相应的配置即可使用。
如下所示(附带白名单功能),对所有的PHP页面的请求进行限速:
http { #geot和map两段用于处理限速白名单,map段映射名单到$limit,处于geo内的IP将被映射为空值,否则为其IP地址。 #limit_conn_zone和limit_req_zone指令对于键为空值的将会被忽略,从而实现对于列出来的IP不做限制 geo $whiteiplist { default 1; 127.0.0.1 0; 121.199.16.249 0; } map $whiteiplist $limit { 1 $binary_remote_addr; 0 ""; } #limit_conn_zone定义每个IP的并发连接数量 #设置一个缓存区保存不同key的状态,大小10m。使用$limit来作为key,以此限制每个源IP的链接数 limit_conn_zone $limit zone=perip:10m; #limit_req_zone定义每个IP的每秒请求数量 #设置一个缓存区reqps保存不同key的状态,大小10m。这里的状态是指当前的过量请求数。 #$limit为空值则不限速,否则对应的IP进行限制每秒5个连接请求。 limit_req_zone $limit zone=reqps:10m rate=5r/s; server { listen 80; server_name www.yoururl.com; #只对PHP页面的请求进行限速 location ~ [^/]\.php(/|$) { #对应limit_conn_zone块 #限制每IP的PHP页面请求并发数量为5个 limit_conn perip 5; #对应limit_req_zone块 #限制每IP的每秒的PHP页面请求次数为上面定义的rate的值:每秒5个请求,不延迟 limit_req zone=reqps nodelay; } } }
评论