Nginx使用map和regex从访问日志中排除URL,以捕获URL中单词的一部分

Nginx使用map和regex从访问日志中排除URL,以捕获URL中单词的一部分,regex,nginx,pcre,Regex,Nginx,Pcre,我有nginx1.17,配置成功地将POST-request方法从日志中排除 map $request_method $loggable { default 1; POST 0; } access_log /var/log/nginx/nginx_access.log main if=$loggable; 我尝试在下面的config中排除任何URL,因为它是单词“rsey”的一部分,不区分大小写匹配,例如JerSey2018 map_hash_bucket_siz

我有nginx1.17,配置成功地将POST-request方法从日志中排除

map $request_method $loggable {
default       1;
POST          0;
}
access_log /var/log/nginx/nginx_access.log main if=$loggable;
我尝试在下面的config中排除任何URL,因为它是单词“rsey”的一部分,不区分大小写匹配,例如JerSey2018

map_hash_bucket_size 128;
map $request_uri $loggable {
    (.*?)rsey(.*?) 0;
    default 1;
    }
map $request_method $loggable {
default       1;
POST          0;
}
access_log /var/log/nginx/nginx_access.log main if=$loggable;
但通过这个配置,NGINX仍然从日志中排除POST请求,但仍然在类似URL的地方写入日志 因此,我的map/regex规则没有捕获必要的内容-日志示例->

example.com 88.256.54.27 - - [01/Aug/2019:06:52:00 -0500]  "GET /ID-16409696108601-JerSey2018-report.html HTTP/1.1" 200 3366 "http://example.com/sitemap.xml" "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
Thx的任何提示和想法尝试…可能有人可以告诉我一个错误的配置上面

***稍晚一点-厌倦了与Nginx地图抗争,似乎最好用类似的方式通过一个单词的一部分来捕捉位置(尽管不太管用)

那么现在thx有什么想法可以尝试在这一行中捕捉Nginx中真正的通配符

location ~ /(.*)rsey(.*)/ {

不能从两个
map
块控制同一变量。但是您可以使用第一个映射的值作为第二个映射的默认值

例如:

map $request_uri $loguri {
    default  1;
    ~*rsey   0;
}
map $request_method $loggable {
    default  $loguri;
    POST     0;
}
access_log /var/log/nginx/nginx_access.log main if=$loggable;

有关详细信息,请参见。

您无法从两个
映射
块控制同一变量。但是您可以使用第一个映射的值作为第二个映射的默认值

例如:

map $request_uri $loguri {
    default  1;
    ~*rsey   0;
}
map $request_method $loggable {
    default  $loguri;
    POST     0;
}
access_log /var/log/nginx/nginx_access.log main if=$loggable;

详情请参阅。

遗憾的是,我的工作不起作用,情况是一样的,我已经玩了所有可能的变化,但结果是一样的。你能给我举个例子吗?让我们只留下一个map regex来捕获单词的一部分并从日志中排除…thx in advanceI我只是注意到您试图匹配的文本包含大写的
s
。使用
~rSey
~*rSey
,遗憾的是没有用,情况是一样的,我玩了所有可能的变化,但结果都一样。你能给我举个例子吗?让我们只留下一个map regex来捕获单词的一部分并从日志中排除…thx in advanceI我只是注意到您试图匹配的文本包含大写的
s
。使用
~rSey
~*rSey