Windows中的Nginx $ request_time和$ upstream_response_time

bwo*_*eli 4 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
Run Code Online (Sandbox Code Playgroud)

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

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

log_format  main  '$remote_addr|$time_local]|$request|$request_time|$upstream_response_time|'
                  '$status|$body_bytes_sent|$http_referer|'
                  '$http_user_agent';
Run Code Online (Sandbox Code Playgroud)

使用管道分隔符.

emk*_*a86 10

所以你在这里建议的答案是:

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

在执行POST请求时问题就开始了.根据nginx doc $request_time变量的值(仅在日志记录时可用)将在所有数据已发送且连接已关闭时计算(由所有上游和代理也).然后只有信息附加到日志.

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

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

  • `$ request_time:以毫秒为单位的请求处理时间(以秒为单位); 从客户端读取第一个字节之间经过的时间,并在最后一个字节发送到客户端之后写入日志... ...这样可以减慢客户端的速度.建议忽略它以支持`$ upstream_response_time` (6认同)