第十一节——限制访问代理的HTTP资源

阅读:395 2019-03-19 15:01:23 来源:新网

使用nginx可能的限制:

注意,ip地址可以在nat设备后共享,因此,应该明确的使用ip地址限制。

为了限制连接数,首先,使用limit_conn_zone指令定义键和设置共享内存区域的参数(worker进程使用该区域共享计数器)。第一个参数,指定计算键的表达式。第二个参数,指定区域名称和大小。

limit_conn_zone$binary_remote_addresszone=addr:10m;

接着,在location、虚拟服务器或http上下文中使用limit_conn指令。第一个参数指定共享内存区域的名称,第二个参数指定每个键允许的连接数。

location/download/{limit_connaddr1;}

这里,基于ip地址限制连接数,因为$binary_remote_address变量用作键。使用$server_name变量可以限制指定服务器的连接数:

http{limit_conn_zone$server_namezone=servers:10m;server{limit_connservers1000;}}3限制请求频率

为了限制请求频率,首先,使用limit_req_zone指令设置键和保存计数器的共享内存区域。

limit_req_zone$binary_remote_addrzone=one:10mrate=1r/s;

以相同的方式使用limit_req_zone指定键。rate参数可以指定每秒请求数(r/s)或每分钟请求数(r/m)。后者用于指定每秒小于一个请求。例如,每秒半个请求的频率使用30r/m设置参数。

一旦定义共享内存,在虚拟服务器或location(或全局)中使用limit_req指令限制请求频率:

location/search/{limit_reqzone=oneburst=5;}

这里,nginx每秒只处理该location的最多一个请求。如果请求频率超过限定值,请求被放入队列,延迟处理,在这种方式下,总体频率不大于指定值。burst参数设置等待处理的最大请求数。对于请求突发限制,nginx使用503错误响应。

如果在请求突发期间不希望延迟处理,添加nodelay参数。

limit_reqzone=oneburst=5nodelay;4限制带宽

使用limit_rate指令限制每个连接的带宽:

location/download/{limit_rate50k;}

设置一个客户端能够通过一个连接每秒最多下载50kb内容。然而,客户端可以打开多个连接。因此,如果为了防止下载速度大于指定值的目的,也应该限制连接数。例如,每个ip地址一个连接:

location/download/{limit_connaddr1;limit_rate50k;}

只有在客户端下载了一定数量的数据之后才强制执行该限制,使用limit_rate_after指令。允许客户端快速下载一定量的数据(例如,文件头——影片索引),再限制剩下数据下载的频率(用户观看的电影,不下载)是合理的。

limit_rate_after500k;limit_rate20k;

下面例子显示限制连接数和带宽的联合配置。每个客户端地址最大允许的连接数设置为5个连接,适合大多数情况,因为现代浏览器通常同时对外开放3个连接。同时,服务下载的location只允许一个连接:

http{limit_conn_zone$binary_remote_addresszone=addr:10mserver{root/www/data;limit_connaddr5;location/{}location/download/{limit_connaddr1;limit_rate1m;limit_rate50k;}}}

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服