web-dev-qa-db-fra.com

Comment enregistrer la demande de service du serveur en amont du proxy inverse dans le journal Nginx?

Nous utilisons Nginx comme proxy inverse avec cette configuration:

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

Dans le cadre du journal d'accès, je voudrais enregistrer le serveur en amont qui a servi la demande, ce qui dans notre cas signifie simplement le port localhost associé.

Les variables dans la documentation ( http://wiki.nginx.org/HttpProxyModule#Variables ) mentionnent $ proxy_Host et $ proxy_port mais dans le journal elles se retrouvent toujours avec les valeurs "frontends" et "80 ".

20
Pol

Utilisation $upstream_addr et vous obtiendrez, par exemple, 127.0.0.1:8000 ou unix:/home/my_user/www/my_site/tmp/.Unicorn.sock

26
akhanubis

Ajoutez d'abord un nouveau format d'enregistrement

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

puis redéfinissez accesslog comme

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

log_format va à la section http {}, access_log peut être à l'intérieur de l'emplacement.

38
kakoni