![Nginx 在访问日志中使用 proxy_pass 记录完整 URI?](https://linux22.com/image/749532/Nginx%20%E5%9C%A8%E8%AE%BF%E9%97%AE%E6%97%A5%E5%BF%97%E4%B8%AD%E4%BD%BF%E7%94%A8%20proxy_pass%20%E8%AE%B0%E5%BD%95%E5%AE%8C%E6%95%B4%20URI%EF%BC%9F.png)
我们已经配置了 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 隐藏标头,而不是删除它,这样您就可以在日志中使用它。