Nginx 限流及WAF

Nginx 提供了两种限流手段:一是控制速率,二是控制并发连接数。
控制速率是按: limit_req_zone来限制单位时间内容的请求书,即速率限制。
控制并发数: 利用limit_conn_zone和limit_conn两个指令来控制并发数.

1.ngx_http_limit_conn_module

ngx_http_limit_conn_modul: 基于key($binary_remote_addr或者server_name),对网络总连接数进行限流。
http{
# 针对客户端地址,进行连接数限制
limit_conn_zone $binary_remote_addr zone=perip:10m;
# 针对域名,进行连接数限制
limit_conn_zone $server_name zone=perserver:10m;
limit_conn_log_level error;
limit_conn_status 503;

 

复制代码
server {
# 每个IP仅允许发起10个连接
limit_conn perip 10;
# 每个域名仅允许发起100个连接
limit_conn perserver 100;
}
limit_conn_zone: 用于配置限流key及存放限流key对应的共享内存大小;
limit_conn_log_level: 请求被限流后的日志级别,默认error级别;
limit_conn_status:请求被限流后返回的http状态码,默认503;
limit_conn:配置存放key的共享内存区域名称和指定key的最大连接数;
复制代码

 

2. ngx_http_limit_req_module限流
   ngx_http_limit_req_module:基于key(基本上为客户端IP地址)对请求进行限流(基于漏桶算法)。

   

复制代码
http{
# 固定请求速率为1个请求/每秒
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req_log_level error;
limit_req_status 503;

server {
location /search/ {
# 漏桶容量为5
limit_req zone=one burst=5 nodelay;
}
}
}
复制代码

limit_req_zone:配置限流key,存放key的共享内存区域大小,以及固定请求速率;
limit_req_log_level: 参照limit_conn_log_level;
limit_req_status:参照limit_conn_status;
limit_req: 配置限流区域,漏桶容量(突发容量,默认为0),是否采用延迟模式(默认延迟);

3.lua-resty-limit-traffic
 使用场景比较固定的情况下,推荐使用自有模块。
 需求比较复杂时(产品要求动态化设置时),建议采用lua-resty-limit-traffic实现限流请求(较新的openresty已自动包含此库,无需手动引入)。

 lua-resty-limit-traffic模块主要由以下四个子模块构成:

resty.limit.req:基于漏桶算法对请求进行限流操作;
resty.limit.count:基于固定窗口实现流量控制;
resty.limit.conn:实现请求限流以及流量整形;
resty.limit.traffic:提供聚合器,以便整合resty.limit.req、resty.limit.count以及resty.limit.conn。

4.ngx_stream_limit_conn_module
此模块在TCP/UDP会话的Pre-access阶段被处理。

我的配置

# ngx_http_limit_conn_module 针对客户端地址,进行连接数限制
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
limit_conn perserver 350;
limit_conn perip 50;
limit_rate 512k;
limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=60r/s;

以为仅对部分API的保护,如果需要更多针对网站洪泛攻击等CC攻击,需要搭建WAF防火墙来保护,再结合黑白名单。

免费WAFk可以参考:https://zhuanlan.zhihu.com/p/638489965

如果动手能力强,可以用Lua搭建,参考:https://developer.aliyun.com/article/608423

 

posted on   Msea  阅读(259)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示