Nginx 日志格式详解
Nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参加ngx_http_log_module。
通过访问日志,你可以得到用户地域来源,跳转来源,使用终端,某个URL访问量等相关信息;通过错误日志,可以得到系统某个服务或server的性能瓶颈,日志就是信息,日志就是问题的答案。
Nginx 配置文件中日志的配置路径一般为:/usr/local/nginx/conf/nginx.conf
Nginx 日志参数详解
$remote_addr 客户端ip地址(若使用了高匿代理服务器,显示代理服务ip),例如 123.57.78.100
$remote_port 客户端的端口,例如 54673
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$remote_user 用户记录远程客户端的用户名称,一般为 '-'
$http_host($host) 浏览器中输入的地址(IP或域名),例如: proxy.mimvp.com 或 123.57.78.100
$time_local 用具记录访问时间和时区,日期格式:18/Feb/2017:14:10:17 +0800
$time_iso8601 用具记录访问时间和时区,日期格式:2017-02-18T14:10:17+08:00
$status 响应状态码 ‘404’页面找不到 ‘200’成功等
$request_time 整个请求的总时间,从接收用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间,程序响应时间,输出响应数据时间
$bytes_sent 传输给客户端的全部字节数,包含响应头等信息
$body_bytes_sent 给客户端发送的文件主题内容字节数,响应头不计算在内
$request_length 请求的长度(包括请求的地址,http请求头和请求主体)
$http_referer url跳转来源,用来记录从哪个页面链接访问过来的,例如:https://proxy.mimvp.com
$upstream_addr 后台提供服务的地址(即转发处理的目标地址)
$upstream_response_time 从nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间
$upstream_status upstream状态,例如 200
$http_user_agent 用户所使用的代理(一般为浏览器)
$request 用于记录请求的url以及请求方法,格式:"GET /free.php?proxy=in_tp HTTP/1.1"
$request_method 用于记录请求的url以及请求方法,格式:GET、POST
$request_body 客户端的请求主体,此变量可以在location中使用,将请求主体通过proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass传递给下一级的代理
$args 请求中的参数值,格式:"proxy=in_tp"
$uri 请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令修改,格式:"/free.php"
$request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改
$ssl_protocol SSL协议版本,例如 TLSv1、TLSv2
$ssl_cipher SSL协议的交换数据中的算法,例如 RC4-SHA,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-GCM-SHA384
$geoip_country_code 用户地理位置代码(国家代码)
$http_accept_language 用户浏览器语言。如:上例中的 "es-ES,es;q=0.8"
$http_true_client_ip 客户端的真实ip地址
Nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
日志格式自定义配置
Nginx 配置的日志格式
log_format main '$time_iso8601 $remote_addr $remote_user "$request" "$uri" - ' '$status $request_time $request_length $body_bytes_sent/$bytes_sent $ssl_protocol $ssl_cipher - ' '$http_referer $http_x_forwarded_for "$http_user_agent"'; access_log logs/access.log main;
Nginx 对应的运行日志:
2018-11-20T23:37:40+08:00 119.15.90.30 - "GET /free.php?proxy=out_hp&sort=&page=1 HTTP/1.1" "/free.php" - 200 0.156 362 6849/7213 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - - - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)" 2018-11-20T23:37:44+08:00 117.30.95.62 - "GET /partner.php HTTP/1.1" "/partner.php" - 200 0.016 457 6534/6956 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - https://blog.csdn.net/ithomer/article/details/6566739 - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" 2018-11-20T23:37:44+08:00 117.30.95.62 - "GET /css/bootstrap.min.css HTTP/1.1" "/css/bootstrap.min.css" - 200 0.045 398 19402/19757 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - https://proxy.mimvp.com/partner.php - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" 2018-11-20T23:37:44+08:00 117.30.95.62 - "GET /css/hint.min.css HTTP/1.1" "/css/hint.min.css" - 200 0.000 393 1635/1989 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - https://proxy.mimvp.com/partner.php - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
Apache 配置的日志格式
LogFormat "%{%Y-%m-%dT%H:%M:%S+08:00}t %h %u \"%m %U%q %H\" \"%U\" - %>s %T/%D %I %b/%O %{SSL_PROTOCOL}x %{SSL_CIPHER}x - %{Referer}i %{X-Forwarded-For}i \"%{User-Agent}i\"" customlog
Apache 对应的运行日志:
2018-11-20T23:38:36+08:00 106.39.149.200 - "POST /wp-admin/admin-ajax.php HTTP/1.1" "/wp-admin/admin-ajax.php" - 200 0/349792 1520 101/706 TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 - https://blog.mimvp.com/wp-admin/post.php?post=29756&action=edit - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36" 2018-11-20T23:38:36+08:00 106.39.149.200 - "GET /article/27722.html HTTP/1.1" "/article/27722.html" - 200 0/21943 991 35794/36405 TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 - - - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36" 2018-11-20T23:38:38+08:00 106.39.149.200 - "GET /wp-admin/admin-ajax.php?postviews_id=27722&action=postviews&_=1542728317638 HTTP/1.1" "/wp-admin/admin-ajax.php" - 200 0/345844 1177 3/466 TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 - https://blog.mimvp.com/article/27722.html - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36" 2018-11-20T23:38:43+08:00 220.181.51.110 - "GET /article/25537.html HTTP/1.1" "/article/25537.html" - 200 0/95574 719 122125/126073 TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 - - - "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36"
详见米扑博客:Apache 日志格式详解
如上,Nginx 和 Apache 服务器的日志格式相同了,分析统计就方便了
log_format 日志格式详解
log_format指令用来设置日志的记录格式,它的语法如下: log_format name format {format ...} 其中name表示定义的格式名称,format表示定义的格式样式。 log_format有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined日志格式,其具体参数如下: log_format combined '$remote_addr-$remote_user [$time_local]' ‘"$request"$status $body_bytes_sent’ ‘"$http_referer" "$http_user_agent"’ 也可以自定义一份日志的记录格式,不过要注意,log_format指令设置的名称在配置文件中是不能重复的。 假设将Nginx服务器作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,不能获取到客户端的真实IP地址了。 原因是经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。 通过$remote_addr变量拿到的将是反向代理服务器的IP地址。 但是,反向代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。 这时候,要用log_format指令设置日志格式,让日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。 例如,创建一个名为mylogformat的日志格式,再$http_x_forwarded_forlog_for变量记录用户的X_Forwarded-For IP 地址: log_format mylogformat '$http_x_forwarded_for_$remote_user [$time_local]' ‘"$request"$status $body_bytes_sent’ ‘"$http_referer" "$http_user_agent"’ 在日志格式样式中,变量$remote_addr和$http_x_forwarded_for用于记录IP地址; $remote_user用于记录远程客户端用户名称; $time_local用于记录访问时间与时区; $request用于记录请求URL与HTTP协议; $status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404; $body_bytes_sent用于记录发送客户端的文件主体内容大小; $http_referer用于记录是从哪个页面链接访问过来的; $http_user_agent用于记录客户浏览器的相关信息。
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2019-03-20 05:59:14
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Nginx 日志格式详解 (米扑博客)
谢谢分享 ,会一直关注博主的,内容很赞