监控nginx从上游服务器的响应

我使用nginx进行反向代理设置。

客户端 --> Nginx ------------------------------------> 后端服务器
        <------               <----------------------------------
                                          (我想在此处查看请求)

我该如何将从后端服务器发送给nginx的http请求(包括头)记录到文件中?

或许nginx http代理模块中的某个指令可以帮助我实现这个功能。

但我找不到任何有用的指令。

点赞
用户118613
用户118613

在Nginx术语中,“后端服务器”称为“上游(upstream)”。在文档中有一个单独的页面列表,其中记录了与上游相关的变量 。其中,您可能会对以下变量感兴趣:

  • $upstream_addr - 处理请求的后端服务器的IP地址
  • $upstream_connect_time$upstream_header_time$upstream_response_time - Nginx等待连接接受的时间,从上游获取标头的时间以及后端处理请求花费的时间
  • $upstream_http_*NAME*将包含响应标头“NAME”。例如,$upstream_http_etag$upstream_http_last_modified
  • 还有其他变量用于报告缓存状态、重试等。

将它们记录到Nginx日志文件中是相当常见的做法。您需要声明您自己的日志格式,例如:

log_format my_upstream '$remote_addr [$time_local] "$request" $status'
  '"$upstream_addr" $upstream_response_time $upstream_http_etag';

然后在locationserver中使用它:

access_log /var/log/nginx/upstream.log my_upstream;

:我在OP添加openresty标签之前回答了这个问题。我不是Openresty专家,但我确定在使用普通的Nginx时我给出了正确的细节。

2017-07-15 15:41:08
用户2060502
用户2060502

如果您可以接受OpenResty:

https://github.com/openresty/lua-nginx-module#body_filter_by_lua_block中,如果您想要将其包含在日志中,则可以重构完整的响应体。 当指定eof标志时,您可以获取所有响应头(https://github.com/openresty/lua-nginx-module#ngxrespget_headers

然后在Lua中设置一个变量并在log_format中使用它。

注意-你的访问日志文件可能非常大!

提示-您可以使用单独的access_log和log_format来记录响应。

2017-07-17 10:52:25