Nginx记录位置

时间:2018-10-12 07:24:35

标签: nginx nginx-location nginx-config

在设置nginx日志时需要一些帮助,以便它们不会重复。

我的配置如下。我想要实现的是,所有http://example.com/app的日志都进入文件app.access.log,而网站其余部分的日志都进入文件main.access.log

但是,以下配置将应用程序日志记录到app.access.log和main.access.log中。

server {

       access_log /var/log/nginx/main.access.log;


       location /app {
           access_log /var/log/nginx/app.access.log;
       }
}

有人知道如何解决此问题吗?

2 个答案:

答案 0 :(得分:1)

您可以使用否定正则表达式来拦截所有未定向到应用程序的请求,并在其中定义access_log指令。然后为应用定义其他位置

location ~ ^((?!app).)*$ {
        access_log /var/log/nginx/not-an-app.access.log;
   }

location /app { 
       access_log /var/log/nginx/app.access.log;
   }

不过,我认为这有点费力,在将其投入生产之前,我会对此进行测试。

答案 1 :(得分:0)

access_log指令包含一个 if = condition ,可用于控制日志记录。

例如:

map $request_uri $loggable {
    ~^/app  0;
    default 1;
}
server {
    access_log /var/log/nginx/main.access.log if=$loggable;
    ...
}

有关详细信息,请参见this document

另一种方法是将所有内容记录在一起,然后使用grep将其分成两个单独的文件。


受@Andrea解决方案的启发,您还可以使用以下模式:

server {
    location / {
        access_log /var/log/nginx/main.access.log;

        location /foo { ... }
        location /bar { ... }
        ...
    }
    location /app {
        access_log /var/log/nginx/app.access.log;
    }
}

因此,顶层只有两个顶层location块,而所有其他location块都嵌套在默认的“位置”内。