怎么设置 nginx 日志不记录带参数的图片?

2019-04-04 23:43:47 +08:00
 z069
因为图片加了参数适配缩略图,导致日志中存在大量的图片的访问记录,怎么才能设置不记录这些带有参数的日志呢?

比如这个:
/pic.png&w=280&h=210&a=&zc=1


我设置了:
location ~ .*\.(png&w=280&h=210&a=&zc=1)$ {
expires 30d;
access_log off;
}

location ~ .*\.(png)$ {
expires 30d;
access_log off;
}

但是貌似没有效果,依然会记录,求教各位大佬,这个有什么办法设置么?
2844 次点击
所在节点    NGINX
4 条回复
ryd994
2019-04-05 00:10:11 +08:00
你这个 URL 合法吗?
&是保留字符,用于分割 args
z069
2019-04-05 00:19:18 +08:00
@ryd994 刚才看了一下,确实不全,实际是 /thumbnail.php?src=https://www.domain.com/pic/pic.png&w=280&h=210&a=&zc=1
ryd994
2019-04-05 00:31:56 +08:00
location 只匹配 path 部分,不匹配整个 URL
map $arg_src $log_filter {
default 1;
~ .*\.(png)$ 0;
}

access_log 照抄原来的,官方 manual 里也能查到默认的。在最后加上 if=$log_filter

思路就是这样,剩下的 rtfm:
http://nginx.org/en/docs/http/ngx_http_log_module.html
http://nginx.org/en/docs/http/ngx_http_map_module.html
z069
2019-04-09 10:53:04 +08:00
@ryd994 你好,感谢您的解答

按照您的提示,我在 http 中添加了
map $arg_src $log_filter {
default 1;
~ .*\.(png)$ 0;
}
access_log /data/wwwlogs/domain.com.log combined if=$log_filter;
测试提示[emerg] invalid number of the map parameters


按照文档中的示例,
添加在同一位置的:
map $status $loggable {
~^[403] 0;
default 1;
}
access_log /data/wwwlogs/domain.com.log combined if=$loggable;
这个 nginx -t 后提示通过,麻烦看下,配置哪有问题吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552231

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX