浅谈Nginx 中的两种限流方式

浅谈Nginx 中的两种限流方式

在高并发的场景下,为了保证系统的稳定性和可用性,我们需要对请求进行限流处理。Nginx 作为一款高性能的反向代理和 Web 服务器,也提供了多种限流的方式。本文主要介绍 Nginx 中的两种限流方式:ngx_http_limit_req_modulengx_http_limit_conn_module

ngx_http_limit_req_module

ngx_http_limit_req_module 模块基于令牌桶算法实现,可以让 Nginx 对接口请求进行速率限制,达到防止爬虫或定时任务产生的大量请求拦截。

开启限流

使用 limit_req_zone 指令配置共享内存区域,指定限制请求速率所需要的参数,如下:

http {
    limit_req_zone $binary_remote_addr zone=limit:10m rate=10r/s;
}

这里创建了大小为 10MB 的共享内存区域,用来限制 $binary_remote_addr 唯一标识的客户端的请求速率为 10r/s

serverlocation 块中使用 limit_req 指令启用限流,如下:

location /api {
    limit_req zone=limit burst=20 nodelay;
    proxy_pass http://upstream_server;
}

这里限制 /api 路径的请求速率,同时使用 burst 参数来保存一部分出现峰值请求时依然允许访问(如最开始接受1000个并发的请求,当第1001个请求访问时,它会等待,之后在一秒钟内的20个以内的请求是允许的),使用 nodelay 参数来让请求在达到限流时立即错误返回。

限流错误信息

当达到限流时,Nginx 会返回制定的限流错误信息。可以使用如下配置来制定错误信息:

http {
    limit_req_zone $binary_remote_addr zone=limit:10m rate=10r/s;
    limit_req_status 429;
    limit_req_log_level debug;
    limit_req_log_zone rate_limit_log;
}

server {
    location /api {
        limit_req zone=limit burst=20 nodelay;
        limit_req_status 444;
        limit_req_log_rate 1;
        limit_req_log_rate_after 1m;
        limit_req_log_level info;
        limit_req_log_zone rate_limit_log;
        proxy_pass http://upstream_server;
    } 
}

这里使用 limit_req_status 配置错误状态码,使用 limit_req_log_level 配置日志等级,使用 limit_req_log_zone 配置日志存储区域。日志可以提供限流的详细信息,并帮助分析限流情况。

ngx_http_limit_conn_module

ngx_http_limit_req_module 不同,ngx_http_limit_conn_module 模块基于连接数限制请求速率,常用于限制来自同一 IP 地址的并发请求。

开启限流

使用 limit_conn_zone 指令配置共享内存区域,指定连接数限制所需要的参数,如下:

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
}

这里创建了大小为 10MB 的共享内存区域,用来限制 $binary_remote_addr 唯一标识的客户端的连接数。

serverlocation 块中使用 limit_conn 指令启用限流,如下:

location /api {
    limit_conn conn_limit 10;
    proxy_pass http://upstream_server;
}

这里限制 /api 路径的并发连接数不能超过 10 个。

限流错误信息

ngx_http_limit_req_module 类似,使用 limit_conn_statuslimit_conn_log_level 参数来配置连接数限制错误状态码和日志等级,使用 limit_conn_log_zone 指令来配置共享内存日志区域。通常与一些防火墙配合使用,用户若是用了代理服务器,则可以伪造ip来增大攻击强度。所以该模式有一定的缺陷,需要考虑更多情况。

综上所述,ngx_http_limit_req_module 更适合限制请求速率;ngx_http_limit_conn_module 更适合限制连接数。在实际使用时,可以根据自身情况结合使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈Nginx 中的两种限流方式 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • nginx之正向代理

    1、概述 nginx的正向代理,只能代理http、tcp等,不能代理https请求。有很多人不是很理解具体什么是nginx的正向代理、什么是反向代理。下面结合自己的使用做的一个简介: 1)正向代理:      所谓正向代理就是内网服务器主动要去请求外网的地址或服务,所进行的一种行为。内网服务—访问—>外网 2)反向代理:     所谓反向代理就…

    Nginx 2023年4月12日
    00
  • 虚拟主机+mac下apache+ubuntu12.04下nginx+只要4部+wamp下

    mac+apache虚拟主机(4步解决) 下面蓝色字体的路径,各位要自己改一下啊~ 1、修改httpd.conf里面,去掉include前面注释   sudo vim /etc/apache2/httpd.conf              //window下,如果装wampserver,则地址在c:/wamp/bin/apache/apache2.4.9/…

    Nginx 2023年4月12日
    00
  • Nginx解决后端接口跨域问题

    前后端分离项目,优先使用Nginx同域部署。 不能同域部署的势必会跨域,此时则需要用Nginx给后端项目做反向代理,需额外配置: location / { # 1.针对复杂请求,的前导OPTIONS请求,采取一律放行政策,Nginx拦截后直接返回200,不打到后端接口,避免后端认证等问题(因为OPTIONS请求不支持自定义头) if ($request_me…

    Nginx 2023年4月13日
    00
  • Windows下Nginx的配置及配置文件部分介绍

    这里是“Windows下Nginx的配置及配置文件部分介绍”的完整攻略。 Windows下Nginx的配置及配置文件部分介绍 一、下载Nginx 在Nginx官网(http://nginx.org/en/download.html)上下载Windows版本的Nginx,解压到本地路径。 二、基本配置 1. 修改Nginx配置文件 打开Nginx安装目录下的c…

    Nginx 2023年5月16日
    00
  • 配置Nginx服务器展示随机首页与空白图片的方法

    下面是详细的配置Nginx服务器展示随机首页与空白图片的方法攻略: 步骤一:安装Nginx服务器 首先,需要先安装Nginx服务器。可以在官网上下载最新版本的Nginx源码进行安装,也可以使用系统自带的包管理器进行安装。 在Debian、Ubuntu等Linux系统上,可以使用apt-get命令快速安装:sudo apt-get install nginx …

    Nginx 2023年5月16日
    00
  • 如何配置Nginx的FastCGI超时时间?

    配置Nginx的FastCGI超时时间可以通过修改nginx.conf配置文件进行设置。在nginx.conf中设置fastcgi_read_timeout可以调整FastCGI超时时间,该参数默认为60秒。可以根据具体环境和需求,调整该时间参数来保证服务器稳定性和性能调优。 下面是具体步骤: 打开Nginx配置文件nginx.conf。通常位置是/etc/…

    Nginx 2023年4月19日
    00
  • Nginx支持哪些操作系统?

    Nginx是一款高性能的HTTP服务器和反向代理服务器,它可以运行在多种操作系统上。下面我们来详细讲解Nginx支持的操作系统。 1. Windows操作系统 Nginx可以运行在Windows操作系统上,支持Windows版本包括Windows NT、Windows 2000、Windows XP、Windows Server 2003、Windows V…

    Nginx 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部