ConditionChecker#

Действие ConditionChecker предназначено для проверки условий, заданных на этапе конфигурирования. В качестве проверяемых элементов в основном используются значения переменных Nginx (встроенных или определенных пользователем).

Параметры:

  • rules - отображение на список правил.

Каждое условие состоит из трех элементов:

  • var — переменная или выражение из переменных;

  • val — значение с которым будет сравниваться значение var. В качестве val может использоваться:

    • константа;

    • переменная, их сочетания или сочетания с константами;

    • данные из файла.

  • operator — операция сравнения, одно из значений:

    • «=» — равенство (при сравнении строк используется посимвольное сравнение);

    • «>» — больше, для числовых значений;

    • «<» — меньше, для числовых значений;

    • «>=» — больше или равно, для числовых значений;

    • «<=» — меньше или равно, для числовых значений;

    • «IN» — вхождение в перечисление;

    • «NOT IN» — отсутствие вхождения;

    • «!=» — неравенство значений;

    • «~» — регулярное выражение с учетом регистра символов;

    • «~*» — регулярное выражение без учета регистра символов;

    • «!~» — негативное регулярное выражение с учетом регистра символов;

    • «!~*» — негативное регулярное выражение без учета регистра символов.

При проверке правила объединяются логическим оператором «И».

Например, необходимо выполнить типичную проверку:

  1. Если запрос с методом GET, и запрос содержит параметр myparam, то запрос пропускаем.

  2. Если запрос с методом POST, и запрос содержит параметр pparam, то запрос пропускаем.

  3. Во всех остальных случаях блокируем.

В этом случае конфигурация цепочек будет выглядеть следующим образом:

chains:
  response_chains:
    - actions:
      - action: ConditionChecker
        conditions:
           - var: $http_method
             val: GET
             operator: =
        params:
          rules:
            - var: $http_args
              val: myparam=
              operator: "~"
     - action: ConditionChecker
        conditions:
           - var: $http_method
             val: POST
             operator: "="
        params:
          rules:
            - var: $http_args
              val: pparam=
              operator: "~"
     - action: ConditionChecker
        params:
          rules:
            - var: $http_method
              val: "POST,GET"
              operator: IN

Работа с данными из файла#

ConditionChecker умеет работать с файлами. Допустим, имеется файл, содержащий в себе перечень разрешенных методов: allowed_methods.data (get, post, put).

Каждое значение находится на новой строке, то есть в качестве разделителя используется «\n». Мы можем указать ConditionChecker, что перечень разрешенных методов содержится в файле allowed_methods.data:

chains:
  response_chains:
    - actions:
      - action: ConditionChecker
        params:
          rules:
            - var: $http_method
              val: "/sowa/profile_storage/custom/*profile_name*/allowed_methods.data@"
              operator: IN

Обратите внимание на символ «@» в конце имени файла. Данный символ говорит о том, что в значении используется именно файл, а не строковый параметр. Таким образом, после загрузки данных из файла, данный конфигурационный файл будет эквивалентен следующему:

chains:
  response_chains:
    - actions:
      - action: ConditionChecker
        params:
          rules:
            - var: $http_method
              val: "GET,POST,PUT"
              operator: IN

Также имеется возможность использовать пары «ключ:значение». Для этого данные в файле methods.data должны быть объявлены в следующем формате:

allowed_method:POST
forbidden_method:GET

Тогда, указывая в конфигурационном файле в качестве значения «filename@property», будет подтягиваться значение свойства «property» из файла «filename».

Пример использования:

chains:
  response_chains:
    - actions:
      - action: ConditionChecker
        params:
          rules:
            - var: $http_method
              val: "/sowa/profile_storage/custom/*profile_name*/methods.data@allowed_method"
              operator: "="

Заполняемые переменные#

Действие ConditionChecker заполняет следующие переменные (в версии 2.2):

  • clj_condition_failed — условие, которое не было выполнено;

  • clj_condition_expected_value — ожидаемое значение, при котором условие было бы выполнено;

  • clj_condition_current_value — реальные значения, при которых условие не было выполнено.