zoukankan      html  css  js  c++  java
  • Nginx流量镜像

     Nginx在1.13版本的时候就添加了ngx_http_mirror_module模块,用来做流量镜像。它的流量镜像是只复制镜像,发送到配置好的后端,但是后端响应返回到nginx之后,nginx是自动丢弃掉的,这个特性就保证了,镜像后端的不管任何处理都不会影响到正常客户端的请求。但是,复制的镜像请求和原始请求是相关联的,只要镜像请求没有处理完成,原始请求就会被阻塞

    具体如下:

    主要是俩个指令:

    Syntax:mirror uri | off;
    Default: mirror off;

    Context:httpserverlocation

    mirror用来指定请求将被镜像到哪个uri,可以指定多个镜像,uri也可以用相同的,相同的uri就表示将流量放大了一倍,也就是多复制了一份流量到uri。

    Syntax:mirror_request_body on | off;
    Default:

    mirror_request_body on;

    Context:httpserverlocation

    该参数是指定是否镜像request_body部分,默认是开启的,官方文档中说,这个指令和

    • proxy_request_buffering

    • fastcgi_request_buffering

    • scgi_request_buffering

    • uwsgi_request_buffering

    指令冲突,开启之后会禁用以上指令。

    使用该指令一定要保证mirror_request_body、proxy_pass_request_body和Content-Length配置一直,比如mirror_request_body或proxy_pass_request_body设置为off,则Content-Length必须设置为“”,因为nginx(mirror_request_body)或tomcat(mirror_request_body)处理post请求时,会根据Content-Length获取请求体,如果Content-Length不为空,而由于mirror_request_body或者proxy_pass_request_body设置为off,处理方以为post有内容,当request_body中没有,处理方会一直等待至超时,则前者为off,nginx会报upstream请求超时

    配置参考:

    location / {
        mirror /mirror;
        proxy_pass http://backend;
    }
    
    location = /mirror {
        internal;
        proxy_pass http://test_backend$request_uri;
    }

    mirror 模块可用于以下几个场景:

    • 通过预生产环境测试来观察新系统对生产环境流量的处理能力。
    • 复制请求日志以进行安全分析。
    • 复制请求用于数据科学研究。

    1.用于安全分析

    Nginx的两种开源waf,NaxsiModSecurity,直接上生产会不会有问题,拦截正常请求。

    现在大多WAF都是通过规则匹配请求特征,有规则,肯定就不会那么智能的避开所有正常请求,只拦截恶意请求,虽然现在有百度的openrasp等不依赖于请求特征的运行时攻击检测工具,但是也不能做到完全准确的拦截攻击或恶意请求。

    参考网络防火墙,或者入侵检测系统的方法,通过流量镜像的方式,在网络故障处理中,为了更好的分析定位网络问题,我们通常会做流量镜像或者端口镜像,来保存镜像流量,用于分析恶意请求、或抓包故障定位等,web上也可以通过这种方式来做:

     通常waf中,拦截掉之后会返回403给客户端,当然也可以自定义,完后会记录拦截日志,利用这种机制,将waf配置在流量镜像下使用一段时间后,就可以从日志中分析出哪些正常请求会被拦截掉,从而修改waf规则,然后接入到生产数据中,这样可以有效的避免waf的FRR。

    参考:

    https://blog.51cto.com/u_15127559/2661979

    https://cloud.tencent.com/developer/article/1495449

    http://nginx.org/en/docs/http/ngx_http_mirror_module.html

  • 相关阅读:
    使用requests爬虫简单获取知乎问题信息
    slam介绍
    move_base 控制机器人(2)
    move_base 控制机器人(1)
    Linux 常用命令-touch
    Linux 常用命令-rmdir
    Linux 常用命令-rm
    Linux 常用命令-mkdir
    Linux 目录结构
    Linux 常用命令-pwd
  • 原文地址:https://www.cnblogs.com/sfnz/p/14744662.html
Copyright © 2011-2022 走看看