开始之前
为什么要自定义nginx日志? 这里有个例子。示例中希望 nginx 能够记录 php-fpm
(上游服务器)执行程序所花费的时间,以便为优化服务器端(程序)响应时间提供支持,nginx 提供了 ngx_http_log_module
模块用于个性化日志配置。
# nginx 反向代理 php-fpm
容器镜像: php:5.6-fpm
容器系统: debian 8 (jessie)
nginx版本: nginx-1.9.12
1. 日志格式
编辑 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';
}
2. 使用自定义日志格式
在虚拟主机配置文件中使用自定义的日志格式。
cat /etc/nginx/conf.d/default.conf
server {
# 省略...
access_log /var/log/nginx/access.log access;
}
3. 重启 nginx
nginx -t && nginx reload
4. 验证
访问服务器日志输出如下,最后一个字段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) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56" 106.37.1xx.2xx 0.027
1. log_format
语法: log_format name string ...;
默认值: log_format combined "...";
使用字段: http
功能: 定义日志格式。
2. 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
变量,是指从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。