前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx access日志过滤css,jpg,js等日志记录

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

作者头像
zinyan.com
发布2022-12-08 17:58:47
2.9K0
发布2022-12-08 17:58:47
举报
文章被收录于专栏:zinyanzinyan

1. 介绍

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

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

例如:

代码语言:javascript
复制
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 错误配置

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

代码语言:javascript
复制
 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
    access_log off;
}

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

代码语言:javascript
复制
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 中就会报错 ,类似下面的错误消息:

代码语言:javascript
复制
 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。

代码语言:javascript
复制
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日志就会将以上数据的请求给过滤掉。完整示例如下:

代码语言:javascript
复制
 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日志的阅读习惯。因为日志文档会记录服务器的各种状态。我们可以根据数据进行及时修复和优化服务器配置。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 zinyan 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 介绍
  • 2. 配置
    • 2.1 错误配置
      • 2.2 日志筛选map
      相关产品与服务
      内容分发网络 CDN
      内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档