我试图从nginx日志中排除* .ong的请求。以下地图有效:
map_hash_bucket_size 128;
map $request $loggable {
"GET /heizungskeller/graphs/ips_var_48757-day.png HTTP/1.1" 0;
default 1;
}
但是通配符不会:
map_hash_bucket_size 128;
map $request $loggable {
"*.png HTTP/1.1" 0;
default 1;
}
为什么会这样?
答案 0 :(得分:5)
通配符*允许更容易地匹配主机名的前缀或后缀值。它只适用于关键字" hostnames"出现在地图块的顶部。
由于您尝试匹配请求行而不是主机名,因此需要使用正则表达式而不是通配符:
map $request_uri $loggable {
default 1;
~*(.*?)\.png$ 0;
}
另外,使用map指令并不是控制访问日志内容的最佳方法,也不是什么。通常,引入与您的模式匹配的新位置并禁用其中的日志记录更为可取。例如:
location ~* ^.+\.(jpg|gif|png)$ {
access_log off;
}