nginx的ngx_http_log_module模块是用来定义请求日志格式(编译时添加)
配置段: http
常用log_format指令:
$remote_addr, $http_x_forwarded_for 记录客户端IP地址$remote_user 记录客户端用户名称$request 记录请求的URL和HTTP协议$status 记录请求状态$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。$bytes_sent 发送给客户端的总字节数$connection 连接的序列号$connection_requests 当前通过一个连接获得的请求数量$msec 日志写入时间。单位为秒,精度是毫秒$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”$http_referer 记录从哪个页面链接访问过来的$http_user_agent 记录客户端浏览器相关信息$request_length 请求的长度(包括请求行,请求头和请求正文)$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止$upstream_response_time Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间
$time_iso8601 ISO8601标准格式下的本地时间$time_local 通用日志格式下的本地时间
上面提到了两个时间:upstream_response_time和request_time
下面介绍下2者的差别:
1、request_time
指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。
2、upstream_response_time
是指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间。
所以$request_time肯定比$upstream_response_time值大,特别是使用POST方式传递参数时,因为Nginx会把request body缓存住,接受完毕后才会把数据一起发给后端。所以如果用户网络较差,或者传递数据较大时,$request_time会比$upstream_response_time大很多。
所以如果使用nginx的accesslog查看php程序中哪些接口比较慢的话,记得在log_format中加入$upstream_response_time。