Nginx 自定义日志
2016-03-30 by dongnan
举个栗子
为什么要自定义 nginx
日志? 这里有个例子:
开发人员期望 nginx
能够记录 php-fpm
(上游服务器)执行程序所花费的时间,以便优化服务器端(程序)响应时间提供数据,
nginx
提供了 ngx_http_log_module
模块用于个性化日志配置。
环境描述
nginx
反向代理 php-fpm
, 软件版本如下:
容器镜像: php:5.6-fpm
容器系统: debian 8 (jessie)
nginx版本: nginx-1.9.12
操作步骤
自定义日志格式
编辑 nginx.conf
配置文件,log_format
指令中加入 $upstream_response_time
变量,例如:
# 执行命令
cat /etc/nginx/nginx.conf
# 省略...
http {
# 省略...
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $upstream_response_time';
}
使用自定义日志
在虚拟主机配置文件中使用自定义的日志。
# 执行命令
cat /etc/nginx/conf.d/default.conf
server {
# 省略...
access_log /var/log/nginx/access.log access;
}
重启Nginx
nginx -t && nginx reload
验证
访问服务器日志输出如下,最后一个字段0.027
为上游php-fpm
服务器所花费的时间。
# 执行命令
docker logs --tail 1 -f crm-web
119.188.116.16 - - [30/Mar/2016:16:59:45 +0800] "GET /index.php HTTP/1.1" 200 15035
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) xxxx Version/9.0 Safari/601.1.56"
106.37.1xx.2xx 0.027
日志相关指令
log_format
语法: log_format name string ...;
默认值: log_format combined "...";
使用字段: http
功能: 定义日志格式。
access_log
语法: access_log path [format [buffer=size] ...];
access_log off;
默认值: access_log logs/access.log combined;
使用字段: http, server, location, if in location
功能: 设置日志的路径、格式、配置缓冲。如果设置off 则关闭日志,如果未指定格式,则使用预定义的"combined"格式。
小结
最后来总结下文章中的知识点
log_format
指令提供个性化日志配置,access_log
指令则使用定义好的日志格式。$upstream_response_time
变量,是指从nginx
向上游服务器建立连接开始到其执行结束的时间。- 此外还有一个
$request_time
变量,是指从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。