nginx ngx_http_mirror_module
模块(自 1.13.4 实现)通过创建后台镜像子请求(mirroring of an original request)来实现原始请求的镜像,镜像子请求的响应将被忽略。
介绍
使用场景
- 引流测试
- 复制请求,如 influxdb v2 不支持高可用,可以使用 nginx mirror 将 POST 请求镜像一份到备的 influxdb 中,注意:镜像请求中 token 需要使用
proxy_set_header
设置
配置示例
client_body_buffer_size 10M;
client_max_body_size 10M;
location / {
mirror /mirror;
# 多加一份mirror,流量放大一倍
# mirror /mirror;
mirror_request_body off;
proxy_pass http://backend;
}
location = /mirror {
internal;
limit_except GET POST {
deny all;
}
# proxy_pass http://log_backend;
proxy_pass http://$mirror_backend$request_uri;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
说明:
- original 配置
mirror /mirror
指定镜像 uri 为/mirror
mirro
配置位置可以为 nginx 配置文件的 http, server, location 中
mirror_request_body
表示是否镜像客户端请求正文
- 启用后,将在创建镜像子请求之前读取客户端请求正文
- 在这种情况下,由 proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering 和 uwsgi_request_buffering 指令设置的未缓冲客户端请求正文代理功能将被禁用
proxy_pass
指定数据转发 server 的地址
- mirror 配置
internal
指定此 location 只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
proxy_set_header
设置镜像流量的头部,可以配置认证等信息
- limit_except 限制只有 GET POST 允许镜像,其他请求拒绝
其他实现