首页 > 系统相关 >Nginx 限流及WAF

Nginx 限流及WAF

时间:2023-09-15 17:46:45浏览次数:37  
标签:resty zone WAF req Nginx 限流 limit conn

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

 

标签:resty,zone,WAF,req,Nginx,限流,limit,conn
From: https://www.cnblogs.com/harbin1900/p/17705597.html

相关文章

  • nginx修改默认首页,且转发对应请求
     下载nginxhttps://nginx.org/en/download.html 这里是windows版本 nginx-1.25.2下载zip包解压丢到D盘,修改配置D:\nginx-1.25.2\conf\nginx.conf修改监听端口,修改默认网页 复制你的前端网页到html文件夹内,修改root节点的默认首页监听相对路径并转发 ......
  • nginx 核心配置文件
    nginx.conf核心配置文件**1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody**userroot;2.worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行worker_processes1;3.nginx日志级别debug|info|notice......
  • Linux基础39 nginx动静分离, nginx资源分离, rewrite概述
    一、动静分离动静分离,通过中间件将动静分离和静态请求进行分离;通过中间件将动态请求和静态请求,可以减少不必要的请求消耗,同时能减少请求的延时。通过中间件将动态请求和静态请求分离,逻辑图如下: 二、配置动静分离1.单台机器的动静分离[[email protected]]#vimwordpre......
  • nginx 如何配置指向带有hash值的index.html文件?
    要在Nginx配置中指向带有哈希值的index.html文件,可以使用通配符(*)来匹配文件名中的哈希部分。以下是一个示例配置:location/{root/path/to/html/demo;indexindex.html;try_files$uri$uri//index.html;location~^/index\.(\w+)\.html${#使用......
  • docker 配置nginx启动
    docker中nginx常用临时地址conf:/etc/nginx/nginx.confhtml:/usr/share/nginx/htmllog:/var/log/nginx启动临时容器:dockerrun--namemy-nginx-dnginx在本地新建文件目录如上图dockercpmy-nginx:/etc/nginx/nginx.conf/usr/local/docker/nginx/conf/nginx.co......
  • https nginx安装证书 ssl证书安装 nginx ssl
    ]#cd/etc/nginx/拷贝文件:#rz---上传ssl配置文件,keyandcrt添加文件:cd/usr/share/nginx/htmlrzcd/etc/nginx/conf.dtouchxxxkeji.confvimxxxkeji.conf加入:--server{listen443ssl;server_namewww.xxxkeji.com;......
  • Nginx神奇的499竟然不在HTTP响应码标准内?快来了解一下!
    1前言高性能的HTTP和反向代理服务器,Nginx用来:搭建WebServer作负载均衡供配置的日志字段丰富,从各类HTTP头部到内部性能数据都有Nginx的访问日志中,存在499状态码的日志。但常见4xx状态码只有400、401、403、404等,499并未在HTTPRFC文档。这499错误日志,在流量较大场景下,特别......
  • Nginx中实现逻辑运算
    nginx的配置中不支持if条件的逻辑与&&逻辑或||运算,而且不支持if的嵌套语法,否则会报下面的错误:nginx:[emerg]invalidcondition。我们可以用变量的方式来间接实现。要实现的语句:if($arg_unitid=42012&&$uri~/thumb/){echo"www.ttlsa.com";}如果按照......
  • nginx常用配置和nginx镜像验证配置
    目的总结项目中常用的nginx配置,然后通过docker构建一个nginx镜像来快速使用和验证。目录结构 nginx配置nginx.conf文件:usernginx;worker_processesauto;error_log/var/log/nginx/error.lognotice;pid/var/run/nginx.pid;events{worker_connecti......
  • Nginx同一个端口代理前后端
    server{listen8080;server_namelocalhost;location/{proxy_passhttp://192.168.9.163:8899;}location/api/{rewrite^/api/(.*)$/$1break;proxy_pass......