var
Директива `var` позволяет динамически назначать значения переменным в NGINX с помощью предопределённых функций.
Описание
Директива var в NGINX используется для динамического создания и присвоения значений переменным на основе результатов предопределённых функций. Эта директива может применяться в разных областях, включая http, server и location, что обеспечивает гибкую и контекстную область видимости переменных. Синтаксис директивы имеет следующую структуру: var $variable_name function [-i] args... [if=condition], где variable_name — имя переменной, которую нужно определить, function задаёт предопределённую операцию, а args могут содержать дополнительные параметры, относящиеся к функции.
Ключевой особенностью директивы var является то, что она вычисляет значение переменной каждый раз при обращении к ней, вместо кеширования. Таким образом, любые изменения в запросе или контексте могут привести к тому, что переменная будет отражать обновлённые значения. Необязательный параметр -i указывает, что функция должна игнорировать регистр при обработке строковых функций. Получаемое значение переменной также может зависеть от вычисления условных выражений, что позволяет использовать более сложную логику для динамического задания значений переменных.
Однако важно отметить, что переменные, определённые с помощью директивы var, не могут быть одновременно определены директивами map или geo, что предотвращает возможные конфликты при присвоении переменных. Использование директивы set может перезаписать ранее определённые переменные, предоставляя дополнительный контроль над определением переменных в конфигурациях сервера.
Пример конфига
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
var $new_var set $scheme://$host$request_uri;
}
}Переменные, определённые с помощью var, не могут использоваться одновременно с директивами map или geo.
Проверьте, что имя функции и параметры указаны правильно; в противном случае переменной будет присвоено пустое значение.
Условие для параметра if должно быть корректным; в противном случае директива может работать не так, как задумано.