map "$request_uri $http_referer $http_user_agent $http_cookie" $flag {
default 0;
# rules
"~test" 1;
"~1234" 1;
# …
}
location ~ example {
if (\$flag = 1) {
access_log /var/log/nginx/flag.log;
}
}
有什么办法可以知道哪些规则map
以及哪部分$request_uri $http_referer $http_user_agent $http_cookie
匹配?
我需要这个来调试。如果日志被淹没,就很难判断哪条map
规则有错误并导致误报。
答案1
您可以在 中使用命名捕获map
。在评估地图后,定义的变量可用于形成地图结果或配置中的任何其他地方。
例如:
map ... $flag {
default 0;
~(?<mymap>test) 1;
~(?<mymap>1234) 1;
}
...
if ($flag) { ... }
该if
块将评估的值$flag
,并且如果达到包含命名捕获的正则表达式,则的值$mymap
将设置为test
或1234
。