我正试图排除一个IP地址以及一个用户代理,使其不出现在我的任何vhost日志中。每个虚拟主机在各自的文件中配置了自己的日志文件。我将$if=$variable
附加到每个日志文件定义中,并将其添加到nginx.conf:
map $http_user_agent $variable {
~MyUserAgent 0;
default 1;
}
这有效。现在我想添加条件,例如此变量的IP地址(无需再次更改每个虚拟主机的配置)。
如果有可能进行全局配置,同时保留不同的日志文件位置,这也是可行的解决方案。
答案 0 :(得分:1)
如果每个虚拟主机的日志记录都相同,则每个托管服务器甚至都不需要单独的文件。您可以在服务器级别指定日志记录指令,并使用变量为每个虚拟主机创建不同的日志
access_log /var/log/nginx/$host.log combined;
error_log /var/log/nginx/$host.error.log;
您可以将地图变量设置为任意值,并且可以组合多个地图以创建复杂的图案。您可以将其设置为有用的值,而不是将默认值设置为1,然后将其包含在日志中。
您可以在单个映射中匹配多个变量,因此您可以通过将其更改为以下内容来修改映射以将IP从日志中排除:
map $http_user_agent$remote_addr $variable {
~MyUserAgent 0;
~my.ip.ad.dy 0;
default 1;
}
一旦找到匹配项,地图评估就会返回,因此,如果您的地图比较复杂,那么列出比较值的顺序就很重要