var: Atribuição de variável dinâmica através de funções pré-definidas
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_var_module.so;
Este documento descreve o nginx-module-var v0.1.3 lançado em 02 de abril de 2026.
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
var $new_var set $scheme://$host$request_uri;
}
}
Diretrizes
var
Sintaxe: var $new_variable function [-i] args... [if\=condition]
Padrão: -
Contexto: http, server, location
Define uma nova variável cujo valor é o resultado do cálculo da função. O valor da variável não pode ser armazenado em cache e é recalculado cada vez que é utilizado.
Se o nível atual não definir uma variável com o mesmo nome, ela pode ser herdada do nível anterior.
O parâmetro -i é usado para ignorar maiúsculas e minúsculas (disponível apenas em algumas funções).
Exceto pelo nome da função, pelo parâmetro -i e pela expressão regular, todos os parâmetros podem conter variáveis.
Quando o valor de um parâmetro é inválido, o valor da variável é vazio. Em funções booleanas, parâmetros inválidos também resultarão em um valor vazio em vez de 0.
var não pode ser usado para definir a mesma variável simultaneamente com as diretrizes map ou geo. No entanto, a diretiva set pode ser usada para substituir variáveis definidas por var.
As seguintes funções estão disponíveis:
#### Julgamento Condicional ####
# Retorna 1 se o parâmetro de entrada estiver vazio ou 0, caso contrário, retorna 0
var $bool_var not str;
# Retorna 1 se todos os parâmetros de entrada não estiverem vazios e não forem 0, caso contrário, retorna 0
var $bool_var and str1 str2...;
# Retorna 1 se qualquer parâmetro de entrada não estiver vazio e não for 0, caso contrário, retorna 0
var $bool_var or str1 str2...;
#### Julgamento de String ####
# Verifica se a string está vazia, retorna 1 ou 0
var $bool_var is_empty str;
# Verifica se a string não está vazia, retorna 1 ou 0
var $bool_var is_not_empty str;
# Verifica se a string é um número, retorna 1 ou 0. Apenas números decimais são permitidos. números negativos e frações são suportados.
var $bool_var is_num str;
# Verifica se as strings são iguais, retorna 1 ou 0
var $bool_var str_eq [-i] str1 str2;
# Verifica se as strings não são iguais, retorna 1 ou 0
var $bool_var str_ne [-i] str1 str2;
# Verifica se a string tem o prefixo especificado, retorna 1 ou 0
var $bool_var starts_with [-i] str prefix;
# Verifica se a string tem o sufixo especificado, retorna 1 ou 0
var $bool_var ends_with [-i] str suffix;
# Verifica se a substring está presente, retorna 1 ou 0
var $bool_var contains [-i] str sub_str;
# Verifica se str1 é um dos str2 .. strn, retorna 1 ou 0
var $bool_var str_in [-i] str1 str2 str3 .. strn;
#### Operações Gerais de String ####
# Define o valor diretamente da variável
var $new_var set src_str;
# Comprimento da string
var $new_var len src_str;
# Converter para maiúsculas
var $new_var upper src_str;
# Converter para minúsculas
var $new_var lower src_str;
# Capitaliza a primeira letra de cada palavra (as palavras são separadas por caracteres não alfanuméricos)
var $new_var initcap src_str;
# Remove caracteres em branco ou outros caracteres do início e do final
var $new_var trim src_str [char];
# Remove caracteres em branco ou outros caracteres do início
var $new_var ltrim src_str [char];
# Remove caracteres em branco ou outros caracteres do final
var $new_var rtrim src_str [char];
# Inverte a string
var $new_var reverse src_str;
# Obtém a posição inicial da substring
var $new_var position [-i] src_str sub_str;
# Repete a string um número determinado de vezes
var $new_var repeat src_str times;
# Extrai substring
var $new_var substr src_str start [len];
# Substitui palavra-chave
var $new_var replace [-i] src_str src dst;
# Extrair parâmetros
# Extrai um valor de uma lista de parâmetros. Um caso de uso para isso é extrair parâmetros de consulta sem precisar escrever uma expressão regular, mas pode ser usado para procurar valores em qualquer lista de pares nome/valor. Se várias ocorrências do parâmetro existirem, apenas a primeira é retornada. a variável recebe um valor em branco. O delimitador entre o nome e o valor de um parâmetro é '=' por padrão, e o separador de parâmetros é '&' por padrão.
var $new_var extract_param [-i] param_name src_string [separator] [delimiter];
# exemplo: uma consulta "foo=123&bar=456&baz=789". Se o nome do parâmetro for bar e o separador for &, então o valor da variável resultante será 456.
# var $extraed_arg_bar extract_param bar "foo=123&bar=456&baz=789" & =;
#### Operação JSON ####
# Extrai valor json de uma string json válida.
# Requer que a biblioteca cJSON esteja instalada (veja a seção de Instalação)
var $new_var extract_json json subkey1 [subkey2] [subkey3] ...;
# Suporta chaves de objeto aninhadas e índices de array [n]
# Retorna valores de string sem aspas, outros tipos como strings JSON
# Arrays e objetos são retornados como strings JSON compactas
# Exemplos:
# Extrair de objeto aninhado
# var $new_var extract_json '{"a":{"b":{"c":3}}}' a b c;
# Resultado: 3
# Extrair de array usando [índice]
# var $new_var extract_json '{"users":[{"name":"Alice"},{"name":"Bob"}]}' users [0] name;
# Resultado: Alice
# Extrair array como string JSON
# var $items extract_json '{"data":[1,2,3]}' data;
# Resultado: [1,2,3]
# Extrair objeto como string JSON
# var $user extract_json '{"user":{"name":"Bob","age":30}}' user;
# Resultado: {"name":"Bob","age":30}
#### Julgamento Regex ####
# Verifica se o regex corresponde, retorna 1 ou 0
var $bool_var regex_match [-i] src_str match_regex;
#### Operações Regex ####
# Captura regex
var $new_var regex_capture [-i] src_str regex assign_value;
# Substitui regex
var $new_var regex_sub [-i] src_str regex replacement;
#### Julgamento Matemático ####
# Verifica se os números são iguais, retorna 1 ou 0
var $bool_var eq num1 num2;
# Verifica se os números não são iguais, retorna 1 ou 0
var $bool_var ne num1 num2;
# Verifica se é menor que, retorna 1 ou 0
var $bool_var lt num1 num2;
# Verifica se é menor ou igual, retorna 1 ou 0
var $bool_var le num1 num2;
# Verifica se é maior que, retorna 1 ou 0
var $bool_var gt num1 num2;
# Verifica se é maior ou igual, retorna 1 ou 0
var $bool_var ge num1 num2;
# Verifica se está dentro do intervalo start_num end_num, se end_num não for especificado, o intervalo é [0, start_num], retorna 1 ou 0
var $bool_var range num start_num [end_num];
# Verifica se o número é um dos num2 .. numn, retorna 1 ou 0
var $bool_var in num1 num2 .. numn;
### Operações Matemáticas ####
# Valor absoluto (retorna o formato original sem sinal negativo)
var $new_var abs num;
# Valor máximo (retorna com formato original)
var $new_var max num1 num2;
# Valor mínimo (retorna com formato original)
var $new_var min num1 num2;
# Adição inteira
var $new_var add int1 int2;
# Subtração inteira
var $new_var sub int1 int2;
# Multiplicação inteira
var $new_var mul int1 int2;
# Divisão inteira, int2 não pode ser 0
var $new_var div int1 int2;
# Módulo inteiro, int2 não pode ser 0
var $new_var mod int1 int2;
# Operação AND bit a bit
var $new_var bitwise_and int1 int2;
# Operação NOT bit a bit
var $new_var bitwise_not int;
# Operação OR bit a bit
var $new_var bitwise_or int1 int2;
# Operação XOR bit a bit (ou exclusivo)
var $new_var bitwise_xor int1 int2;
# Operação de deslocamento à esquerda, shift_bits deve ser >= 0
var $new_var lshift int shift_bits;
# Operação de deslocamento à direita (deslocamento aritmético, bit de sinal preservado), shift_bits deve ser >= 0
var $new_var rshift int shift_bits;
# Operação de deslocamento à direita sem sinal (deslocamento lógico, preenchimento com zero), shift_bits deve ser >= 0
var $new_var urshift int shift_bits;
# Arredondar para n dígitos significativos
var $new_var round src_num int;
# Truncar a parte decimal diretamente (sem arredondamento)
var $new_var int src_num;
# Valor de piso, o maior inteiro menor ou igual ao fonte
var $new_var floor src_num;
# Valor de teto, o menor inteiro maior ou igual ao fonte
var $new_var ceil src_num;
# Número inteiro positivo aleatório, o intervalo é [start_int, end_int], se end_int não for especificado, o intervalo é [0, start_int]
var $new_var rand [start_int] [end_int];
# Sequência hexadecimal aleatória especificada. number_of_bytes deve ser 1-32, o padrão é 32
var $new_var hexrand [number_of_bytes];
#### Codificação e Decodificação ####
# Converte binário para hexadecimal
var $new_var hex_encode src_str;
# Converte hexadecimal para binário
var $new_var hex_decode src_str;
# Decimal para hexadecimal
var $new_var dec_to_hex dec;
# Hexadecimal para decimal
var $new_var hex_to_dec hex;
# Codificação completa de URI
var $new_var escape_uri src_str;
# Codificação de argumento
var $new_var escape_args src_str;
# Codificação de componente de URI
var $new_var escape_uri_component src_str;
# Codificação HTML
var $new_var escape_html src_str;
# Decodificação de URI
var $new_var unescape_uri src_str;
# Codificação Base64
var $new_var base64_encode src_str;
# Codificação Base64url
var $new_var base64url_encode src_str;
# Decodificação Base64
var $new_var base64_decode src_str;
# Decodificação Base64url
var $new_var base64url_decode src_str;
#### Cálculos de Hash Criptográfico ####
# 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;
# Criptografia HMAC_MD5
var $new_var hmac_md5 src_str secret;
# Criptografia HMAC_SHA1
var $new_var hmac_sha1 src_str secret;
# Criptografia HMAC_SHA224
var $new_var hmac_sha224 src_str secret;
# Criptografia HMAC_SHA256
var $new_var hmac_sha256 src_str secret;
# Criptografia HMAC_SHA384
var $new_var hmac_sha384 src_str secret;
# Criptografia HMAC_SHA512
var $new_var hmac_sha512 src_str secret;
#### Julgamento de Intervalo de Tempo ####
# Determina se o horário atual atende ao intervalo de tempo dado, requer pelo menos um parâmetro.
# Retorna 1 se todas as condições forem atendidas, caso contrário, retorna 0.
# O dia da semana é representado por 0-6, onde domingo é 0, e o formato de fuso horário é 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];
#### Formato de Tempo ####
# Converte timestamp para tempo HTTP (tempo atual se o timestamp for omitido)
var $new_var gmt_time [src_ts] http_time;
# Converte timestamp para tempo de cookie (tempo atual se o timestamp for omitido)
var $new_var gmt_time [src_ts] cookie_time;
# Converte timestamp para tempo GMT no formato especificado (tempo atual se o timestamp for omitido)
var $new_var gmt_time [src_ts] date_format;
# Converte timestamp para tempo local no formato especificado (tempo atual se o timestamp for omitido)
var $new_var local_time [src_ts] date_format;
# Retorna timestamp atual
var $new_var unix_time;
# Converte tempo HTTP para timestamp
var $new_var unix_time src_time http_time;
# Converte data especificada para timestamp (retorna timestamp atual se todos forem omitidos)
var $new_var unix_time src_time date_format [timezone];
#### IP ####
# Determina se o endereço IP está dentro do intervalo de ip, cidr ou ipv4, se sim, retorna 1, caso contrário, retorna 0
var $bool_var ip_range ip_str [ipv4 | ipv6 | cidr | ipv4_range ] ...;
# Calcula o endereço de rede com base no endereço IP e nos bits de rede
# Para IPv4: intervalo de network_bits é 1-32
# Para IPv6: intervalo de network_bits é 1-128
# Se ipv6_network_bits não for especificado, usará o mesmo valor que ipv4_network_bits
# Retorna apenas o endereço de rede sem o comprimento do prefixo (por exemplo, "10.0.0.0" não "10.0.0.0/8")
var $new_var cidr ipv4/ipv6 ipv4_network_bits [ipv6_network_bits];
Todos os parâmetros, exceto expressões regulares, podem conter variáveis. No entanto, valores de parâmetros incorretos causarão o resultado do cálculo da função ser vazio.
Variáveis definidas com a diretiva var podem ser sobrescritas por diretivas como set e auth_request_set.
O parâmetro if habilita a variável condicional. var não será atribuído um valor se a condição avaliar como “0” ou uma string vazia. E continuará a procurar definições subsequentes dessa variável.
# Quando o cabeçalho de solicitação A está presente, o valor da variável é 'have-header-a'
var $new_var set have-header-a if=$http_a;
# Quando o cabeçalho de solicitação A não está presente, mas o cabeçalho de solicitação B está presente, o valor da variável é 'have-header-b'
var $new_var set have-header-b if=$http_b;
# Quando ambos os cabeçalhos de solicitação A e B não estão presentes, o valor da variável é 'not-have-a-or-b'
var $new_var set not-have-a-or-b;
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-var.