Nginx 在访问日志中使用 proxy_pass 记录完整 URI?

Nginx 在访问日志中使用 proxy_pass 记录完整 URI?

我们已经配置了 nginx,proxy_pass并希望查看在应用和处理所有指令设置后目标 URI 是什么。如果出现错误,nginx 会upstream: "https://11.22.33.44:443/test/foo-bar/"在日志中显示以下行:

2020/03/12 02:17:37 [error] 27495#27495: *130660 connect() failed (113: No route to host) while connecting to upstream, client: 172.16.0.5, server: , request: "POST /foo-bar/ HTTP/1.1", upstream: "https://11.22.33.44:443/test/foo-bar/", host: "test.example.com"

如何upstream在访问日志中显示相同的信息?我们尝试了以下日志配置:

log_format main 'site="$server_name" server="$host" dest_port="$server_port" dest_ip="$server_addr" '
                'src="$remote_addr" src_ip="$realip_remote_addr" user="$remote_user" '
                'time_local="$time_local" protocol="$server_protocol" status="$status" '
                'bytes_out="$body_bytes_sent" bytes_in="$upstream_response_length" '
                'http_referer="$http_referer" http_user_agent="$http_user_agent" '
                'nginx_version="$nginx_version" http_x_forwarded_for="$http_x_forwarded_for" '
                'http_x_header="$http_x_header" uri_query="$query_string" uri_path="$uri" '
                'http_method="$request_method" response_time="$upstream_response_time" '
                'cookie="$http_cookie" request_time="$request_time" '
                'upstream_addr="$upstream_addr" upstream_http_server="$upstream_http_server"';

它只能显示 IP 地址,没有完整路径,还有其他 nginx 变量吗?变量指数可以显示与错误日志相同的内容吗?

答案1

我发现的唯一解决方案是让后端将其存储在响应标头中。让 nginx 隐藏标头,而不是删除它,这样您就可以在日志中使用它。

相关内容