Как зарегистрировать запрос обслуживания обратного прокси-сервера на сервере Nginx?

Мы используем 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;
    [...]
  }
  [...]
}

Как часть журнала доступа, я хотел бы записать восходящий сервер, который обслуживал запрос, который в нашем случае означает только соответствующий локальный порт.

Переменные в документации (http://wiki.nginx.org/HttpProxyModule#Variables) упоминают $proxy_host и $proxy_port, но в журнале они всегда имеют значения "интерфейсы" и "80".

Ответ 1

Используйте $upstream_addr, и вы получите, например, 127.0.0.1:8000 или unix:/home/my_user/www/my_site/tmp/.unicorn.sock

Ответ 2

Сначала добавьте новый формат ведения журнала

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 может находиться внутри местоположения.