侧边栏壁纸
  • 累计撰写 416 篇文章
  • 累计创建 65 个标签
  • 累计收到 150 条评论

目 录CONTENT

文章目录

Nginx access日志过滤css,jpg,js等日志记录。

Z同学
2022-11-25 / 0 评论 / 1 点赞 / 675 阅读 / 1,192 字
温馨提示:
本文最后更新于 2022-11-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 介绍

当我们的css,js文件等内容没有通过CDN进行分发时。默认将会通过我们的本地服务器进行加载。例如当前博客网站样式,为了确保稳定。css和js等文件配置全部存储在了本地。

那么我们nginx access日志记录中,就会有大量的重复的css和js文件的日志记录。

例如:

Request:"GET /themes/joe2.0/source/lib/prism/prism.min.css?v=1.0.10 HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
Request:"GET /themes/joe2.0/source/lib/prism/themes/prism-darcula.css?v=1.0.10 HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
Request:"GET /themes/joe2.0/source/css/min/global.min.css?v=1.0.10 HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
Request:"GET /themes/joe2.0/source/css/min/post.min.css?v=1.0.10 HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
Request:"GET /themes/joe2.0/source/css/min/responsive.min.css?v=1.0.10 HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
Request:"GET /themes/joe2.0/source/lib/fancybox/jquery.fancybox.min.css HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
Request:"GET /themes/joe2.0/source/lib/jquery@3.5.1/jquery.min.js HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
Request:"GET /themes/joe2.0/source/lib/lazysizes/lazysizes.min.js HTTP/1.1",Referer:"https://zinyan.com/?p=381",UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"

PS: 上面的日志样式通过https://zinyan.com/?p=444 文章可以了解,如何将日志内容输出成上面的效果。

那么我们可以配置日志过滤规则。

2. 配置

2.1 错误配置

我们如果直接填写以下配置。

 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
    access_log off;
}

将上面内容放到了server中。那么所有的样式请求会出错,前端请求将会无法拉取js等样式链接。例如如下所示:

server {
            listen 443 ssl;
            ...
          
			 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
    			access_log off;
			}
    
            location / {
					
                    gzip_static on;
                    add_header Cache-Control public,max-age=60,s-maxage=60;
                    proxy_set_header HOST $host;
                   ...
            }

这样配置后,前端所有样式请求链接都会被拦截。error.log 中就会报错 ,类似下面的错误消息:

 open() "/etc/nginx/html/themes/joe2.0/source/lib/nprogress/nprogress.min.css" failed (2: No such file or directory), 

那么,我们正确的配置方法应该是如何的呢?可以使用日志筛选记录map进行配置。

PS:上面只是错误的一种写法。并不代表不能用location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ 进行过滤哦。

2.2 日志筛选map

我们在access_log 日志下 添加一个map对象; 配置传参为uri,默认为通过返回1,如果匹配到以下的正则表达式.*\.(gif|jpg|jpeg|png|bmp|swf|js|css) 返回0。

map $uri $zinyanloggable {
    default 1;
    ~^(.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|svg|woff|ttf)$) 0;
}

access_log  /var/log/nginx/access.log  main if=$zinyanloggable;

配置完毕后,通过:nginx -t 检测命令格式是否正确。检测通过后输入:service nginx reload。刷新nginx服务 就可以了。

这个时候我们的access日志就会将以上数据的请求给过滤掉。完整示例如下:

 http {
     include       /etc/nginx/mime.types;
     default_type  application/octet-stream;
 log_format  main  'Status:$status,Bytes:$body_bytes_sent,IP:$remote_addr,Time:[$time_iso8601],Host:"$http_host",Request:"$request",Referer:"$http_referer",UserAgent:"$http_user_agent"';
     map $uri $zinyanloggable {
     	default 1;
    	~^(.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|svg|woff|ttf|ico)$) 0;
         
 	}

 access_log  /var/log/nginx/access.log  main if=$zinyanloggable;
     sendfile        on;
     #tcp_nopush     on;
     include /etc/nginx/conf.d/*.conf;
 }

PS: 请注意了,map对象只能在http{}范围下使用。

配置完毕后,我们的access日志将会少很多日志。

PS:建议养成log日志的阅读习惯。因为日志文档会记录服务器的各种状态。我们可以根据数据进行及时修复和优化服务器配置。

1

评论区