web-dev-qa-db-ja.com

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が記載されていますが、ログでは常に値「frontends」と「80」になります「。

20
Pol

使用する $upstream_addrを取得すると、たとえば127.0.0.1:8000またはunix:/home/my_user/www/my_site/tmp/.Unicorn.sock

26
akhanubis

最初に新しいログ形式を追加します

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

そして、アクセスログを次のように再定義します

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

log_formatはhttp {}セクションに移動します。access_logはロケーション内にあります。

38
kakoni