如何在Nginx日志中logging反向代理上游服务器服务请求?

我们使用Nginx作为这个设置的反向代理

upstream frontends { server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; [...] } server { location / { proxy_pass http://frontends; [...] } [...] } 

作为访问日志的一部分,我想logging服务请求的上游服务器,在我们的例子中,这只是表示关联的localhost端口。

文档中的variables( http://wiki.nginx.org/HttpProxyModule#Variables )提到了$ proxy_host和$ proxy_port,但是在日志中它们总是以“前端”和“80”结束。

使用$upstream_addr ,你会得到,例如, 127.0.0.1:8000 unix:/home/my_user/www/my_site/tmp/.unicorn.sockunix:/home/my_user/www/my_site/tmp/.unicorn.sock

首先添加新的记录格式

 log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time'; 

然后将accesslog重新定义为

 access_log /var/log/nginx/access.log upstreamlog; 

log_format转到http {}部分,access_log可以位于内部。