Несколько картографических условий nginx для одной переменной - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь исключить ни ip-адрес, ни пользовательский агент из любых журналов моего vhost.Каждый vhost имеет свой собственный файл журнала, настроенный в соответствующем файле.Я добавил $if=$variable к каждому из определений файла журнала и добавил его в nginx.conf:

map $http_user_agent $variable {
  ~MyUserAgent 0;
  default 1;
}

Это работает.Теперь я хочу добавить условия, например, IP-адрес для этой переменной (без необходимости повторного изменения конфигурации каждого отдельного хоста).

Если это возможно настроить глобально, сохраняя при этом различные местоположения файла журнала, которые будуттакже возможное решение.

1 Ответ

0 голосов
/ 13 сентября 2018

Если регистрация для каждого vhost одинакова, вам даже не нужны отдельные файлы для каждого хоста. Вы можете указать директиву регистрации на уровне сервера и использовать переменную для создания разных журналов для каждого vhost

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;
}

Оценка карты возвращается, как только найдено совпадение, поэтому, если ваша карта сложная, важен порядок, в котором вы перечисляете значения сравнения

...