• Taurus .Net Core 微服务开源框架:Admin 插件【4-8】 - 配置管理-Mvc【Plugin-Limit 接口访问限制、IP限制、Ack限制】


    前言:

    继上篇:Taurus .Net Core 微服务开源框架:Admin 插件【4-7】 - 配置管理-Mvc【Plugin-Metric 接口调用次数统计】

    本篇继续介绍下一个内容:

    1、系统配置节点:Mvc - Plugin - Limit 接口访问限制、IP限制、Ack限制:

    配置界面如下:

    限制目前提供以下三个类别的限制:

    1、Rate 访问频率限制
    2、IP IP黑名单限制
    3、Ack 请求头验证

    1、Limit.IsIgnoreLAN:是否忽略对内网IP的限制

    对三种类别限制都有效。

    2、Limit.IsIgnoreAdmin:是否忽略对后台管理【插件】界面的限制

    对三种类别限制都有效。

    3、Limit.IsIgnoreDoc:是否忽略对自动化接口测试及文档管理【插件】界面的限制

    对三种类别限制都有效。

    4、Limit.IsIgnoreMicroService:是否忽略对微服务【插件】通讯的限制

    对三种类别限制都有效。

    5、Limit.IsUseXRealIP:是否先尝试获取请求头的【X-Real-IP】为IP

    先取 request.Headers["X-Real-IP"],为空再取:request.UserHostAddress

    以上为三者通用配置,下面看各自的配置项。

    2、 Rate 配置【请求频率限制】

    配置界面如下:

     配置说明如下:

    1、Limit.Rate.IsEnable:是否启用访问频率限制功能

    通过开关启用即可,默认关闭。

    2、Limit.Rate.MaxConcurrentConnections:应用最大并发链接数

    为整个应用设置并发打开的最大 TCP 连接数,默认情况下,最大连接数不受限制。

    Kestrel 应用的该属性无法动态调整,因此追加实现,实现动态整体限速。

    3、Limit.Rate.Period:对访问Url的间隔时间(单位秒)

    配置时间段,如 Limit.Rate.Period :5(s), (单位秒)

    4、Limit.Rate.Limit:间隔时间内允许的访问次数

    配置时间段内允许的最大请求数,如 Limit.Rate.Limit :500

    5、Limit.Rate.Key:用于以key为单位的限制频率的关键参数

    如默认配置为:IP,则以用户的访问IP为单位进行限制。

    如果配置为其它参数:则以配置Request[参数]或Request.Header[参数]的获取值为访问单位进行限制。

    比如以token为用户单位,则可以配置:token

    3、IP 黑名单配置项

    配置界面如下:

     配置说明如下:

    Limit.IP.IsEnable:是否启用IP黑名单限制

    配置启用后,对应的IP名单,在Sync - Setting 同步设置里设置:

    如果IP黑名单没有开启,则填写框是灰色的,不可写状态,并有提示该配置项目前为false。

    如果配置项打开了,则填写框可用。

    按提示框,一行填写1个IP即可,可以用*号代表IP段。

    微服务的提示:

    Add ip blackname list :if current is register center of master , it will be synchronize to all servers.
    如果当前为注册中心应用,则本IP地址列表的限制,会同步到所有客户端应用,包括网关。
    而作为微服务客户端或网关,也可以通过在微服务配置列表里,找到是否允许被同步的配置开启。

    4、Ack 限制

    配置界面如下:

     配置说明如下:

    1、Limit.Ack.IsEnable:是否启用Ack验证

    用途:加强网络请求的安全性,避免请求链接被拦截或重复使用。

    1、对于客户端,比如前端、IOS、Android,可以在每次请求时,都带上ack请求头。
    
    ack 的算法,参考:Limt.Ack CreateAck() 的使用调用方式或说明。
    
    2、后端默认会验证该ack是否合法。

    2、Limit.Ack.Key:每个项目需要约定不同的key为加密项

    可以随便取,长度6个以内即可。

    3、Limit.Ack.IsVerifyDecode:是否需要验证解码

    验证时,通过解码,得到key,并和配置的key比较是否一至。

    4、Limit.Ack.IsVerifyUsed:是否验证仅使用1次

    开启时,每个ack仅能使用1次,已使用过的会被限定1定时间内不可再使用,可以避免重复请求。

    5、Limit.Ack CreateAck():这不是配置,这只是一个算法说明

    该算法用于告诉前端调用者,如果要使用本功能,需要根据本约定算法,通过各自语言,来编写算法产生ack。

    总结:

    最近在写分布式事务插件,待完成后,配合之前已完成的分布式锁,整个微服务体系将完整了。

  • 相关阅读:
    场景分析(删除文件夹下七天前的文件)
    常见的12种二次曲面方程及可视化
    C++ 字符串
    async的初始理解以及例子
    蚂蚁二面,面试官问我零拷贝的实现原理,当场懵了…
    《妃梦千年》第十四章-第十五章:重重困局,风云再起
    webService
    如何在Linux系统下安装Docker
    nginx
    达之云BI平台助力融通集团陕西军民服务社有限公司实现数字化运营
  • 原文地址:https://www.cnblogs.com/cyq1162/p/17934709.html