NGINX限流的一些思考 - php

原文链接:http://blog.csdn.net/soar_away/article/details/51980247


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

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

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

       对单一IP的限制的配置

[php]  view plain  copy
  1. vim nginx.conf   
  2. 在http域内添加      
  3. limit_zone one  $binary_remote_addr  30m;    
  4. 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限制并发请求

[php]  view plain  copy
  1. limit_conn perip 8;        
  2. limit_req zone=perreq nodelay;  
       这是设置IP并发 最多8个并发请求 同一个IP


     3. 配置白名单

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

[php]  view plain  copy
  1. geo $whiteiplist  {  
  2.      default 1;             ----  key=default,  value=1  
  3.      include conf/whiteip.conf;  
  4. }  
  5.   
  6. map $whiteiplist  $limit {  
  7.      1 $binary_remote_addr;   --- value=1 则返回$binary_remote_addr 也就是IP 否则返回空字符串  
  8.      0 "";  
  9. }  

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


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

GEO 用法    MAP用法

   

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

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

[php]  view plain  copy
  1. upstream lvs {   
  2.         server localhost:8088 ;   
  3.         server 192.168.1.123:8080 down;   
  4.         server abc.tmc weight=2;   
  5.         server server:9000 backup;   
  6. }   
[php]  view plain  copy
  1. 然后在server 里面做一个代理, 执行lvs  
[php]  view plain  copy
  1. server {   
  2.         listen 80;   
  3.         location / {   
  4.                 proxy_pass http://lvs;   
  5.         }   
  6.         server_name my_proxy;   
  7. }   

   稍微解释一下 upstream 的配置,

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

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

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

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

5. back_up:  备用机 , 如果 其他机子忙或者挂了可以访问backup机子


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值