服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - nginx ingress限速那些事浅析

nginx ingress限速那些事浅析

2023-04-14 14:32烂笔头 Nginx

这篇文章主要为大家介绍了nginx ingress限速的一些知识的浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

从业务场景出发

在业务开发过程中,我们有个需求是:通过filebrowser提供的下载服务需要进行限速处理。如用户在通过filebrowser进行文件下载的时候,需要限制每个用户的下载速率。从这个需求扩展开来,也可以限定特定用户的下载速率。

为了实现这个业务需求,结合我们当前的技术栈(k8s + nginx ingress),可以通过配置相应的nginx参数来实现。

什么是限速?

限速,顾名思义,是限制速率。

这里的速率可以是:

  • 单个用户在单位时间内访问资源的频率,
  • 也可以是单个ip在单位时间内访问资源的频率,
  • 还可以是单位时间内指定连接的传输速率。

通常,后者的业务场景存在于下载限速

为什么要限速?

限速的本质是保证公平。

在带宽资源有限的情况下,尽可能地保障每个用户能被合理的分配足够的带宽值。也可以在带宽资源有限的情况下,通过限速的方式,服务更多的用户。

另外,限速还可以大大缓解分布式拒绝服务攻击(DDOS)带来的影响。

在nginx ingress的yaml文件里,都有哪些配置?

Nginx ingress的限速配置基本可以在ingress的nginx.ingress.kubernetes.io注解里可以找到。

下面,对和限速相关的注解进行逐一解读:

  • nginx.ingress.kubernetes.io/limit-connections:单个IP地址可以同时并发连接的个数。如果超过连接并发数,则返回503错误。
  • nginx.ingress.kubernetes.io/limit-rps:限制单个IP每秒钟的请求数(limit request per second)。超出限制,返回503错误。需要注意的是,并不是立刻超出该配置设定的值就马上出现503错误,nginx允许在一定时间范围内的突发请求数的存在(突发请求数 = limit-rps * limit-burst-multiplier)。那么什么时候会出现503呢?这就要从nginx的限流模型展开了。nginx的限流模型就是一个队列(参考线程池的队列模型模型),限流的max连接数=队列处理的能力+队列长度,即max-connections-per-second=limit-rps+limit-rps*limit-burst-multiplier。
  • nginx.ingress.kubernetes.io/limit-rpm:同limit-rps,不过limit-rpm的优先级高于limit-rps,也就是说当同时设置了limit-rpm和limit-rps,以limit-rpm为准。不过当limit-connections也设置了,那么limit-connections的优先级最高。
  • nginx.ingress.kubernetes.io/limit-burst-multiplier:突发请求大小的系数,主要用来定义连接的队列长度,默认是5
  • nginx.ingress.kubernetes.io/limit-rate-after:超过多少流量后执行限速(limit-rate),单位是KB
  • nginx.ingress.kubernetes.io/limit-rate:单个连接每秒的限速值,单位是KB。
  • nginx.ingress.kubernetes.io/limit-whitelist:设定IP白名单,在该白名单内的IP不被限速,支持CIDR,多个IP可用逗号隔开。

注意

  • 当limit-connections, limit-rps, limit-rpm同时设定时,优先级是limit-connections>limit-rpm>limit-rps
  • limit-rate-after和limit-rate生效的前提是 nginx.ingress.kubernetes.io/proxy-buffering: "on"
  • 以上提到的IP,需要区分来自SLB还是真实的用户IP,获取真实的用户IP,可以参考这里

4. 针对业务需求的方案

搞清楚了这些知识点后,再回到我们的业务本身,可以简单的在业务ingress的配置文件中添加以下配置即可:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ...
    nginx.ingress.kubernetes.io/proxy-buffering: on
    nginx.ingress.kubernetes.io/limit-rate: 10 # 单位是KB
  name: xxx
  namespace: yyy
spec:
  ingressClassName: nginx
  rules:
    ...

参考:

以上就是nginx ingress限速那些事浅析的详细内容,更多关于nginx ingress限速的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7142870911908053022

延伸 · 阅读

精彩推荐
  • Nginxnginx前后端同域名配置的方法实现

    nginx前后端同域名配置的方法实现

    这篇文章主要介绍了nginx前后端同域名配置的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    JAVA拾贝5382021-05-20
  • NginxNginx实现https网站配置代码实例

    Nginx实现https网站配置代码实例

    这篇文章主要介绍了Nginx实现https网站配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    ノGHJ13242020-12-29
  • Nginx使用Nginx实现灰度发布的使用

    使用Nginx实现灰度发布的使用

    这篇文章主要介绍了使用Nginx实现灰度发布的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    weifengCorp7282020-07-21
  • Nginxnginx 匹配规则小总结(推荐)

    nginx 匹配规则小总结(推荐)

    这篇文章主要介绍了nginx 匹配规则小总结及nginx配置proxy_pass路径带/问题,需要的朋友可以参考下 ...

    klvchen6022019-12-25
  • Nginxnginx降权与匹配php详细讲解

    nginx降权与匹配php详细讲解

    大部分网站开发语言都要运行在服务器,比如主流的nginx、apache等等,下面这篇文章主要给大家介绍了关于nginx降权与匹配php的相关资料,需要的朋友可以参考下...

    戲子 鬧京城°ぃ8512023-01-27
  • Nginxnginx支持codeigniter的pathinfo模式url重写配置写法示例

    nginx支持codeigniter的pathinfo模式url重写配置写法示例

    这篇文章主要介绍了nginx支持codeigniter的pathinfo模式url重写配置写法示例,pathinfo模式是一种开发框架都爱用的路由模式,需要的朋友可以参考下 ...

    junjie2552019-10-21
  • Nginx如何让Nginx支持中文文件名具体设置步骤

    如何让Nginx支持中文文件名具体设置步骤

    想让Nginx支持中文文件名首先得让你的系统有中语语言包,设置前可以执行:locale 看一下,如果显示是en_US.UTF-8,即是正常,不用按下面的步骤设置 ...

    Nginx配置网5752019-10-15
  • NginxNginx隐藏版本号与网页缓存时间的方法

    Nginx隐藏版本号与网页缓存时间的方法

    这篇文章主要介绍了Nginx优化之隐藏版本号与网页缓存时间的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 ...

    caozhengtao12132332020-01-20