资讯专栏INFORMATION COLUMN

nginx中基于jsessionid的限速策略

IT那活儿 / 2696人阅读
nginx中基于jsessionid的限速策略

公司某系统经常出现短时间内同一用户大量并发访问的情况,疑似爬虫行为,该行为经常导致应用节点连接超时频发的问题。由于业务代码层对用户的限速和限制并发的能力有限,因此决定采用F5后添加nginx反向代理,通过nginx的limit_req_zone模块进行限速,通过limit_conn_zone模块来进行限制并发。

首先利用nginx的内置变量$http_x_forwarded_for获取远端的访问IP,以该变量来进行访问限速。具体访问策略如下:

http {
    include mime.types;
    default_type application/octet-stream;
    ......(常规配置忽略)
    #gzip on;
    #限速策略
    limit_req_zone $http_x_forwarded_for zone=req:100m rate=10r/m;
    limit_conn_zone $http_x_forwarded_for zone=reqconn:100m;

    upstream shsnc {
      sticky;
      server IP:PORT;
      server IP:PORT;
      server IP:PORT;
      }
    server {
       listen 80;
       ......(常规配置忽略)
        #仅对访问频繁的页面加以限速,aa表示页面URL的关键字段)
       location ~ .*(aa|bb).* {
        proxy_pass http://shsnc;
        limit_req zone=reqzone burst=5;
        limit_conn reqconn 10;

      }
}

由于用户是通过统一的出口IP来访问业务,以上配置仅对出口IP限速,无法对单个用户访问进行限速,因此导致用户访问比较多时,个别用户出现无法访问业务的情况。因此,改用$http_cookie的方式来进行限速。经过查看,发现http_cookie变量中的信息量过多,格式如下所示:

JSESSIONID=xxxxxxxxxxxxxxxxxxxxxxxx;
Hm_lvt_fxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
BIGipxxxxxxxxxxxxxxxxxxxx=xxxxxxxxxxxxxxxxxxxxx;
route=xxxxxxxxxxxxxxxxxxxxxxxxxxx;

从上面的格式分析,使用JSESSIONID的值去进行限速比较合理。因此,需要从http_cookie变量中截取JSESSIONID的值作为限速的依据。最终确定方案如下:

http {
    include mime.types;
    default_type application/octet-stream;
    ......(常规配置忽略)
    #gzip on;
    #限速策略
    limit_req_zone $jsvalue zone=req:100m rate=10r/m;
    limit_conn_zone $jsvalue zone=reqconn:100m;

    upstream shsnc {
      sticky;
      server IP:PORT;
      server IP:PORT;
      server IP:PORT;
      }
    server {
       listen 80;
       ......(常规配置忽略)
       #截取设置限速jsessionid字符串
        set $jsvalue "";
        if ( $http_cookie ~* "JSESSIONID=(.+?)(?=;)" ) {
           set $jsvalue $1;
        }
        #仅对访问频繁的页面加以限速,aa表示页面URL的关键字段)
       location ~ .*(aa|bb).* {
        proxy_pass http://shsnc;
        limit_req zone=reqzone burst=5;
        limit_conn reqconn 10;

      }
}

最终,通过截取jsessionid的值到达了限速的策略,也解决了内网用户通过统一出口IP访问业务相应影响的问题。


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129886.html

相关文章

  • 几种限流技术

    摘要:下面是几种常见的限流技术一限流算法常用的限流算法有令牌桶,漏桶令牌桶令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。 就秒杀接口来说,当访问频率或者并发请求超过其承受范围的时候,这时候我们就要考虑限流来保证接口的可用性,以防止非预期的请求对系统压力过大而引起的系统瘫痪。通常的策略就是拒绝多余的访问,或者让多余的访问排队等待服务。下面是几种常见的限流技术 一、限流算法常用的限流算...

    Warren 评论0 收藏0
  • 可能是 nginx 限速最容易理解说明

    摘要:在生产环境中,建议不要使用连接数限制单个连接的带宽限制不易过低像迅雷这种下载器的限速,可能需要别的办法注文中部分内容参考自关于的限速模块 nginx 限速研究汇报 写在前面        这两天服务器带宽爆了,情况如下图:showImg(https://segmentfault.com/img/bVUXj3?w=1884&h=352); 出于降低带宽峰值的原因,我开始各种疯狂的研究ng...

    gyl_coder 评论0 收藏0
  • 可能是 nginx 限速最容易理解说明

    摘要:在生产环境中,建议不要使用连接数限制单个连接的带宽限制不易过低像迅雷这种下载器的限速,可能需要别的办法注文中部分内容参考自关于的限速模块 nginx 限速研究汇报 写在前面        这两天服务器带宽爆了,情况如下图:showImg(https://segmentfault.com/img/bVUXj3?w=1884&h=352); 出于降低带宽峰值的原因,我开始各种疯狂的研究ng...

    Anchorer 评论0 收藏0
  • 八步部署NGINX Plus API网关

    摘要:作为一组独立的微服务之一被实现并作为一个单独的进行发布。该配置将暴露所有由网关发布的,入口位于,用协议加密保护。由网关发布的所有的所有后端服务均在中被定义。与浏览器不同,网关并不能向客户端发送带有新的命名的重定向。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自云+社区翻译社,作者ArrayZoneYour Nginx往往是构建微服务中必不可缺的一部分,从本文中...

    awesome23 评论0 收藏0
  • nginx限速不得不说事之连接数限制技巧

    摘要:但是,你的连接数限制配置为允许单个连接数,单个连接数最大带宽为。就降低单个连接数带宽吧要知道大家谁没事会用浏览器自带下载器下载呢注本文只探讨限速模块在不同业务下的限速彩蛋偶尔发现,将连接数限制为迅雷不能高速下载了。 nginx 内置模块限速怎么使用就不多说了,今天来说说连接数和单个连接数限速的事。 场景:A公司有100人,A公司只有一个公网IP,假设A公司可能有100个人同时在下载你的...

    neroneroffy 评论0 收藏0
  • nginx限速不得不说事之连接数限制技巧

    摘要:但是,你的连接数限制配置为允许单个连接数,单个连接数最大带宽为。就降低单个连接数带宽吧要知道大家谁没事会用浏览器自带下载器下载呢注本文只探讨限速模块在不同业务下的限速彩蛋偶尔发现,将连接数限制为迅雷不能高速下载了。 nginx 内置模块限速怎么使用就不多说了,今天来说说连接数和单个连接数限速的事。 场景:A公司有100人,A公司只有一个公网IP,假设A公司可能有100个人同时在下载你的...

    remcarpediem 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<