`

一次限流引发的思考及nginx限流实现

 
阅读更多

 

前言:

      nginx现在应用越来越广,nginx不仅可以做七层代理,也可以做四层代理,随着业务人数的增多,nginx处理请求的能力也是越来越好,但是后端的请求,对数据库的压力就会增大,所以当用户请求数量过大时,避免对数据库造成毁灭性的影响,只有对nginx进行降级处理。比如限流,或者增加tomcat应用,扩大内存等等,这篇文章主要是讲一些nginx限流的配置参考。

     限流主要是看怎么限流,一般是限制访问请求数,不同系统的访问请求数不同,经查资料,可以查看nginx的每秒的请求数,作为参考。

     nginx status 需要用到nginx自身的模块with-http_stub_status_module,这个可以用nginx -V来检查模块使用情况(nginx -v只显示nginx版本,而nginx -V 不仅显示版本号,还显示使用的模块)

 

1. nginx 配置

 

location /status {
      stub_status on;
      access_log off;
       #allow 127.0.0.1;允许哪个ip可以访问

 }

 

2. nginx -s reload 重启nginx

浏览器输入:http://localhost/status

Active connections: 649 
server accepts handled requests
 76085213 76085213 218901053 
Reading: 0 Writing: 59 Waiting: 590

第1列:当前与http建立的连接数,包括等待的客户端连接:649

第2列:

接受的客户端连接总数目:76085213 

处理的客户端连接总数目:76085213 

客户端总的请求数目:218901053 

第3列:

当前,nginx读请求连接

当前,nginx写响应返回给客户端

目前有多少空闲客户端请求连接

注:红色部分是要特别注意的情况数目,你刷新页面,可以看到这个数值请求情况,这个数值就是nginx总的请求数,你每秒刷新一次,能大概算出每秒的请求数量

 

3,配置限流

限流分两种,一种是限制ip的的并发请求数,一种是限制每秒请求处理数

1)限制ip的并发请求数:

ngx_http_limit_conn_module  模块  这个模块依赖realIp模块取到的真实ip

一般nginx会放置到架构的最前端,相当于是请求先到nginx,nginx直接反向代理到具体的tomcat,这种情况下realip模块可以获取到客户端最真实的ip

另一种是http请求先请求到F5机器,然后分发到nginx,最后nginx再反向代理到具体的tomcat服务器

这种情况下,nginx获取到的ip其实是F5的ip,不是客户端的真实ip

2)限制每秒请求处理数:

ngx_http_limit_req_module  模块,这个模块也依赖于realIp模块取到的真实ip

模块原理实现的漏斗算法,200r/s,是最后的一个平均的效果,逐步平滑。

算法介绍:https://baike.baidu.com/item/leaky%20bucket/5639070

 

将下面代码配置到http模块中

        proxy_intercept_errors on;

        limit_req_zone $binary_remote_addr zone=mylimit:10m rate=200r/s;  

        limit_conn_status 503;  #超出限制时,返回状态码

location模块中增加 limit_req zone=mylimit nodelay;

burst默认等于0

• nodelay 对burst中的请求不再采取延时处理的做法,而是立刻处理。

中200代表的就是每秒的请求数量,这个值参考的就是status中的请求数量

 

注意:限流方案配置后,会出现,已经登录的用户,再次发送请求的时候,会出现503错误,最好跟业务沟通之后再上限流方案。

 

 

 

 

 

 

分享到:
评论

相关推荐

    分布式限流面试专题系列:Nginx+zookeeper.zip

    本专题将深入探讨Nginx与Zookeeper结合实现的分布式限流策略,帮助理解如何在面试中有效地展示这方面的知识。 1. **Nginx**:Nginx是一款高性能的HTTP和反向代理服务器,广泛用于负载均衡、缓存和安全防护等场景。...

    nginx限流.xmind

    nginx限流

    分布式限流面试专题系列:Nginx+zookeeper.rar

    例如,Nginx的`limit_req`模块可以实现基于滑动窗口的平均速率限流,通过设置`rate`参数来限制每秒请求数。此外,还可以通过`zone`定义共享内存区,存储每个IP地址的请求计数,实现IP级别的限流。Nginx还支持突发...

    web服务器如何限流-nginx,tomcat服务器如何限制流量

    本文将深入探讨如何在Nginx和Tomcat这两个常见的Web服务器上实现限流。 首先,我们关注Nginx。Nginx以其高效的反向代理和负载均衡能力而闻名,同时也提供了内置的限流模块。通过修改`nginx.conf`配置文件,我们可以...

    nginx限流配置.docx

    Nginx 限流配置 Nginx 限流配置是指通过 Nginx 服务器对用户的访问进行限制,以避免服务器受到攻击或过载。这种配置可以防止恶意用户对服务器的攻击,保护服务器的安全和性能。 限流配置 在 Nginx 配置文件中,...

    基于Redis实现分布式应用限流的方法

    以下是一个基于Redis的分布式限流实现,利用了Redis的数据结构——有序集合(Sorted Set)来创建令牌桶算法的一个变体: ```java public class RedisRateLimiter { private static final String BUCKET = "BUCKET...

    nginx实现按国家/地域封禁和按ip频率限流能力

    centos下nginx实现按国家/地域封禁、按ip频率限流能力、ngx_http_geoip2_module、ngx_http_geoip_module的区分,docker部署,基于最新版1.21 nginx。ngx_http_geoip2_module 支持指定字段来进行ip解析,而ngx_...

    nginx 如何实现读写限流的方法

    Nginx 提供了内置的限流模块 `limit_req`,使得我们可以轻松地实现读写限流。下面我们将详细介绍 Nginx 如何通过 `limit_req` 模块实现这一功能。 ### 1. 限流原理 `limit_req` 模块基于令牌桶算法(Token Bucket ...

    Nginx教程 防御ddos,用户访问控制,限流.zip

    **Nginx 教程:防御DDoS、用户访问控制与限流** Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于Web服务领域,以其高效、稳定和灵活的配置而闻名。本教程将围绕如何利用Nginx进行DDoS防御、用户访问控制以及...

    详解Nginx限流配置

    Nginx的限流机制是基于漏桶算法实现的,其核心思想是通过队列缓存暂时无法处理的请求,然后以固定的速率依次处理这些请求,以此来平滑流量,防止流量峰值导致的系统过载。 在配置Nginx限流时,还应注意阅读官方文档...

    rk3399移植 nginx +rtmp实现流媒体服务器

    rk3399移植 nginx +rtmp实现流媒体服务器,实现rk3399推送网络视频流(rtmp、https),使用时在根目录下新建/home/build 文件夹,解压后进入/home/build/build/conf,打开nginx.conf 添加rtmp配置(网上很多根据自己...

    用FFmpeg+nginx+rtmp搭建环境实现推流.docx

    FFmpeg、nginx、rtmp三者结合可以实现一个强大且高效的流媒体服务器,下面是它们的详细介绍和搭建过程。 FFmpeg FFmpeg是一款功能强大的开源命令行工具,能够处理视频和音频文件。它可以用于视频和音频的编解码、...

    一步步安装nginx搭建流媒体服务器

    一步步安装nginx搭建流媒体服务器的所有软件打包; nginx-1.8.0.tar.gz :应用服务器主程序 nginx_mod_h264_streaming-2.2.7.tar.gz :MP4流媒体支持模块。 openssl-1.0.1c.tar.gz :openssl库 pcre-7.9.tar.gz :...

    LINUX-nginx

    6. **URL重写**:Nginx提供了强大的URL重写规则,可以对用户请求的URL进行转换,优化SEO,或实现动态URL与静态内容的匹配。 7. **限速限制**:Nginx可以通过设置限速策略,限制单个IP或所有用户的访问速度,防止...

    nginx(rtmp,hls)视频流分发

    本文将深入探讨`Nginx`如何利用`RTMP`和`HLS`协议实现视频流分发,并重点关注在`Win32`环境下设置`Nginx`视频直播服务器的方法。 首先,让我们了解`Nginx`的基本概念。`Nginx`是一个高性能、高并发的HTTP和反向代理...

    nginx限流方案的实现(三种方式)

    **Nginx限流方案详解** 在面对高并发流量或者恶意攻击时,系统保护成为了一个重要的议题。Nginx作为一款高性能的HTTP和反向代理服务器,提供了多种限流策略来确保系统的稳定性和安全性。本文将详细介绍Nginx实现限...

Global site tag (gtag.js) - Google Analytics