如何在 Nginx 日志中记录反向代理上游服务器服务请求?

Posted

技术标签:

【中文标题】如何在 Nginx 日志中记录反向代理上游服务器服务请求?【英文标题】:How to record reverse proxy upstream server serving request in Nginx log? 【发布时间】:2013-09-08 18:21:40 【问题描述】:

我们在此设置中使用 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;
        [...]
      
      [...]
    

作为访问日志的一部分,我想记录为请求提供服务的上游服务器,在我们的例子中,这意味着关联的 localhost 端口。

文档中的变量 (http://wiki.nginx.org/HttpProxyModule#Variables) 提到了 $proxy_host 和 $proxy_port,但在日志中它们总是以值“frontends”和“80”结束。

【问题讨论】:

【参考方案1】:

首先添加新的日志记录格式

log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name $host to: $upstream_addr: $request $status upstream_response_time $upstream_response_time msec $msec request_time $request_time';

示例输出:

[18/Nov/2019:10:08:15 -0700] <request IP> - - - <config host> <request host> to: 127.0.0.1:8000: GET /path/requested HTTP/1.1 200 upstream_response_time 0.000 msec 1574096895.474 request_time 0.001

然后将accesslog重新定义为

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

log_format 转到 http 部分,access_log 可以在里面。

【讨论】:

谢谢!现在我们对请求时间有了清晰的了解。【参考方案2】:

使用$upstream_addr,您将获得例如127.0.0.1:8000unix:/home/my_user/www/my_site/tmp/.unicorn.sock

【讨论】:

以上是关于如何在 Nginx 日志中记录反向代理上游服务器服务请求?的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 反向代理如何连接上游服务器

Nginx stream如何获取ssl信息并反向代理至上游服务器

在上游服务器日志中记录访问IP

Nginx作为反向代理服务器

Nginx反向代理的工作方式

使用 nginx 作为反向代理和 keycloak 作为上游服务器的组合失败