博客
关于我
nginx限流方案的三种实现
阅读量:220 次
发布时间:2019-02-28

本文共 1421 字,大约阅读时间需要 4 分钟。

一般对外暴露的系统在促销或黑客攻击时会面临大量高并发请求,为了防止系统被瞬间流量压垮,限流是必不可少的保护手段。本文将介绍Nginx的三种限流方式及其实际应用。

Nginx限流方式

通过Nginx官方文档可以了解三种主要的限流方法:

  • limit_conn_zone

    • 配置
      limit_conn_zone $binary_remote_addr zone=one:10m;server {    ...    limit_conn one 10;    ...}

      该配置可设置客户端IP的并发连接数上限,值为10表示单IP最多可建立10个连接。

    • 测试结果
      • 使用ab工具发送20个并发请求时,成功请求数为20,返回503的失败请求数为9。
      • 需要注意的是,实际成功次数可能略低于理论值,具体原因可能与测试环境或Nginx版本有关。
  • limit_req_zone

    • 配置
      limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;server {    ...    limit_req zone=req_one burst=120;    ...}

      该配置可对客户端IP的请求频率进行限流。rate=1r/s表示每秒每个IP最多发送1个请求,burst=120则允许短期内积累120个未处理请求。

    • 特点
      • 该方法针对单个IP进行限流,且配置较为简单。
      • 请求超过限流阈值时,返回503错误状态码。
  • ngx_http_upstream_module

    • 介绍
      • 作为Nginx的负载均衡模块,ngx_http_upstream_module 在限流方面具有更高级功能。
      • max_conns参数可用于对后端服务器进行限流,适用于分布式系统。
    • 配置示例
      upstream backend 127.0.0.1:8080 max_conns=10;upstream backend 127.0.0.1:8081 max_conns=10;

      该配置可对后端服务器的连接数进行限制,max_conns=10 表示单个后端服务器最多接收10个连接。

    • 注意事项
      • max_conns 是针对单个worker_processes的,不是所有worker_processes的总和。
      • 建议在Nginx 1.9.12或更高版本上使用,旧版本可能无法启动。
  • 测试结果分析

    通过实际测试可以发现:

    • 使用limit_conn_zonelimit_req_zone时,对于单个IP的限流效果较为明显。
    • ngx_http_upstream_module 的限流效果更为稳定,尤其是在分布式系统中。
    • 测试结果表明,单台客户端的并发请求次数与限流配置密切相关。

    工具安装

    如果需要使用ab工具进行测试,可以按照以下步骤安装:

    yum install apr-utilyum install yum-utilsmkdir /optcd /optmkdir abtmpcd abtmpyum install yum-utils.noarchyumdownloader httpd-tools*rpm2cpio httpd-*.rpm | cpio -idmv

    使用命令:

    ./ab -c 100 -n 10000 http://127.0.0.0.1/index.html

    可以发送100个并发请求,共10000次请求。

    转载地址:http://thqs.baihongyu.com/

    你可能感兴趣的文章
    Openlayers中加载GeoJson文件显示地图
    查看>>
    Openlayers中加载Geoserver切割的EPSG:900913离线瓦片图层组
    查看>>
    Openlayers中加载Geoserver切割的EPSG:900913离线瓦片地图并显示
    查看>>
    Openlayers中多图层遮挡时调整图层上下顺序
    查看>>
    Openlayers中实现地图上打点并显示图标和文字
    查看>>
    Openlayers中实现地图上添加一条红色直线
    查看>>
    Openlayers中将某个feature置于最上层
    查看>>
    Openlayers中点击地图获取坐标并输出
    查看>>
    Openlayers中设置定时绘制和清理直线图层
    查看>>
    Openlayers入门教程 --- 万字长篇
    查看>>
    Openlayers各组件默认的css样式
    查看>>
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    VM16+ubuntu20.04+win10如何固定虚拟机的ip (固定IP)
    查看>>
    OpenLayers学习三:地图旋转及地图跳转到某一点的方式(以类为接口)
    查看>>
    OpenLayers学习二:点标记的添加删除和修改(以类为接口)
    查看>>
    Openlayers实战教程学习大纲及引导
    查看>>
    Openlayers实战:LayerGroup添加删除显示隐藏
    查看>>
    Openlayers实战:loadstart和loadend事件
    查看>>
    Openlayers实战:modifystart、modifyend互动示例
    查看>>
    Openlayers实战:moveend事件,利用calculateExtent获取地图左上和右下的坐标
    查看>>