商城首页欢迎来到中国正版软件门户

您的位置:首页 >怎样用Nginx限制访问频率

怎样用Nginx限制访问频率

  发布于2026-04-21 阅读(0)

扫一扫,手机访问

在Nginx中实现访问频率限制

管理Web服务器时,一个常见需求是控制客户端的请求速率,防止滥用或DDoS攻击。Nginx提供了一个非常高效的模块——ngx_http_limit_req_module,专门用来处理这类问题。下面,我们就来详细拆解一下如何配置它。

第一步:确认模块可用性

在开始配置之前,得先确保你的Nginx已经编译并包含了这个限流模块。检查方法很简单,在终端执行以下命令:

nginx -V 2>&1 | grep --color=auto 'http_limit_req'

如果输出结果中包含--with-http_limit_req_module,那么恭喜,你可以直接进入下一步。如果没有,你可能需要重新编译Nginx来加入这个模块。

第二步:编辑配置文件

  1. 打开你的Nginx主配置文件,通常路径是/etc/nginx/nginx.conf。如果你使用了站点级别的配置,也可能是/etc/nginx/sites-a vailable/目录下的某个文件。
  2. 我们需要在配置文件中添加两个核心指令。

第三步:核心配置详解

配置通常分两步走:先定义一个共享内存区域来记录状态,再在具体的位置应用规则。

http {
    # ... 其他http模块配置
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

    server {
        # ... 服务器配置
        location / {
            # ... 位置块配置
            limit_req zone=mylimit burst=5 nodelay;
            # ...
        }
    }
}

我们来逐一解读这几个参数:

  • limit_req_zone:这是定义限制区域的指令。$binary_remote_addr是关键,它使用客户端的二进制IP地址作为识别键,比字符串形式更节省空间。
  • zone=mylimit:10m:这里创建了一个名为mylimit的共享内存区,大小为10兆字节。这个空间用来存储所有IP的访问状态,大小需要根据你的预期访问量来估算。
  • rate=1r/s:这设定了基准速率,即每秒1个请求。这是限制的核心阈值。

接下来,在location块中,我们用limit_req指令将定义好的规则应用起来。

  • zone=mylimit:指定使用我们刚才创建的那个区域。
  • burst=5:这个参数很实用,它允许处理短时间内的突发流量。想象一下,当用户快速刷新页面时,前5个超出基准速率(1r/s)的请求会被放入一个队列中等待处理,而不是直接被拒绝。
  • nodelay:这个选项意味着,对于突发队列中的请求,只要队列没满,就立即处理,而不强制延迟。如果不加nodelay,超出速率的请求会被均匀地延迟处理,以保证严格的平均速率。

第四步:应用并测试配置

  1. 保存配置文件后,务必先测试语法是否正确,这是避免线上服务中断的好习惯:
sudo nginx -t

如果看到“syntax is ok”的提示,就可以放心地重新加载配置了:

sudo nginx -s reload

至此,配置就生效了。超过限制(基准速率+突发容量)的请求,默认会收到一个503(Service Temporarily Una vailable)状态码。你可以根据业务需求,结合limit_req_status指令自定义这个返回状态码。

总的来说,ngx_http_limit_req_module通过简洁的配置,为服务器提供了一层有效的流量整形和保护机制,是运维工具箱中不可或缺的一件利器。

本文转载于:https://www.yisu.com/ask/1380806.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注