Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Nginx位置或映射以禁用特定GET参数的访问日志_Regex_Nginx_Get_Url Parameters_Access Log - Fatal编程技术网

Regex Nginx位置或映射以禁用特定GET参数的访问日志

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;

我一直在尝试从nginx访问日志中筛选出一大堆行。这些行包含一个特定的参数,所以我认为很容易过滤掉它们。请求的例子:

/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
。因此,我的第一个选择肯定是无效的。这已得到证实

到目前为止,所有这些都没有达到预期的效果。我仍然相信这应该是可能的,而且我在所有这些实现中都做了一些错误的事情。有人能帮我吗

  • 第一个选项永远不会起作用(见下文)
  • 第二个选项仅在参数的值计算为TRUE时有效。在我的例子中,我无法控制值本身(它是一个散列),因此这对我来说不起作用。在我的例子中,另一个选项是
    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;
    }