Nginx 过滤静态资源文件的访问日志的实现


Posted in Servers onMarch 31, 2021

凌乱的日志

日常使用的 Nginx 大都既做静态资源服务器,也做反向代理服务器,尤其有些时候考虑到跨域问题,会对静态资源和后端接口使用同一个监听端口,如果不做一下过滤处理,会在 access_log 中看到大量的例如 js、css、jpg 等静态资源的请求,比较影响查看后端接口调用的日志

本来没有很在意这个东西,不过在浏览一篇关于 Nginx 优化的文章时,发现了一种用 map 定义一个是否写日志的参数的方法,结合最近使用 map 做动态的跨域配置,索性也是学习及记录一下 map 的另一个使用场景

使用 map 过滤访问静态资源文件的日志

http {
  log_format main '$remote_addr [$time_local] $request $status '
           'uct="$upstream_connect_time" rt="$request_time"';

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

  server {
    listen 23456;
    server_name localhost;
    access_log logs/test.log main if=$not_static;
  }
}

解释说明:

  • 自定义一个 log_format,标识为 main
  • 对请求中的 uri 做匹配,如果是以 gif、jpg、css、js 等作为结尾的资源,则 $not_static 为0,否则为1
  • 对访问23456端口的请求,access_log 指定使用标识为 main 的自定义日志格式,且仅当 $not_static 为1时才记录日志,关于 if 参数,可参考 官方文档
  • 有一点需要注意,access_log 中使用 if 参数时,必须显式指定一个 log_format,否则会报错: nginx: [emerg] unknown log format "if=$not_static"

另一种动静分离日志写法

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf)$ {
  #access_log off; #不输出访问静态资源的日志
  access_log logs/static_resources.log;
}

到此这篇关于Nginx 过滤静态资源文件的访问日志的实现的文章就介绍到这了,更多相关Nginx 访问日志内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 Servers
nginx部署多前端项目的几种方法
May 25 Servers
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
Docker 镜像介绍以及commit相关操作
Apr 13 Servers
openstack云计算keystone组件工作介绍
Apr 20 Servers
Nginx 安装SSL证书完成HTTPS部署
Apr 28 Servers
Vscode中SSH插件如何远程连接Linux
May 02 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
Docker与K8s关系介绍不会Docker也可以使用K8s
Jun 25 Servers
Docker安装MySql8并远程访问的实现
Jul 07 Servers
win10搭建配置ftp服务器的方法
Aug 05 Servers
Nginx的反向代理实例详解
nginx反向代理时如何保持长连接
Mar 31 #Servers
Nginx + consul + upsync 完成动态负载均衡的方法详解
Mar 31 #Servers
浅谈Nginx 中的两种限流方式
Mar 31 #Servers
查看nginx配置文件路径和资源文件路径的方法
Mar 31 #Servers
nginx里的rewrite跳转的实现
Mar 31 #Servers
nginx基于域名,端口,不同IP的虚拟主机设置的实现
Mar 31 #Servers
You might like
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
Angularjs 基础入门
2014/12/26 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
angular分页指令操作
2017/01/09 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
2017/10/26 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
python实现在sqlite动态创建表的方法
2015/05/08 Python
神经网络python源码分享
2017/12/15 Python
python递归实现快速排序
2018/08/18 Python
python3实现猜数字游戏
2020/12/07 Python
python将音频进行变速的操作方法
2020/04/08 Python
会计学生自我鉴定
2014/02/06 职场文书
预防传染病方案
2014/06/14 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python
Golang入门之计时器
2022/05/04 Golang