Nginx map指令

aag*_*aag 0 nginx

我试图从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)

这是为什么?

Iva*_*lev 5

通配符*允许更容易地匹配主机名的前缀或后缀值.它仅在关键字"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)