Nginx map指令

时间:2015-03-30 19:38:07

标签: 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;
    }

但是通配符不会:

map_hash_bucket_size 128;
map $request $loggable {
    "*.png HTTP/1.1" 0;
    default 1;
    }

为什么会这样?

1 个答案:

答案 0 :(得分:5)

通配符*允许更容易地匹配主机名的前缀或后缀值。它只适用于关键字" hostnames"出现在地图块的顶部。

由于您尝试匹配请求行而不是主机名,因此需要使用正则表达式而不是通配符:

map $request_uri $loggable {
    default 1;
    ~*(.*?)\.png$ 0;
}

另外,使用map指令并不是控制访问日志内容的最佳方法,也不是什么。通常,引入与您的模式匹配的新位置并禁用其中的日志记录更为可取。例如:

location ~* ^.+\.(jpg|gif|png)$ {
    access_log off;
}