Nginx中limit_req模块和limit_conn模块的使用

 更新时间:2024年05月26日 16:25:34   作者:莽村宏伟  
本文主要介绍了Nginx中limit_req模块和limit_conn模块的使用,通过limit_req和limit_conn模块,可以有效实现精确的请求频率和连接数控制,下面就来具体介绍一下

引言

在高流量场景下,良好的限流和连接控制策略至关重要,以防止服务器过载,确保服务稳定性和高可用性。Nginx 提供了 limit_req 和 limit_conn 模块,用以实现请求频率和并发连接数的限制。本文将详细介绍这两个模块的生效阶段和生效范围,并提供实际配置示例,解释相关指令的作用。

limit_req模块

功能介绍

limit_req 模块用于限制客户端请求的频率,以防止单一客户端占用过多服务器资源,提升稳定性。

生效阶段

limit_req 在请求处理的“访问阶段(access phase)”生效。它在接收到完整的 HTTP 请求后,即将转发到后端之前进行限流。

生效范围

  • http:全局范围,作用于所有 server 和 location。
  • server:作用于特定 server block 内的所有 location。
  • location:作用于特定 URL 路径的 location。

配置示例和注释

http {
  # 定义一个共享内存区域,用于存储请求状态
  # $binary_remote_addr 是客户端的 IP 地址
  # zone=one:10m 定义名为 "one" 的共享内存区域,大小为 10MB
  # rate=1r/s 限制请求速率为每秒 1 个请求
  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

  server {
    listen 80;
    server_name example.com;

    location /api/ {
      # 应用请求频率限制配置
      # zone=one 引用名为 "one" 的共享内存区域
      # burst=5 允许短时间内突发最多 5 个请求
      # nodelay 如果设置该参数,突发请求也会立即执行
      limit_req zone=one burst=5 nodelay;

      # 代理到后端服务
      proxy_pass http://backend_service;
    }
  }
}

参数解析

  • limit_req_zone:声明一个限制请求的共享内存区域。
  • limit_req:在指定的区域内启用请求频率限制。
  • burst:允许的突发请求数量。
  • nodelay:不延迟处理突发请求。

limit_conn模块

功能介绍

limit_conn 模块用于限制每个客户端的并发连接数,以防止资源被单一客户端耗尽。

生效阶段

limit_conn 在连接处理的“访问阶段(access phase)”生效。当服务器建立新连接时,立即根据配置进行并发连接限制。

生效范围

  • http:全局范围,作用于所有 server 和 location。
  • server:作用于特定 server block 内的所有 location。
  • location:作用于特定 URL 路径的 location。

配置示例和注释

http {
  # 定义一个共享内存区域,用于存储连接状态
  # $binary_remote_addr 是客户端的 IP 地址
  # zone=addr:10m 定义名为 "addr" 的共享内存区域,大小为 10MB
  limit_conn_zone $binary_remote_addr zone=addr:10m;

  server {
    listen 80;
    server_name example.com;

    location /api/ {
      # 应用并发连接限制配置
      # addr 引用名为 "addr" 的共享内存区域
      # 10 限制每个客户端最多允许 10 个并发连接
      limit_conn addr 10;

      # 代理到后端服务
      proxy_pass http://backend_service;
    }
  }
}

参数解析

  • limit_conn_zone:声明一个限制连接数的共享内存区域。
  • limit_conn:在指定的区域内启用连接数限制。

日志和状态设置

limit_conn_log_level

limit_conn_log_level 用于设置当连接被限制时的日志记录级别。

可选值

  • info:基本信息记录。
  • notice:详细信息记录。
  • warn:警告信息记录(推荐)。
  • error:错误信息记录。

limit_conn_status

limit_conn_status 用于设置当连接被限制时返回的 HTTP 状态码。

常用状态码

  • 503:服务不可用(推荐)。
  • 其他自定义状态码:根据具体需求设置。

完整配置示例和注释

http {
  # 为 limit_req 和 limit_conn 定义共享内存区域
  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
  limit_conn_zone $binary_remote_addr zone=addr:10m;

  # 设置限制被触发时的日志级别和返回状态码
  limit_conn_log_level warn;
  limit_conn_status 503;

  server {
    listen 80;
    server_name example.com;

    location /api/ {
      # 应用请求频率限制配置
      limit_req zone=one burst=5 nodelay;

      # 应用并发连接限制配置
      limit_conn addr 10;

      # 代理到后端服务
      proxy_pass http://backend_service;
    }
  }
}

解析与说明

  • limit_req_zone 和 limit_conn_zone:分别定义请求和连接限制的共享内存区域。
  • limit_req 和 limit_conn:在指定的区域内启用请求频率和连接数限制。
  • limit_conn_log_level 和 limit_conn_status:分别设置连接限制触发时的日志级别和返回状态码。

结论

通过 Nginx 的 limit_req 和 limit_conn 模块,可以有效实现精确的请求频率和连接数控制。这不仅可以防止恶意请求和流量激增对服务器的冲击,还能提高服务的稳定性和可用性。结合日志级别和状态码设置,可以轻松监控和管理限流情况。

到此这篇关于Nginx中limit_req模块和limit_conn模块的使用与区别的文章就介绍到这了,更多相关Nginx limit_req和limit_conn内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用nginx设置代理服务器

    使用nginx设置代理服务器

    今天小编就为大家分享一篇关于使用nginx设置代理服务器,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 详解Nginx反向代理实现Kibana登录认证功能

    详解Nginx反向代理实现Kibana登录认证功能

    这篇文章主要介绍了详解Nginx反向代理实现Kibana登录认证功能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 为Nginx添加SPDY功能

    为Nginx添加SPDY功能

    我也开始尝试着给自己的论坛加上SPDY协议,WEB服务器本人选择的是nginx,在过去,Nginx并没有内置SPDY协议,需要打开的话还要下载开发版然后手动编译,很不方便
    2014-12-12
  • nginx服务器access日志中大量400 bad request错误的解决方法

    nginx服务器access日志中大量400 bad request错误的解决方法

    这篇文章主要介绍了nginx服务器access日志中大量400 bad request错误的解决方法,本文结论是空主机头导致的大量400错误日志,关闭默认主机的日志记录就可以解决问题,需要的朋友可以参考下
    2015-01-01
  • Nginx部署SSL证书的过程

    Nginx部署SSL证书的过程

    SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本,这篇文章主要介绍了Nginx部署SSL证书的相关知识,需要的朋友可以参考下
    2022-10-10
  • ubuntu 下的nginx服务器配置详解

    ubuntu 下的nginx服务器配置详解

    这篇文章主要介绍了ubuntu 下的nginx服务器配置详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • nginx配置支持https的示例代码

    nginx配置支持https的示例代码

    这篇文章主要介绍了nginx配置支持https的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Centos7.x下Nginx安装及SSL配置与常用命令详解

    Centos7.x下Nginx安装及SSL配置与常用命令详解

    这篇文章主要介绍了Centos7.x下Nginx安装及SSL配置与常用命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • NGINX服务器配置404错误页面转向的方法

    NGINX服务器配置404错误页面转向的方法

    这篇文章主要为大家详细介绍了NGINX服务器配置404错误页面转向的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 详解nginx实现ssl反向代理实战

    详解nginx实现ssl反向代理实战

    本篇文章主要介绍了nginx实现ssl反向代理实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论