Ответ 1
Используйте $upstream_addr
, и вы получите, например, 127.0.0.1:8000
или unix:/home/my_user/www/my_site/tmp/.unicorn.sock
Мы используем 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".
Используйте $upstream_addr
, и вы получите, например, 127.0.0.1:8000
или unix:/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 может находиться внутри местоположения.