发布于2026-07-13 阅读(0)
扫一扫,手机访问
Nginx的限速模块,确实是个好东西。对于很多站长或运维来说,面对突发流量或恶意攻击,除了升级硬件,最直接有效的办法就是在Nginx层面做流量控制。今天就来聊聊,具体怎么用Nginx的几个核心模块,把流量管得服服帖帖。

ngx_http_limit_req_module搞定请求速率这个模块算是老牌选手了,专门用来限制每个客户端的请求速率。防止恶意刷接口、防爬虫、防DDoS,它都能派上用场。核心思路其实很简单:用共享内存记录每个IP的请求,然后按规则计数。
http {
# 定义一个共享内存区域,用来存储请求计数器
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
location / {
# 应用限速规则
limit_req zone=mylimit burst=5 nodelay;
...
}
}
}
仔细拆解一下:
$binary_remote_addr:用客户端的IP地址作为键,区分不同访客。zone=mylimit:10m:定义一个名为mylimit的内存区域,大小10MB。这个区域用来存储所有IP的请求状态。rate=1r/s:每秒最多允许1个请求。这个值可以根据业务场景调整。burst=5:允许突发5个请求的“缓冲池”。如果请求瞬间超过限制,但不超过5个,可以排队处理。nodelay:加上这个参数后,突发请求不会被延迟,而是直接处理。但超过burst的部分,直接返回503。如果去掉nodelay,那多出来的请求就会被排队,比如每秒只能处理1个,多余的请求会等0.5秒、1秒后再处理。哪种策略更合适,取决于你的业务是追求响应速度还是追求公平。
ngx_http_limit_conn_module控制并发连接数请求速率是一回事,并发连接又是另一回事。有些场景下,一个IP突然建立成百上千个并发连接,不用想也知道是不正常的。这时候就需要ngx_http_limit_conn_module出场了。
http {
# 定义一个共享内存区域,用来存储连接计数器
limit_conn_zone $binary_remote_addr zone=connlimit:10m;
server {
location / {
# 应用连接数限制规则
limit_conn connlimit 10;
...
}
}
}
参数解释:
zone=connlimit:10m:同样,定义一个10MB的共享内存区域,用来记录每个IP的连接数。limit_conn connlimit 10:每个IP最多允许10个并发连接。超过这个数,后续的连接请求会被直接拒绝。值得注意的是,这个模块统计的是当前正在处理的连接数,不是累计请求数。所以对于长连接(比如WebSocket或Keepalive)需要特别小心,别把正常用户给误伤了。
ngx_http_limit_rate_module限制下载速度如果你是在做文件下载、视频流媒体服务,或者为了节省带宽,限制单个客户端的下载速度是个好办法。这个模块的配置极其简单,一行搞定。
http {
server {
location /download/ {
# 设置下载速度限制为128KB/s
limit_rate 128k;
...
}
}
}
参数说明:
limit_rate 128k:限制每个请求的下载速度为128KB/s。这个值可以按需调整,比如512k、1m等等。这个模块有个妙用:可以配合limit_rate_after指令,比如先让用户快速下载前1MB,之后再限制速度。这样既保证了用户体验,又控制了后续流量。
现实场景中,很少有单一策略就能解决所有问题的。大多数情况下,需要把上述几个模块组合起来,形成一道完整的流量控制防线。
http {
# 请求速率限制
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
# 并发连接数限制
limit_conn_zone $binary_remote_addr zone=connlimit:10m;
server {
location / {
# 同时应用请求速率和连接数限制
limit_req zone=mylimit burst=5 nodelay;
limit_conn connlimit 10;
...
}
location /download/ {
# 下载区域,重点控制速度
limit_rate 128k;
...
}
}
}
这样的配置,可以同时限制每个IP的请求频率、并发连接数,以及对特定目录的下载速度。对于大多数中小型网站来说,已经算是比较完善的防护了。
zone的大小。总的来说,通过合理组合这几个模块,Nginx完全可以成为一个流量控制的“守门员”。无论是应对突发流量,还是防范恶意攻击,都能提供不错的效果。当然,没有银弹,具体策略还是要根据业务场景来调整。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8