2015-03-30 46 views
0

我想從nginx日誌中排除對* .ong的請求。下面的地圖作品:Nginx地圖指令

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; 
    } 

這是爲什麼?

回答

5

通配符*允許更容易匹配主機名的前綴或後綴值。它僅在地圖塊頂部存在關鍵字「主機名」時纔有效。

既然你要匹配的請求線,而不是一個主機名,你需要使用的,而不是通配符正則表達式:

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

此外,使用地圖指令不控制什麼是最好的方式進入訪問日誌,什麼不是。通常,最好引入一個與您的模式相匹配的新位置,並禁用那裏的日誌記錄。例如:

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