Nginx 过滤静态资源文件的访问日志的实现
凌乱的日志
日常使用的Nginx大都既做静态资源服务器,也做反向代理服务器,尤其有些时候考虑到跨域问题,会对静态资源和后端接口使用同一个监听端口,如果不做一下过滤处理,会在access_log中看到大量的例如js、css、jpg等静态资源的请求,比较影响查看后端接口调用的日志
本来没有很在意这个东西,不过在浏览一篇关于Nginx优化的文章时,发现了一种用map定义一个是否写日志的参数的方法,结合最近使用map做动态的跨域配置,索性也是学习及记录一下map的另一个使用场景
使用map过滤访问静态资源文件的日志
http{ log_formatmain'$remote_addr[$time_local]$request$status' 'uct="$upstream_connect_time"rt="$request_time"'; map$uri$not_static{ default1; ~^(.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf)$)0; } server{ listen23456; server_namelocalhost; access_loglogs/test.logmainif=$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]unknownlogformat"if=$not_static"
另一种动静分离日志写法
location~.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf)${ #access_logoff;#不输出访问静态资源的日志 access_loglogs/static_resources.log; }
到此这篇关于Nginx过滤静态资源文件的访问日志的实现的文章就介绍到这了,更多相关Nginx访问日志内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!