如何仅在root上禁用nginx中的日志记录?

时间:2017-09-11 22:41:34

标签: nginx

我想存储除" /"以外的任何uri的访问日志。对于特定的服务器。但是,由于根uri频繁ping,我不想禁用该uri的日志记录。我使用的是nginx 1.10.3。相关配置是:

http {
    access_log /var/log/nginx/access.log;
}

server {
    access_log off;
    location ~ ^/$ {
        access_log /var/log/nginx/example_com_access.log combined;
    }
}

我尝试了几种access_log参数配置。例如,

  • 打开服务器的登录状态,关闭位置
  • 使用不同的方法匹配位置(即=,〜,(无)等)

我尝试的所有内容似乎都记录了每个请求,或者没有记录对服务器的请求。任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

试试这个:

http {
    access_log off;
}

server {
    location ~ ^/$ {
        access_log /var/log/nginx/example_com_access.log combined;
    }
}

它只会记录location ~^/$的请求,并暗示您需要按locationserver块添加access_log

其他选项可能是:

http {
    access_log on;
}

server {
    access_log off;

    location ~ ^/$ {
        access_log /var/log/nginx/example_com_access.log combined;
    }
}

答案 1 :(得分:1)

根据http://nginx.org/r/access_log,您实际上可以在某个位置的access_log语句中使用if指令。此外,您可以直接在if指令中使用access_log条件参数,从nginx 1.7.0开始。

实现此目标的最佳方法可能是在nginx 1.7.0及更高版本中使用mapif access_log参数:

map $uri $loggable {
    /  0;
    default 1;
}

access_log /path/to/access.log combined if=$loggable;

否则,根据您的配置,您可能会假设多个location指令可以应用于给定请求,而不是这种情况 - 只有一个{{1可以匹配给定的请求。

最好的方法是:

location