Skip to content

Nginx镜像模块:ngx_http_mirror_module

Nginx 中镜像模块的功能是将用户的访问请求镜像复制到指定的 URI,通过 location 的 URI 匹配将流量发送到指定的服务器。用户请求的实际请求响应通过 Nginx 返回客户端,镜像服务器的请求响应则会被 Nginx 服务器丢弃。

镜像请求与实际请求是异步处理的,对实际请求无影响。该模块的内置配置指令如下面表格中所示。

表:访问镜像指令

<tbody>
	<tr>
		<th>名称</th>
		<th>访问镜像指令</th>
	</tr>
	<tr>
		<td>指令</td>
		<td>mirror</td>
	</tr>
	<tr>
		<td>作用域</td>
		<td>http、server、location</td>
	</tr>
	<tr>
		<td>默认值</td>
		<td>off</td>
	</tr>
	<tr>
		<td>指令说明</td>
		<td>将用户的访问请求镜像到指定的 URI,同级支持多个 URI</td>
	</tr>
</tbody>

配置样例如下:

server {

listen 8080;

root /opt/nginx-web/www;

location / {

mirror /benchmark;

index index.html;

}

location = /benchmark {

internal;

proxy_pass http://192.168.2.145$request_uri;

}

}

表:镜像请求体指令

<tbody>
	<tr>
		<th width="90px">
			名称</th>
		<th>镜像请求体指令</th>
	</tr>
	<tr>
		<td>指令</td>
		<td>mirror_request_body</td>
	</tr>
	<tr>
		<td>作用域</td>
		<td>http, server, location</td>
	</tr>
	<tr>
		<td>默认值</td>
		<td>on</td>
	</tr>
	<tr>
		<td>指令值可选项</td>
		<td>on 或 off</td>
	</tr>
	<tr>
		<td>指令说明</td>
		<td>将用户的访问请求体同步镜像到指定的 URI,当启用该指令时,创建镜像子请求前会优先读取并缓存客户端的请求体内容,同时 proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering 和 uwsgi_request_buffering 等指令的不缓存设置将被关闭</td>
	</tr>
</tbody>

配置样例如下:

server {

listen 8080;

server_name localhost;

root /opt/nginx-web/www;

mirror_request_body off;

location / {

index index.html;

mirror /accesslog;

}

location = /accesslog {

internal;

proxy_pass http://192.168.2.145/accesslog/${server_name}_$server_port$request_uri;

}

} 如果该指令值为 off 则不同步请求体。

配置样例如下:

server {

listen 8080;

root /opt/nginx-web/www;

location / {

mirror /benchmark; # 镜像用户请求

mirror /benchmark; # 镜像用户请求

mirror /benchmark; # 镜像用户请求

index index.html;

}

location = /benchmark {

internal;

proxy_pass http://192.168.2.145$request_uri;

}

} 访问镜像模块可以将用户请求同步镜像到指定的服务器,同时还可以对用户的流量进行放大,通常可以在镜像线上流量后进行压力测试或预生产环境验证。