var: Динамическое присвоение переменных через предопределенные функции
Установка Debian/Ubuntu
Эти документы относятся к пакету APT nginx-module-var, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке репозитория APT.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-var
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|-------------------|-------------|-----------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
ngx_http_var_module — это модуль nginx, который динамически присваивает новые переменные через предопределенные функции.
Содержание
- Название
- Содержание
- Статус
- Синопсис
- Установка
- Предварительные требования
- Сборка модуля
- Директивы
- var
- Автор
- Лицензия
Статус
Этот модуль Nginx в настоящее время считается экспериментальным. Проблемы и запросы на изменение приветствуются, если вы столкнетесь с какими-либо проблемами.
Синопсис
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
var $new_var set $scheme://$host$request_uri;
}
}
Директивы
var
Синтаксис: var $new_variable function [-i] args... [if\=condition]
По умолчанию: -
Контекст: http, server, location
Определяет новую переменную, значение которой является результатом вычисления функции. Значение переменной не может быть закэшировано и пересчитывается каждый раз, когда оно используется.
Если на текущем уровне не определяется переменная с тем же именем, она может быть унаследована с предыдущего уровня.
Параметр -i используется для игнорирования регистра (доступен только в некоторых функциях).
За исключением имени функции, параметра -i и регулярного выражения, все параметры могут содержать переменные.
Когда значение параметра недопустимо, значение переменной пустое. В булевых функциях недопустимые параметры также приведут к пустому значению вместо 0.
var не может использоваться для определения одной и той же переменной одновременно с директивами map или geo. Однако директива set может использоваться для переопределения переменных, определённых с помощью var.
Доступны следующие функции:
#### Условное суждение ####
Возвращает 1, если входной параметр пуст или равен 0, в противном случае возвращает 0
var $bool_var not str;
Возвращает 1, если все входные параметры непустые и не равны 0, в противном случае возвращает 0
var $bool_var and str1 str2...;
Возвращает 1, если любой входной параметр непустой и не равен 0, в противном случае возвращает 0
var $bool_var or str1 str2...;
Оценка строки
Проверяет, является ли строка пустой, возвращает 1 или 0
var $bool_var is_empty str;
Проверяет, является ли строка непустой, возвращает 1 или 0
var $bool_var is_not_empty str;
Проверка, является ли строка числом, возвращает 1 или 0. Разрешены только десятичные числа. Отрицательные числа и дроби поддерживаются.
var $bool_var is_num str;
Проверяет, равны ли строки, возвращает 1 или 0
var $bool_var str_eq [-i] str1 str2;
Проверяет, не равны ли строки, возвращает 1 или 0
var $bool_var str_ne [-i] str1 str2;
Проверяет, имеет ли строка указанный префикс, возвращает 1 или 0
var $bool_var starts_with [-i] str prefix;
Проверяет, имеет ли строка указанный суффикс, возвращает 1 или 0
var $bool_var ends_with [-i] str suffix;
Проверяет, присутствует ли подстрока, возвращает 1 или 0
var $bool_var содержит [-i] str sub_str;
Проверяет, является ли str1 одним из str2 .. strn, возвращает 1 или 0
var $bool_var str_in [-i] str1 str2 str3 .. strn;
Общие операции со строками
Установить значение переменной напрямую
var $new_var set src_str;
Длина строки
var $new_var len src_str;
Преобразовать в верхний регистр
var $new_var upper src_str;
Преобразовать в нижний регистр
var $new_var lower src_str;
Приведение первой буквы каждого слова к верхнему регистру (слова разделены неалфавитными символами)
var $new_var initcap src_str;
Удаление пробелов в начале и в конце строки или других символов
var $new_var trim src_str [char];
Удаление начальных пробелов или других символов
var $new_var ltrim src_str [char];
Удаление пробелов или других символов в конце строки
var $new_var rtrim src_str [char];
Перевернуть строку
var $new_var reverse src_str;
Получение начальной позиции подстроки
var $new_var position [-i] src_str sub_str;
Повторите строку заданное количество раз
var $new_var repeat src_str times;
Извлечение подстроки
var $new_var substr src_str start [len];
Заменить ключевое слово
var $new_var replace [-i] src_str src dst;
Извлечение параметров
Извлечение значения из списка параметров. Пример использования заключается в извлечении параметров запроса без необходимости написания регулярного выражения, но его также можно использовать для поиска значений в любом списке пар имя/значение. Если существует несколько вхождений параметра, возвращается только первое. Переменной присваивается пустое значение. Разделитель между именем и значением параметра по умолчанию равен '=', а разделитель параметров по умолчанию равен '&'.
var $new_var extract_param [-i] param_name src_string [separator] [delimiter];
пример: запрос "foo=123&bar=456&baz=789". Если имя параметра - bar, а разделитель - &, то значение переменной будет 456.
var $extraed_arg_bar extract_param bar "foo=123&bar=456&baz=789" & =;
Операция с JSON
Извлечение значения json из допустимой строки json.
Требуется установить библиотеку cJSON (см. раздел Установка)
var $new_var extract_json json subkey1 [subkey2] [subkey3] ...;
Поддерживает вложенные ключи объектов и индексы массивов [n]
Возвращает строковые значения без кавычек, другие типы как JSON-строки
Массивы и объекты возвращаются как компактные JSON-строки
Примеры:
Извлечение из вложенного объекта
var $new_var extract_json '{"a":{"b":{"c":3}}}' a b c;
Результат: 3
Извлечение из массива с помощью [index]
var $new_var extract_json '{"users":[{"name":"Alice"},{"name":"Bob"}]}' users [0] name;
Результат: Алиса
Извлечение массива в виде строки JSON
var $items extract_json '{"data":[1,2,3]}' data;
Результат: [1,2,3]
Извлечение объекта в виде JSON-строки
var $user extract_json '{"user":{"name":"Bob","age":30}}' user;
Результат:
Оценка регулярного выражения
Проверьте, соответствует ли регулярное выражение, возвращает 1 или 0
var $bool_var regex_match [-i] src_str match_regex;
Операции с регулярными выражениями
Захват регэксп
var $new_var regex_capture [-i] src_str regex assign_value;
Замена regex
var $new_var regex_sub [-i] src_str regex replacement;
Математическое суждение
Проверьте, равны ли числа, возвращает 1 или 0
var $bool_var eq num1 num2;
Проверьте, не равны ли числа, возвращает 1 или 0
var $bool_var ne num1 num2;
Проверьте, меньше ли, возвращает 1 или 0
var $bool_var lt num1 num2;
Проверьте, меньше ли или равно, возвращает 1 или 0
var $bool_var le num1 num2;
Проверьте, больше ли, возвращает 1 или 0
var $bool_var gt num1 num2;
Проверьте, больше ли или равно, возвращает 1 или 0
var $bool_var ge num1 num2;
Проверьте, находится ли значение в диапазоне от start_num до end_num, если end_num не указан, диапазон будет [0, start_num], верните 1 или 0
var $bool_var range num start_num [end_num];
Проверьте, является ли число одним из num2 .. numn, возвращает 1 или 0
var $bool_var в num1 num2 .. numn;
Математические операции
Абсолютное значение (возвращает оригинальный формат без знака отрицания)
var $new_var abs num;
Максимальное значение (возвращает с оригинальным форматом)
var $new_var max num1 num2;
Минимальное значение (возвращает с оригинальным форматом)
var $new_var min num1 num2;
Сложение целых чисел
var $new_var add int1 int2;
Вычитание целых чисел
var $new_var sub int1 int2;
Умножение целых чисел
var $new_var mul int1 int2;
Целочисленное деление, int2 не может быть 0
var $new_var div int1 int2;
Целочисленный модуль, int2 не может быть 0
var $new_var mod int1 int2;
Побитовая операция AND
var $new_var побитовое_и int1 int2;
Побитовая операция NOT
var $new_var побитовый_не int;
Побитовое ИЛИ
var $new_var побитовое_или int1 int2;
Побитовая операция XOR (исключающее ИЛИ)
var $new_var bitwise_xor int1 int2;
Операция побиционного сдвига влево, shift_bits должен быть >= 0
var $new_var lshift int shift_bits;
Операция правого сдвига (арифметический сдвиг, бит знака сохраняется), shift_bits должен быть >= 0
var $new_var rshift int shift_bits;
Операция беззнакового сдвига вправо (логический сдвиг, заполнение нулями), shift_bits должно быть >= 0
var $new_var urshift int shift_bits;
Округление до n значащих цифр
var $new_var round src_num int;
Прямое усечение десятичной части (без округления)
var $new_var int src_num;
Значение.floor, наибольший целое число, меньшее или равное исходному
var $new_var floor src_num;
Округление вверх, наименьшее целое число, большее или равное источнику
var $new_var ceil src_num;
Случайное положительное целое число, диапазон [start_int, end_int], если end_int не указан, то диапазон [0, start_int]
var $new_var rand [start_int] [end_int];
Случайная шестнадцатеричная последовательность в указанном. number_of_bytes должно быть от 1 до 32, по умолчанию 32
var $new_var hexrand [number_of_bytes];
Кодирование и декодирование
Преобразование двоичных чисел в шестнадцатеричные
var $new_var hex_encode src_str;
Преобразование шестнадцатеричного в двоичный
var $new_var hex_decode src_str;
Десятичное в шестнадцатеричное
var $new_var dec_to_hex dec;
Шестнадцатеричный в десятичный
var $new_var hex_to_dec hex;
Полное кодирование URI
var $new_var escape_uri src_str;
Кодирование аргументов
var $new_var escape_args src_str;
Кодирование компонентов URI
var $new_var escape_uri_component src_str;
HTML кодирование
var $new_var escape_html src_str;
Декодирование URI
var $new_var unescape_uri src_str;
Кодирование Base64
var $new_var base64_encode src_str;
Кодирование Base64url
var $new_var base64url_encode src_str;
Декодирование Base64
var $new_var base64_decode src_str;
Декодирование Base64url
var $new_var base64url_decode src_str;
Расчеты криптографических хешей
CRC32
var $new_var crc32 src_str;
MD5
var $new_var md5sum src_str;
SHA1
var $new_var sha1sum src_str;
SHA224
var $new_var sha224sum src_str;
SHA256
var $new_var sha256sum src_str;
SHA384
var $new_var sha384sum src_str;
SHA512
var $new_var sha512sum src_str;
Шифрование HMAC_MD5
var $new_var hmac_md5 src_str secret;
Шифрование HMAC_SHA1
var $new_var hmac_sha1 src_str secret;
Шифрование HMAC_SHA224
var $new_var hmac_sha224 src_str secret;
Шифрование HMAC_SHA256
var $new_var hmac_sha256 src_str secret;
HMAC_SHA384 шифрование
var $new_var hmac_sha384 src_str secret;
Шифрование HMAC_SHA512
var $new_var hmac_sha512 src_str secret;
Оценка диапазона времени
Определите, соответствует ли текущее время заданному диапазону времени, требуется как минимум один параметр.
Возвращает 1, если все условия выполнены, в противном случае возвращает 0.
День недели представлен числами от 0 до 6, где воскресенье — это 0, а формат часового пояса — gmt+0800
var $bool_var time_range [year=year_range] [month=month_range] [day=day_range] [wday=wday_range(0-6)] [hour=hour_range] [min=min_range] [sec=sec_range] [gmt | gmt+0000];
Формат времени
Преобразовать временную метку в HTTP время (текущее время, если временная метка опущена)
var $new_var gmt_time [src_ts] http_time;
Преобразовать отметку времени в куки-время (текущее время, если отметка времени опущена)
var $new_var gmt_time [src_ts] cookie_time;
Преобразование временной метки в GMT время в указанном формате (текущее время, если временная метка не указана)
var $new_var gmt_time [src_ts] date_format;
Преобразование временной метки в местное время в указанном формате (текущее время, если временная метка опущена)
var $new_var local_time [src_ts] date_format;
Возврат текущей временной метки
var $new_var unix_time;
Преобразование времени HTTP в метку времени
var $new_var unix_time src_time http_time;
Преобразовать указанную дату в метку времени (возвратить текущее время, если все параметры опущены)
var $new_var unix_time src_time date_format [timezone];
IP
Определите, находится ли IP-адрес в диапазоне IP, CIDR или IPv4, если да, верните 1, в противном случае верните 0
var $bool_var ip_range ip_str [ipv4 | ipv6 | cidr | ipv4_range ] ...;
Рассчитайте сетевой адрес на основе IP-адреса и битов сети
Для IPv4: диапазон network_bits составляет 1-32
Для IPv6: диапазон network_bits составляет от 1 до 128
Если ipv6_network_bits не указан, будет использовано то же значение, что и у ipv4_network_bits
Возвращает только сетевой адрес без префиксной длины (например, "10.0.0.0", а не "10.0.0.0/8")
var $new_var cidr ipv4/ipv6 ipv4_network_bits [ipv6_network_bits];
Все параметры, кроме регулярных выражений, могут содержать переменные. Однако некорректные значения параметров приведут к тому, что результат вычисления функции будет пустым.
Переменные, определенные с помощью директивы `var`, могут быть перезаписаны такими директивами, как `set` и `auth_request_set`.
Параметр `if` включает условную переменную. `var` не будет присваивать значение, если условие оценивается как "0" или пустая строка. И она продолжит искать последующие определения этой переменной.
Когда заголовок запроса A присутствует, значение переменной равно 'have-header-a'
var $new_var set have-header-a if=$http_a;
Когда заголовок запроса A отсутствует, но заголовок запроса B присутствует, значение переменной равно 'have-header-b'
var $new_var set have-header-b if=$http_b;
Когда оба заголовка запроса A и B отсутствуют, значение переменной равно 'not-have-a-or-b'
var $new_var set not-have-a-or-b; ```