在ngixn.cnf中当前项目server模块中加入以下配置代码:

默认日志中不记录相应时间$request_time 与 $upstream_response_time

$request_time 与 $upstream_response_time 解释如下:

  • $request_time
    • 以毫秒为单位请求处理时间,以毫秒为单位;从客户端读取第一个字节到将最后一个字节发送到客户端后的日志写入之间经过的时间
  • $upstream_response_time
    • 花费时间从上游服务器接收响应;时间以毫秒为单位,以秒为单位。几次响应的时间之间用逗号和冒号分隔,例如$upstream_addr变量中的地址 。

区别如下:

  • [1用户请求][2建立 Nginx 连接][3发送响应][4接收响应][5关闭 Nginx 连接]
    • 那么 upstream_response_time 就是 2+3+4+5
      • 但是 一般这里面可以认为 [5关闭 Nginx 连接] 的耗时接近 0
      • 所以 upstream_response_time 实际上就是 2+3+4
    • 而 request_time 是 1+2+3+4
    • 二者之间相差的就是 [1用户请求] 的时间
log_format time_log_format '$remote_addr - $remote_user [$time_local] "$request" - $request_time - $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" - [$upstream_response_time]';

if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
   set $time $1$2$3;
}

access_log  /usr/local/lnmp/nginx-1.10/logs/${server_name}/${time}.alog time_log_format;

说明:

  • if判断中进行正则匹配,匹配完成后根据小括号()将匹配成功的字符设置为$1,$2,$3等等,此次匹配的结果为年月日。
  • set $time $1$2$3这句户表示在配置文件中设置一个变量time,赋值为$1$2$3即年月日。
  • access_log /usr/local/lnmp/nginx-1.10/logs/{$server_name}/${time}.alog time_log_format;
  • 本句的意思是开启log,并将日志写入/usr/local/lnmp/nginx-1.10/logs/{$server_name}/${time}.alog文件中,$server_name为当前server_name,$time为前文年月日,combined表示使用默认日志格式进行记录。