问:Nginx $upstream_response_time 返回 2 个值

Tak*_*uya 4 nginx

有时 Nginx $upstream_response_time 返回 2 个值。

xxx.xxx.xxx.xxx - - [08/Nov/2017:23:43:25 +0900] "GET /xxxxxxxxxxxx HTTP/2.0" 200 284 "https://xxxxxxxxxxx" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-" "0.015" "0.001, 0.014"
Run Code Online (Sandbox Code Playgroud)

" 0.001, 0.014 " 这是 $upstream_response_time。为什么这有两个值?

日志格式:

log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$request_time" "$upstream_response_time"';
Run Code Online (Sandbox Code Playgroud)

Jos*_*ald 6

请注意,文档中对此进行了详细说明:

多个响应的时间由逗号和冒号分隔,就像 $upstream_addr 变量中的地址一样。

这意味着它向后端发出了多个请求,很可能您有一个proxy_pass解析为不同 IP 的裸主机(通常以 Amazon ELB 等作为源),或者您配置了upstream多个服务器。除非禁用,否则该proxy模块将对所有健康的后端进行循环尝试。这可以通过proxy_next_upstream_*指令进行配置。

例如,如果这不是所需的行为,您可以这样做:

proxy_next_upstream off;
Run Code Online (Sandbox Code Playgroud)