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