Nginx:将实际转发的 proxy_pass 请求 URI 记录到上游

Nginx: log the actual forwarded proxy_pass request URI to upstream

我有以下 nginx 配置:

http {

  log_format upstream_logging '[proxied request] '
                              '$server_name$request_uri -> $upstream_addr';
  
  access_log /dev/stdout upstream_logging;

  server {

    listen 80;
    server_name localhost;
    
    location ~ /test/(.*)/foo {
      proxy_pass http://127.0.0.1:3000/;
    }
  }
}

当我命中:

http://localhost/test/bar/foo

我的实际输出是:

[proxied request] localhost/test/bar/foo -> 127.0.0.1:3000 

虽然我的预期输出是:

[proxied request] localhost/test/bar/foo -> 127.0.0.1:3000/bar

是否有变量或方法可以在日志中生成实际的代理 URI?

如果不是生产环境,您可以在所需的本地地址和端口(而不是真实的)上启动最简单的侦听服务器后测试 nginx 发送的内容:

$ nc -l 127.0.0.1 3000
POST /some/uri HTTP/1.0
Host: 127.0.0.1
Connection: close
Content-Length: 14

some payload

可以通过手动输入HTTP/1.1 200 OK来模拟响应,然后是2个新行,而nc是运行。