配置NGINX的ACCESS LOG
来源:互联网 发布:java杨辉三角几年里 编辑:程序博客网 时间:2024/06/08 07:46
默认情况下,access log放在: …\nginx\logs目录下,文件名为:access.log,默认格式为预配置格式:combined
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
在
http { ...log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';access_log logs/access.log main;}
这块内容地下可以对格式和日志文件路径、文件名进行修改,建议根据项目特性修改文件名,特别是需要在日志文件中打印敏感信息进行用户行为分析时,避免外部用户轻易捉去日志文件,导致信息泄露。
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 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。$time_iso8601 ISO8601标准格式下的本地时间。$time_local 通用日志格式下的本地时间。
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_addr拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加$http_x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;
除了这些变量,实际上整个http请求的字段信息都可以获取得到的,例如$http_user_agent, $http_cookie。
这里可以查看所有可支持的变量:
http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
另外还可以打开ngx_http_userid_module,打开之后就可以通过$uid_got或者$uid获取唯一识别后的用户设备。
Syntax: userid on | v1 | log | off;
Default:
userid off;
Context: http, server, location
具体教程可以访问:http://nginx.org/en/docs/http/ngx_http_userid_module.html#var_uid_got
这些信息对于系统的PV和UV计算已经足够了的,设置大部分用户的行为都可以通过这些变量获取得到。
扩展阅读,可以了解一下怎么读取cookie中的某个变量值的方法:
1. 提取整个的Cookies内容到一个变量,然后可以在需要时引用,比如记录到日志里面
if ( $http_cookie ~* "(.*)$") {set $all_cookie $1;}
- 提取指定的一个cookie的值,然后根据需要使用,比如赋值给X-Real-Ip,
set $uid "-"; if ( $http_cookie ~* "uid=(\S+)(;.*|$)"){ set $uid $1; } set $member_id '-'; if ( $http_cookie ~* "select_area_name=(\S+)(;.*|$)" ) { set $member_id $1; }
- 在proxy/fcgi等场景给Cookies增加内容,比如告诉后端你是那一台front。
proxy_set_header Cookie "$http_cookie; node_id=018"
这里增加了名为node_id的一个cookie进去,当然,就这个例子来说,也可以这样传递前端的ID给backend:
proxy_set_header X-CDN-ID "018";
后端通过$_SERVER[‘HTTP_X_CDN_ID’]就可以获取到赋值。
- 配置NGINX的ACCESS LOG
- nginx access log logrotate配置
- nginx的log配置
- JBoss Access log的配置
- JBoss Access log的配置
- JBoss Access log的配置
- nginx access.log format 允许的变量
- hive 分析nginx的access.log日志
- centos里切割nginx的access.log
- Nginx - access log
- nginx access.log
- Apache && Nginx Log的配置
- apache/nginx access.log 说明
- apache/nginx access.log 说明
- 从Nginx的Access log分析系统的健康度
- nginx的access.log文件详解,main的具体意思
- Tomcat access log配置
- nginx access.log 忽略favicon.ico访问记录的方法
- 【初面实习】爱奇艺测试实习生面试总结
- Spring 3整合Quartz 2实现定时任务--转
- (数据挖掘-入门-5)基于内容的协同过滤与分类
- 【LEETCODE】20-Valid Parentheses
- 第十五周 项目1 插入排序
- 配置NGINX的ACCESS LOG
- 第12周项目1图基本算法库
- strtotime小笔记
- (数据挖掘-入门-6)十折交叉验证和K近邻
- 第十三周 Floyd 算法
- 第16周 项目1-交换排序之冒泡排序
- 自定义属性
- 用matlab给图像分块并保存子图
- (第十六周项目3)归并排序算法的改进