您的位置:首页 > 运维架构 > Nginx

NGINX限流的一些思考

2016-07-21 10:32 447 查看
我们经常遇到这种情况, 服务器资源有限,但是客户端来的请求在不断的上涨, 为了保证一部分的请求能够正常相应, 不得不放弃一些客户端来的请求, 这个时候我们会选择行的进行一些NGINX的限流操作, 这种操作可以很大程度上缓解服务器的压力, 使其他正常的请求能够得到正常响应.

nginx 限流的策略有多种, 下面我们来聊聊常见的集中限流策略.

1. 针对固定IP进行限流, 这种策略主要用于同一个IP反复请求服务器,类似于洪水攻击或者DDos攻击,对单一ID进行限制可以有效的

对单一IP的限制的配置

vim nginx.conf
在http域内添加
limit_zone one  $binary_remote_addr  30m;
limit_req_zone  $binary_remote_addr  zone=req_one:30m rate=10r/s;


limit_zone 是对于每个 IP 分配session空间, 总共空间大小为30M one 定义了一个名称, $bin_remote_add 即为一个IP地址

limit_req_zone 是对请求频率进行限制, 10 req/second的IP允许访问

2. 针对IP限制并发请求

limit_conn perip 8;
limit_req zone=perreq nodelay;
这是设置IP并发 最多8个并发请求 同一个IP

3. 配置白名单

白名单的作用就是 对某些特定的IP不做请求限制,比如我们自己的IP,或者公司内网的IP等.

geo $whiteiplist  {
default 1;             ----  key=default,  value=1
include conf/whiteip.conf;
}

map $whiteiplist  $limit {
1 $binary_remote_addr;   --- value=1 则返回$binary_remote_addr 也就是IP 否则返回空字符串
0 "";
}


白名单放在 conf/whiteip.conf 文件里面.whitip.conf 的格式key value的格式, 就是特定的IP可以映射到空的字符串, 这样就不会对它进行限制操作了

配置白名单的 方法在官网有详细说明, 可以看这里.

GEO 用法 MAP用法

4. 负载均衡可能也算一种吧 , 当然他是把自己的流量倒到别的机子上去而已

nginx 的负载均衡 配置的字段是upstream

upstream lvs {
server localhost:8088 ;
server 192.168.1.123:8080 down;
server abc.tmc weight=2;
server server:9000 backup;
}
然后在server 里面做一个代理, 执行lvs
server {
listen 80;
location / {
proxy_pass http://lvs; }
server_name my_proxy;
}


稍微解释一下 upstream 的配置,

1. down 表示这台服务器不参与负载均衡

2. weight 默认为1 , weight 值越大, 分配的请求也越多

3. max_fails 允许请求的最多失败数目, 超过最大次数是, 返回proxy_next_upstream 模块定义的错误

4. fail_timeout : 标示失败多少次以后 就不响应了

5. back_up: 备用机 , 如果 其他机子忙或者挂了可以访问backup机子
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx