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
是运行。
我有以下 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
是运行。