Regex Nginx位置或映射以禁用特定GET参数的访问日志
我一直在尝试从nginx访问日志中筛选出一大堆行。这些行包含一个特定的参数,所以我认为很容易过滤掉它们。请求的例子:Regex Nginx位置或映射以禁用特定GET参数的访问日志,regex,nginx,get,url-parameters,access-log,Regex,Nginx,Get,Url Parameters,Access Log,我一直在尝试从nginx访问日志中筛选出一大堆行。这些行包含一个特定的参数,所以我认为很容易过滤掉它们。请求的例子: /index.php?cmd=thumb&##### /index.php?cmd=preview&##### 哪里可以是任何东西/但是,应记录没有此“cmd”参数(但可能有其他参数)的index.php 我试过以下方法 server { location ~ /index\.php\?cmd.* { access_log off;
/index.php?cmd=thumb&#####
/index.php?cmd=preview&#####
哪里可以是任何东西/但是,应记录没有此“cmd”参数(但可能有其他参数)的index.php
我试过以下方法
server {
location ~ /index\.php\?cmd.* {
access_log off;
}
}
我的猜测是,location只查看您需要的服务器上的文件,而不是任何reuqest参数。例如,这可以解释为什么location~*\(?:css|js)${access\u log off;}
(注意$
)也会阻止日志记录请求,比如/something.js?v=blahblah
。因此,我的第一个选择肯定是无效的。这已得到证实
或
或
到目前为止,所有这些都没有达到预期的效果。我仍然相信这应该是可能的,而且我在所有这些实现中都做了一些错误的事情。有人能帮我吗
if($args~^cmd=.+){access\u log off;}
if cmd始终是第一个参数,或者只是if($args~cmd){access\u log off;}
。(thx理查德·史密斯)~
和/index\.php\?cmd.*0之间的空格来工作代码>这一个允许我全局设置更多要忽略的条件,所以我坚持使用这一个
您的第二个选项看起来很有希望,但是您需要将
if
块放在处理PHP脚本的位置
块中。它可能看起来像location~\.php${…}
@RichardSmith-Thx,因为在这个实例中我只有一个index.php,即location/index.php{
如上所述是快速CGI_通行证
等所在的位置
块。但是如果
块在那里不起作用。非常奇怪。我测试了你的如果
块,它工作得很好。请确保你重新启动nginx
读取新配置。@RichardSmith每次更改后我都会使用quickl我做了一个nginx-t
,然后重新启动服务,所以我肯定不是这样。不过,我找到了一个解决方案,可以让第三个选项正常工作(删除单个空间)。仍然想知道为什么第一个和第二个不起作用,所以把这个问题留着。我的猜测是location
只查看您需要的服务器上的文件,而不是任何reuqest参数。例如,这可以解释为什么location~*\(?:css|js)${access\u log off;}
(注意$
)也会阻止日志记录请求,比如/something.js?v=blahblah
。因此,我的第一个选项肯定是无效的。
server {
location /index.php {
if ($arg_cmd) {
access_log off;
}
}
}
http {
map $request_uri $log {
~ /index\.php\?cmd.* 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$log;
}