从业务场景出发
在业务开发过程中,我们有个需求是:通过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
:突发请求大小的系数,主要用来定义连接的队列长度,默认是5nginx.ingress.kubernetes.io/limit-rate-after
:超过多少流量后执行限速(limit-rate),单位是KBnginx.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的配置文件中添加以下配置即可:
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限速怎么配置的详细内容。更多信息请关注PHP中文网其他相关文章!

NGINX适合高并发和低资源消耗场景,Apache适用于需要复杂配置和功能扩展的场景。 1.NGINX以高性能处理大量并发连接着称。 2.Apache以稳定性和丰富模块支持见长。选择时需根据具体需求决定。

NGINXisessentialformodernwebapplicationsduetoitsrolesasareverseproxy,loadbalancer,andwebserver,offeringhighperformanceandscalability.1)Itactsasareverseproxy,enhancingsecurityandperformancebycachingandloadbalancing.2)NGINXsupportsvariousloadbalancingm

通过Nginx配置SSL/TLS来确保网站安全,需要以下步骤:1.创建基本配置,指定SSL证书和私钥;2.优化配置,启用HTTP/2和OCSPStapling;3.调试常见错误,如证书路径和加密套件问题;4.应用性能优化建议,如使用Let'sEncrypt和会话复用。

Nginx是高性能的HTTP和反向代理服务器,擅长处理高并发连接。1)基本配置:监听端口并提供静态文件服务。2)高级配置:实现反向代理和负载均衡。3)调试技巧:检查错误日志和测试配置文件。4)性能优化:启用Gzip压缩和调整缓存策略。

Nginx缓存可以通过以下步骤显着提升网站性能:1)定义缓存区和设置缓存路径;2)配置缓存有效期;3)根据不同内容设置不同的缓存策略;4)优化缓存存储和负载均衡;5)监控和调试缓存效果。通过这些方法,Nginx缓存能减少后端服务器压力,提升响应速度和用户体验。

使用DockerCompose可以简化Nginx的部署和管理,通过DockerSwarm或Kubernetes进行扩展是常见的做法。1)使用DockerCompose定义和运行Nginx容器,2)通过DockerSwarm或Kubernetes实现集群管理和自动扩展。

Nginx的高级配置可以通过服务器块和反向代理实现:1.服务器块允许在一个实例中运行多个网站,每个块独立配置。2.反向代理将请求转发到后端服务器,实现负载均衡和缓存加速。

Nginx性能调优可以通过调整worker进程数、连接池大小、启用Gzip压缩和HTTP/2协议、使用缓存和负载均衡来实现。1.调整worker进程数和连接池大小:worker_processesauto;events{worker_connections1024;}。2.启用Gzip压缩和HTTP/2协议:http{gzipon;server{listen443sslhttp2;}}。3.使用缓存优化:http{proxy_cache_path/path/to/cachelevels=1:2k


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

记事本++7.3.1
好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。