How to record reverse proxy upstream server servin

2019-03-11 02:24发布

问题:

We use Nginx as a reverse proxy with this setup:

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;
    [...]
  }
  [...]
}

As part of the access log, I would like to record the upstream server that has served the request, which in our case just means the associated localhost port.

The variables in the documentation (http://wiki.nginx.org/HttpProxyModule#Variables) mention $proxy_host and $proxy_port but in the log they always end up with the values "frontends" and "80".

回答1:

Use $upstream_addr and you will get, for example, 127.0.0.1:8000 or unix:/home/my_user/www/my_site/tmp/.unicorn.sock



回答2:

First add new logging format

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';

and then redefine accesslog as

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

log_format goes to http {} section, access_log can be inside location.