参考:
Module ngx_http_mirror_module
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
ngx_http_mirror_module用于实时流量拷贝
请求一个接口,想实时拷贝这个请求转发到自己的服务上,可以使用ngx_http_mirror_module模块。
官网好像就两个指令,
mirror
mirror_request_body
例子
案例流程:
curl client -> 本地nginx -> 测试服务(这里用的是一个nginx模拟的服务)
~/data/nginx/web/conf/ cat default.conf
upstream kevin-mirror2 {
server 192.168.52.133:80; # 这个实际上是另一个nginx
}
server {
listen 80;
listen [::]:80;
server_name localhost;
access_log /var/log/nginx/host.access.log main;
location ~* \.(jpg|JPG|PNG|jpeg|png|gif)$ {
root /static;
}
location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
mirror /mirror;
proxy_pass http://kevin-mirror2;
}
location /mc {
set $memcached_key "$uri";
memcached_pass 192.168.59.213:11211;
}
location = /mirror {
internal;
access_log /usr/share/nginx/html/mirror.log main;
proxy_pass http://kevin-mirror2$request_uri; # 这里这里要写成http://kevin-mirror2$request_uri,写成http://kevin-mirror2转发到后端就变成了/mirror
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Real-IP $remote_addr;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
(p38) ~/data/nginx/web/conf/
- 请求镜像端点,返回404
本地nginx显示404
- 访问
/
本地nginx返回页面
- 本地nginx返回页面
- 本地nginxnginx的日志
- 代理的测试服务。因为是测试,我把请求都转到了测试nginx上,这里可以看到的确有两个请求过来。