var: Динамическое присваивание переменных через предопределенные функции
Установка
Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-var
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-var
Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_var_module.so;
Этот документ описывает nginx-module-var v0.1.0, выпущенный 6 января 2026 года.
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
var $copy_var copy $scheme://$host$request_uri;
}
}
Директивы
var
Синтаксис: var $new_variable operator [-i] args... [if\=condition]
По умолчанию: -
Контекст: http, server, location
Определяет переменную, значение которой является результатом вычисления функции. Значение переменной не может быть закешировано и пересчитывается каждый раз при использовании. Если на текущем уровне не определена переменная с тем же именем, она может быть унаследована с предыдущего уровня. Параметр -i используется для игнорирования регистра.
Доступны следующие функции:
#### Условное суждение ####
## Возвращает 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 if_empty str;
## Проверяет, является ли строка непустой, возвращает 1 или 0
var $bool_var if_not_empty str;
## Проверяет, является ли строка числом, возвращает 1 или 0
var $bool_var if_is_num str;
## Проверяет, равны ли строки, возвращает 1 или 0
var $bool_var if_str_eq [-i] str1 str2;
## Проверяет, не равны ли строки, возвращает 1 или 0
var $bool_var if_str_ne [-i] str1 str2;
## Проверяет, имеет ли строка указанный префикс, возвращает 1 или 0
var $bool_var if_starts_with [-i] str prefix;
## Проверяет, имеет ли строка указанный суффикс, возвращает 1 или 0
var $bool_var if_ends_with [-i] str suffix;
## Проверяет, присутствует ли подстрока, возвращает 1 или 0
var $bool_var if_find [-i] str sub_str;
## Проверяет, является ли str1 одним из str2 .. strn, возвращает 1 или 0
var $bool_var if_str_in [-i] str1 str2 str3 .. strn;
#### Общие строковые операции ####
## Копирует значение переменной
var $new_var copy src_str;
## Длина строки
var $new_var len src_str;
## Преобразует в верхний регистр
var $new_var upper src_str;
## Преобразует в нижний регистр
var $new_var lower src_str;
## Удаляет пробелы в начале и конце строки
var $new_var trim src_str;
## Удаляет пробелы в начале строки
var $new_var ltrim src_str;
## Удаляет пробелы в конце строки
var $new_var rtrim src_str;
## Реверсирует строку
var $new_var reverse src_str;
## Получает начальную позицию подстроки
var $new_var find [-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;
#### Регулярные выражения ####
## Проверяет, соответствует ли регулярное выражение, возвращает 1 или 0
var $bool_var if_re_match [-i] src_str match_regex;
#### Операции с регулярными выражениями ####
## Захватывает регулярное выражение
var $new_var re_capture [-i] src_str capture_regex assign_value;
## Подменяет регулярное выражение
var $new_var re_sub [-i] src_str capture_regex assign_value;
## Глобальная подмена регулярного выражения
var $new_var re_gsub [-i] src_str capture_regex assign_value;
#### Математическое суждение ####
## Проверяет, равны ли числа, возвращает 1 или 0
var $bool_var if_eq num1 num2;
## Проверяет, не равны ли числа, возвращает 1 или 0
var $bool_var if_ne num1 num2;
## Проверяет, меньше ли, возвращает 1 или 0
var $bool_var if_lt num1 num2;
## Проверяет, меньше ли или равно, возвращает 1 или 0
var $bool_var if_le num1 num2;
## Проверяет, больше ли, возвращает 1 или 0
var $bool_var if_gt num1 num2;
## Проверяет, больше ли или равно, возвращает 1 или 0
var $bool_var if_ge num1 num2;
## Проверяет, находится ли в диапазоне start_num-end_num, возвращает 1 или 0
var $bool_var if_range num start_num-end_num;
## Проверяет, является ли число одним из num2 .. numn, возвращает 1 или 0
var $bool_var if_in 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;
## Округление до n значащих цифр
var $new_var round src_num int;
## Округление вниз, наибольшее целое число, меньшее или равное источнику
var $new_var floor src_num;
## Округление вверх, наименьшее целое число, большее или равное источнику
var $new_var ceil src_num;
## Случайное большое положительное целое число
var $new_var rand;
## Случайное положительное целое число в заданном диапазоне
var $new_var rand_range start_int-end_int;
#### Кодирование и декодирование ####
## Преобразует двоичное в шестнадцатеричное
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_short src_str;
## Кодирование CRC32 (для длинной строки)
var $new_var crc32_long src_str;
## Кодирование MD5
var $new_var md5sum src_str;
## Кодирование SHA1
var $new_var sha1sum src_str;
## Кодирование SHA256
var $new_var sha256sum src_str;
## Кодирование SHA384
var $new_var sha384sum src_str;
## Кодирование SHA512
var $new_var sha512sum src_str;
## Шифрование HMAC_SHA1
var $new_var hmac_sha1 src_str secret;
## Шифрование HMAC_SHA256
var $new_var hmac_sha256 src_str secret;
#### Суждение по диапазону времени ####
## Определяет, соответствует ли текущее время заданному диапазону времени, требует как минимум один параметр.
## Возвращает 1, если все условия выполнены, иначе возвращает 0.
## День недели обозначается числами от 1 до 7, где воскресенье - 7, а формат часового пояса - gmt+0800
var $bool_var if_time_range [year=year_range] [month=month_range] [day=day_range] [wday=wday_range(1-7)] [hour=hour_range] [min=min_range] [sec=sec_range] [timezone];
#### Формат времени ####
## Преобразует временную метку в GMT время в заданном формате (текущее время, если временная метка опущена)
var $new_var gmt_time [src_ts] date_format;
## Преобразует временную метку в HTTP время (текущее время, если временная метка опущена)
var $new_var gmt_time [src_ts] http_time;
## Преобразует временную метку в время cookie (текущее время, если временная метка опущена)
var $new_var gmt_time [src_ts] cookie_time;
## Преобразует временную метку в местное время в заданном формате (текущее время, если временная метка опущена)
var $new_var local_time [src_ts] date_format;
## Возвращает текущую временную метку
var $new_var unixtime;
## Преобразует HTTP время в временную метку
var $new_var unixtime src_http_time http_time;
## Преобразует указанную дату в временную метку (возвращает текущую временную метку, если все опущены)
var $new_var unixtime src_time date_format timezone;
#### Суждение по диапазону IP ####
## Определяет, находится ли IP-адрес в диапазоне IP, если да, возвращает 1, иначе возвращает 0
var $bool_var if_ip_range ip_str ip_range_str1 ip_range_str2...;
#### HTTP Информация ####
## Получает значение указанного аргумента запроса, arg_name может включать '-' и не зависит от регистра.
var $new_var get_arg argname;
## Получает значение указанного имени cookie запроса, cookie_name может включать '-' или '.' и не зависит от регистра.
var $new_var get_cookie cookie_name;
## Получает значение указанного имени Set-Cookie upstream, cookie_name может включать '-' или '.' и не зависит от регистра.
var $new_var get_upstream_cookie cookie_name;
Все параметры, кроме регулярных выражений, могут содержать переменные. Однако неправильные значения параметров приведут к тому, что результат вычисления функции будет пустым.
Переменные, определенные с помощью директивы var, могут быть переопределены такими директивами, как set и auth_request_set.
Параметр if включает условный var. var не будет присваиваться значение, если условие оценивается как “0” или пустая строка. И он продолжит искать последующие определения этой переменной.
## Когда заголовок запроса A присутствует, значение переменной равно 'have-header-a'
var $new_var copy have-header-a if=$http_a;
## Когда заголовок запроса A отсутствует, но заголовок запроса B присутствует, значение переменной равно 'have-header-b'
var $new_var copy have-header-b if=$http_b;
## Когда оба заголовка запроса A и B отсутствуют, значение переменной равно 'not-have-a-or-b'
var $new_var copy not-have-a-or-b;
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-var.