使用nginx收集页面上报的信息,并且解析。
一、页面请求
1.head请求
通常页面请求后端接口都是GET请求或者POST请求,HTTP还有HEAD的请求方式,head请求的特点是不返回消息体,head请求主要用来检查资源有效性。在数据上报的时候也可以使用head请求。
2.发送请求
通过发送http:ip:端口/log.gif?key=value 的方式来进行日志的收集。key和value可以通过base64进行转码一下,以免传输解析时有问题。
二、nginx配置配置如下(示例):
#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# A,定义格式变量为 arg_{问号后面的key}
# http:ip:port?fromType=1231&actionType=12321
log_format user_log_format "$arg_fromType|$arg_actionType";
#access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /img {
content_by_lua '
ngx.say("saddas")';
}
//B
location /log.gif {
#arg_fromType 接收 /log.gif?fromType= 的value
#设置别名之后 user_log_format的变量名可改为fromType
#set_unescape_uri $fromType $arg_fromType;
#set_unescape_uri $actionType $arg_actionType;
#打开子请求日志
log_subrequest on;
#将日志保存到user_defined中,user_log_from 在上面定义
access_log logs/user_defined.log user_log_format;
#返回一个空的文件
add_header Expires "Fri, 01 Jan 1980 00:00:00 GMT";
add_header Pragma "no-cache";
add_header Cache-Control "no-cache, max-age=0, must-revalidate";
#返回一个1×1的空gif图片
empty_gif;
}
}
}
A:新增一个user_log_format来解析参数
B:配置/log.gif来接收请求。set_unescape_uri 用来设置参数别用。
2.测试
发送请求http://192.168.16.128/log.gif?fromType=3&actionType=2
到nginx。之后nginx的user_defined.log中打印如下
3|2
日志收集完成