Windows中的Nginx $ request_time和$ upstream_response_time

时间:2013-01-29 21:37:30

标签: logging nginx

我在Windows上运行Nginx的访问日志中遇到了一些奇怪的现象。我在我的访问日志中包含$ request_time以及$ upstream_response_time(将Django作为fcgi上游运行)。我的理解是日志应该以毫秒为单位表示请求时间,但它的输出如下所示:

ip|date|request_time|upstream_response_time
xx.xx.xx.xxx|[29/Jan/2013:15:29:57 -0600]|605590388736.19374237|0.141
xx.xx.xx.xxx|[29/Jan/2013:15:30:39 -0600]|670014898176.19374237|0.156

任何想法是什么巨大的数字!?

这是完整的日志格式(我在上面的示例中删除了几个列)

log_format  main  '$remote_addr|$time_local]|$request|$request_time|$upstream_response_time|'
                  '$status|$body_bytes_sent|$http_referer|'
                  '$http_user_agent';

使用管道分隔符。

1 个答案:

答案 0 :(得分:10)

所以你的建议就是答案:

当您向服务器(nginx + upstream)发出GET请求时,$request_time会产生正常且可接受的值。之所以会发生这种情况,是因为您的上游服务器没有参与其中,即使这样做也可以使其正常运行。

执行POST请求时会出现问题。根据nginx doc $request_time变量的值(仅在日志记录时可用)将在所有数据已发送且连接已关闭时计算(由所有上游和代理也)。只有这样才能将信息附加到日志中。

那么如何检查一切是否正确? 首先对服务器执行GET请求并查看日志文件。注意完成调用并将日志信息添加到文件中需要多长时间 - 它应该是真正的价值。 接下来对服务器发出POST请求并再次查看日志文件。在这里,您可能会看到日志根本没有出现或经过很长时间。

这意味着什么?检查你的nginx conf和你的上游conf,因为某个地方可能是一个没有关闭连接的地方,只是挂在空中。这些连接可以在您的操作系统或上游服务器之后更新,但毕竟它可能会导致一些问题,而不仅仅是奇怪的$request_time值。