我如何找出匹配的“map”规则集?

我如何找出匹配的“map”规则集?
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将设置为test1234

相关内容