next项目访问日志去重小技巧
需求提出
之前在跟SEO做网站日志分析的时候受到了一部分资源请求数据的影响,统计出来的ip访问次数远远大于实际值,从日志中或者网站控制台看到每个页面都会发送十几个请求,而这些请求都会被统计到网站日志中,在后续的分析哪些ip请求了哪些页面时,往往拿不到真实的值。于是考虑处理next项目的请求,过滤到资源请求只保留html的访问日志。
具体解决方案+配置代码
上述问题的根源在于找到资源请求的共同点,利用正则表达式匹配并单独配置location。
先看一下原本的网站访问配置和日志配置,原有的网站访问配置做了一些限流和缓存的操作,感兴趣可以移步nginx缓存node服务的伪静态页面,日志访问的关键代码在前两行
location /{
access_log logs/website.log;
proxy_pass http://localhost:8080;
limit_req zone=marklimit burst=20 nodelay;
add_header Cache-Control max-age=no-cache;
proxy_cache next-cache;
proxy_cache_valid 10m;
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
include /usr/local/nginx/conf/rewrite/*.conf;
}
接下来看网站的请求控制台抓包:
如下图所示,扫了一圈后发现一个共同点:next项目资源请求会带有_next
标志,所以在原有的网站访问配置中加入后面的location配置即可
接下来就是添加location配置,拦截带有_next
标志的请求,关闭日志并重新代理到项目端口
location ~*\.*_next\.* {
access_log off;
add_header Cache-Control max-age=86400;
proxy_pass http://localhost:8080;
}