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