Nginx配置$request_uri后镜像请求完全不转发问题排查
Nginx镜像请求无日志问题排查
问题根源
你修改后的proxy_pass配置存在核心逻辑错误,导致请求未正确转发到server-2:
1. 变量传递的路径解析问题
在Nginx 1.16版本中,当location /mirror使用proxy_pass http://server-2:80$request_uri时,$request_uri并不会被解析为原请求的URI,而是会被替换为当前location的路径/mirror,加上拼接逻辑错误,实际转发的请求格式不符合server-2的监听规则,导致请求被静默丢弃。
2. 正确的配置写法
要传递原请求的完整URI,有两种可靠的修改方式:
方式一:通过镜像路径携带原URI
listen 80; location / { mirror /mirror$request_uri; proxy_pass http://server-1:8080; } location ~ ^/mirror(.*) { internal; proxy_pass http://server-2:80$1; }
通过mirror /mirror$request_uri将原URI附加到镜像路径后,再用正则location提取并转发到server-2。
方式二:使用$uri+$args组合传递完整请求
listen 80; location / { mirror /mirror; proxy_pass http://server-1:8080; } location /mirror { internal; proxy_pass http://server-2:80$uri$is_args$args; }
$uri会获取原请求的路径部分,$is_args$args则会携带请求参数,组合后完整还原原请求的URI。
额外排查点
- 查看server-1的Nginx错误日志(默认路径
/var/log/nginx/error.log),确认是否存在连接server-2失败、格式错误等提示 - 检查server-2的Nginx日志级别配置,确保设置为
info或更详细级别,避免遗漏请求记录
内容的提问来源于stack exchange,提问作者The Crispy Toasty
相关产品推荐
相关产品推荐

