自定义nginx网站日志格式

标签:         

为什么要修改nginx配置文件为自定义日志格式

默认日志不带有访问域名等信息,当同一个站点下有多个域名需要记录具体访问域名时则需要自定义日志格式,或者其他类似需求

修改nginx配置文件自定义日志格式具体如下

在nginx的站点配置文件server区块之外增加如下名称为eyz_format的自定义日志格式,(该格式可按需求自定义,参数含义在下方)

log_format  eyz_format '[$time_local] $remote_addr "$request_method $scheme://$host$request_uri $server_protocol" $status $body_bytes_sent $request_time $upstream_response_time "$http_referer" "$http_user_agent" $http_x_forwarded_for';

该格式写出的日志如下,包含访问域名等信息

[31/Mar/2023:09:15:02 +0800] 8.12.1.1 "GET https://eyunzhu.com/1921 HTTP/1.1" 301 162 0.000 - "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" -

整体文件大致如下

# 新增名称为eyz_format的日志格式
log_format  eyz_format '[$time_local] $remote_addr "$request_method $scheme://$host$request_uri $server_protocol" $status $body_bytes_sent $request_time $upstream_response_time "$http_referer" "$http_user_agent" $http_x_forwarded_for';
server
{
    listen 80 default_server;
    # 其他参数已经省略...

    # 指定日志格式为eyz_format
    access_log  /www/wwwlogs/seo-site.io.log eyz_format;
    error_log  /www/wwwlogs/seo-site.io.error.log;
}

修改如下图片所示

修改宝塔面板nginx站点日志格式

log_format语法参数含义:

格式如下:

log_format 格式名 '$参数1 $参数2';

nginx log_format参数含义如下:

参数 说明 示例
$remote_addr 客户端地址 219.227.111.255
$remote_user 客户端用户名称
$time_local 访问时间和时区 18/Jul/2014:17:00:01 +0800
$request 请求的URI和HTTP协议 “GET /article-10000.html HTTP/1.1”
$http_host 请求地址,即浏览器中你输入的地址(IP或域名) www.ha97.com;198.98.120.87
$status HTTP请求状态 200
$upstream_status upstream状态 200
$body_bytes_sent 发送给客户端文件内容大小 1547
$http_referer url跳转来源 https://www.google.com/
$http_user_agent 用户终端浏览器等信息 “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 10.36.10.80:80
$request_time 整个请求的总时间 0.165
$upstream_response_time 请求过程中,upstream响应时间 0.002
$http_x_forwarded_for  #客户端的真实ip通常web服务器放在反向代理的后面这样就不能获取到客户的IP地址了通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中可以增加x_forwarded_for信息用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。$remote_addr   # 远程客户端的IP地址
$remote_user  #远程客户端用户名称用于记录浏览者进行身份验证时提供的名字如果没有登录就是空白。
$time_local  #访问的时间与时区比如18/Jul/2012:17:00:01 +0800时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
$request_method #HTTP请求方法,通常为"GET"或"POST"$scheme #请求使用的Web协议,"http" 或 "https"$host #HTTP请求行的主机名>"HOST"请求头字段>符合请求的服务器名.请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称
$request_uri #这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写
$uri  #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html"$query_string #请求中的参数值
$server_protocol #服务器的HTTP版本,通常为 "HTTP/1.0" 或 "HTTP/1.1"$status #HTTP响应代码
$body_bytes_sent #传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的"%B"参数保持兼容
$http_referer #url跳转来源,用来记录从那个页面链接访问过来的
$http_user_agent #用户终端浏览器等信息
$request_time #处理客户端请求使用的时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$upstream_addr #真正提供服务的主机地址
$request_id  #生产唯一ID方便查询问题
$upstream_response_time #请求过程中upstream的响应时间

发表评论 登录

目前评论:0