set-misc: Módulo Set-Misc de NGINX
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-set-misc
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-set-misc
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_set_misc_module.so;
Este documento describe nginx-module-set-misc v0.33 lanzado el 06 de septiembre de 2021.
Sinopsis
location /foo {
set $a $arg_a;
set_if_empty $a 56;
# GET /foo?a=32 dará como resultado $a == 32
# mientras que GET /foo y GET /foo?a=
# darán como resultado $a == 56 aquí.
}
location /bar {
set $foo "hello\n\n'\"\\";
set_quote_sql_str $foo $foo; # para mysql
# O edición en el lugar:
# set_quote_sql_str $foo;
# ahora $foo es: 'hello\n\n\'\"\\'
}
location /bar {
set $foo "hello\n\n'\"\\";
set_quote_pgsql_str $foo; # para PostgreSQL
# ahora $foo es: E'hello\n\n\'\"\\'
}
location /json {
set $foo "hello\n\n'\"\\";
set_quote_json_str $foo $foo;
# O edición en el lugar:
# set_quote_json_str $foo;
# ahora $foo es: "hello\n\n'\"\\"
}
location /baz {
set $foo "hello%20world";
set_unescape_uri $foo $foo;
# O edición en el lugar:
# set_unescape_uri $foo;
# ahora $foo es: hello world
}
upstream_list universe moon sun earth;
upstream moon { ... }
upstream sun { ... }
upstream earth { ... }
location /foo {
set_hashed_upstream $backend universe $arg_id;
drizzle_pass $backend; # usado con ngx_drizzle
}
location /base32 {
set $a 'abcde';
set_encode_base32 $a;
set_decode_base32 $b $a;
# ahora $a == 'c5h66p35' y
# $b == 'abcde'
}
location /base64 {
set $a 'abcde';
set_encode_base64 $a;
set_decode_base64 $b $a;
# ahora $a == 'YWJjZGU=' y
# $b == 'abcde'
}
location /hex {
set $a 'abcde';
set_encode_hex $a;
set_decode_hex $b $a;
# ahora $a == '6162636465' y
# $b == 'abcde'
}
# GET /sha1 da como resultado la salida
# aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
location /sha1 {
set_sha1 $a hello;
echo $a;
}
# igual
location /sha1 {
set $a hello;
set_sha1 $a;
echo $a;
}
# GET /today da como resultado la fecha de hoy en hora local usando el formato 'yyyy-mm-dd'
location /today {
set_local_today $today;
echo $today;
}
# GET /signature da como resultado la firma hmac-sha-1
# dada una clave secreta y una cadena para firmar
# este ejemplo da como resultado la firma codificada en base64 que es
# "HkADYytcoQQzqbjQX33k/ZBB/DQ="
location /signature {
set $secret_key 'secret-key';
set $string_to_sign "some-string-to-sign";
set_hmac_sha1 $signature $secret_key $string_to_sign;
set_encode_base64 $signature $signature;
echo $signature;
}
location = /rand {
set $from 3;
set $to 15;
set_random $rand $from $to;
# o escribir directamente
# set_random $rand 3 15;
echo $rand; # imprimirá un número entero aleatorio en el rango [3, 15]
}
Descripción
Este módulo extiende el conjunto de directivas del módulo estándar HttpRewriteModule para proporcionar más funcionalidades como escape y desescape de URI, citación JSON, codificación y decodificación de digestos Hexadecimal/MD5/SHA1/Base32/Base64, generador de números aleatorios, ¡y más!
Cada directiva proporcionada por este módulo puede mezclarse libremente con otras directivas del ngx_http_rewrite_module, como if y set. (¡Gracias al Nginx Devel Kit!)
Directivas
set_if_empty
sintaxis: set_if_empty $dst <src>
predeterminado: no
contexto: location, location if
fase: rewrite
Asigna el valor del argumento <src> si y solo si la variable $dst está vacía (es decir, no se encuentra o tiene un valor de cadena vacía).
En el siguiente ejemplo,
set $a 32;
set_if_empty $a 56;
la variable $dst tomará el valor 32 al final. Pero en el ejemplo
set $a '';
set $value "hello, world"
set_if_empty $a $value;
$a tomará el valor "hello, world" al final.
set_quote_sql_str
sintaxis: set_quote_sql_str $dst <src>
sintaxis: set_quote_sql_str $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva citará el valor del segundo argumento <src> según la regla de citación de valores de cadena de MySQL y asignará el resultado al primer argumento, la variable $dst. Por ejemplo,
location /test {
set $value "hello\n\r'\"\\";
set_quote_sql_str $quoted $value;
echo $quoted;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
'hello\n\r\'\"\\'
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "hello\n\r'\"\\";
set_quote_sql_str $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva se utiliza generalmente para prevenir inyecciones SQL.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_quote_pgsql_str
sintaxis: set_quote_pgsql_str $dst <src>
sintaxis: set_quote_pgsql_str $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Muy similar a set_quote_sql_str, pero con reglas de citación de PostgreSQL para literales de cadena SQL.
set_quote_json_str
sintaxis: set_quote_json_str $dst <src>
sintaxis: set_quote_json_str $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva citará el valor del segundo argumento <src> según la regla de citación de valores de cadena JSON y asignará el resultado al primer argumento, la variable $dst. Por ejemplo,
location /test {
set $value "hello\n\r'\"\\";
set_quote_json_str $quoted $value;
echo $quoted;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
"hello\n\r'\"\\"
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "hello\n\r'\"\\";
set_quote_json_str $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_unescape_uri
sintaxis: set_unescape_uri $dst <src>
sintaxis: set_unescape_uri $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva desescapará el valor del segundo argumento <src> como un componente URI y asignará el resultado al primer argumento, la variable $dst. Por ejemplo,
location /test {
set_unescape_uri $key $arg_key;
echo $key;
}
Entonces, la solicitud GET /test?key=hello+world%21 dará como resultado la siguiente salida
hello world!
La variable estándar de nginx $arg_PARAMETER contiene el valor crudo (escapado) del parámetro URI. Así que necesitamos la directiva set_unescape_uri para desescaparlo primero.
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $key $arg_key;
set_unescape_uri $key;
echo $key;
}
entonces la solicitud GET /test?key=hello+world%21 dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_escape_uri
sintaxis: set_escape_uri $dst <src>
sintaxis: set_escape_uri $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Muy similar a la directiva set_unescape_uri, pero realiza la conversión en la dirección opuesta, es decir, el escape de componentes de URL.
set_hashed_upstream
sintaxis: set_hashed_upstream $dst <upstream_list_name> <src>
predeterminado: no
contexto: location, location if
fase: rewrite
Hashea el argumento de cadena <src> en uno de los nombres de upstream incluidos en la lista de upstream llamada <upstream_list_name>. La función hash utilizada es un simple módulo.
Aquí hay un ejemplo,
upstream moon { ... }
upstream sun { ... }
upstream earth { ... }
upstream_list universe moon sun earth;
location /test {
set_unescape_uri $key $arg_key;
set $list_name universe;
set_hashed_upstream $backend $list_name $key;
echo $backend;
}
Entonces, GET /test?key=blah dará como resultado "moon", "sun" o "earth", dependiendo del valor real del argumento de consulta key.
Esta directiva se utiliza generalmente para calcular una variable de nginx que se pasará a la directiva memc_pass del memc-nginx-module, la directiva [[HttpRedis2Module#redis2_pass]] del redis2-nginx-module y la directiva proxy_pass del ngx_http_proxy_module, entre otros.
set_encode_base32
sintaxis: set_encode_base32 $dst <src>
sintaxis: set_encode_base32 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva codificará el valor del segundo argumento <src> a su digest base32(hex) y asignará el resultado al primer argumento, la variable $dst. Por ejemplo,
location /test {
set $raw "abcde";
set_encode_base32 $digest $raw;
echo $digest;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
c5h66p35
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
El RFC obliga a la codificación conforme a [A-Z2-7] RFC-3548, pero estamos utilizando la codificación "base32hex" ([0-9a-v]) por defecto. La directiva set_base32_alphabet (introducida por primera vez en v0.28) te permite cambiar el alfabeto utilizado para la codificación/decodificación, por lo que la codificación conforme a RFC-3548 sigue siendo posible mediante configuraciones personalizadas.
Por defecto, el carácter = se utiliza para rellenar los bytes restantes debido a la alineación. Pero el comportamiento de relleno puede ser completamente deshabilitado configurando set_base32_padding off.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "abcde";
set_encode_base32 $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_base32_padding
sintaxis: set_base32_padding on|off
predeterminado: on
contexto: http, server, server if, location, location if
fase: no
Esta directiva puede controlar si se rellenan los bytes restantes con el carácter "=" al codificar un digest base32 mediante la directiva set_encode_base32.
Esta directiva fue introducida por primera vez en v0.28. Si utilizas versiones anteriores de este módulo, entonces deberías usar set_misc_base32_padding en su lugar.
set_misc_base32_padding
sintaxis: set_misc_base32_padding on|off
predeterminado: on
contexto: http, server, server if, location, location if
fase: no
Esta directiva ha sido desaprobada desde v0.28. Usa set_base32_padding en su lugar si estás utilizando v0.28+.
set_base32_alphabet
sintaxis: set_base32_alphabet <alphabet>
predeterminado: "0123456789abcdefghijklmnopqrstuv"
contexto: http, server, server if, location, location if
fase: no
Esta directiva controla el alfabeto utilizado para codificar/decodificar un digest base32. Acepta una cadena que contiene el alfabeto deseado como "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" para el alfabeto estándar.
Se utiliza el alfabeto extendido (base32hex) por defecto.
Esta directiva fue introducida por primera vez en v0.28.
set_decode_base32
sintaxis: set_decode_base32 $dst <src>
sintaxis: set_decode_base32 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Similar a la directiva set_encode_base32, pero realiza exactamente la operación opuesta, es decir, decodifica un digest base32(hex) a su forma original.
set_encode_base64
sintaxis: set_encode_base64 $dst <src>
sintaxis: set_encode_base64 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva codificará el valor del segundo argumento <src> a su digest base64 y asignará el resultado al primer argumento, la variable $dst. Por ejemplo,
location /test {
set $raw "abcde";
set_encode_base64 $digest $raw;
echo $digest;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
YWJjZGU=
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "abcde";
set_encode_base64 $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_encode_base64url
sintaxis: set_encode_base64url $dst <src>
sintaxis: set_encode_base64url $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva codificará el valor del segundo argumento <src> a su digest base64 seguro para URL y asignará el resultado al primer argumento, la variable $dst. Por ejemplo,
location /test {
set $raw "abcde";
set_encode_base64url $digest $raw;
echo $digest;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
YWJjZGU=
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "abcde";
set_encode_base64url $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_decode_base64
sintaxis: set_decode_base64 $dst <src>
sintaxis: set_decode_base64 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Similar a la directiva set_encode_base64, pero realiza exactamente la operación opuesta, es decir, decodifica un digest base64 a su forma original.
set_decode_base64url
sintaxis: set_decode_base64url $dst <src>
sintaxis: set_decode_base64url $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Similar a la directiva set_encode_base64url, pero realiza exactamente la operación opuesta, es decir, decodifica un digest base64 seguro para URL a su forma original.
set_encode_hex
sintaxis: set_encode_hex $dst <src>
sintaxis: set_encode_hex $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva codificará el valor del segundo argumento <src> a su digest hexadecimal y asignará el resultado al primer argumento, la variable $dst. Por ejemplo,
location /test {
set $raw "章亦春";
set_encode_hex $digest $raw;
echo $digest;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
e7aba0e4baa6e698a5
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "章亦春";
set_encode_hex $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_decode_hex
sintaxis: set_decode_hex $dst <src>
sintaxis: set_decode_hex $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Similar a la directiva set_encode_hex, pero realiza exactamente la operación opuesta, es decir, decodifica un digest hexadecimal a su forma original.
set_sha1
sintaxis: set_sha1 $dst <src>
sintaxis: set_sha1 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva codificará el valor del segundo argumento <src> a su digest SHA-1 y asignará el resultado al primer argumento, la variable $dst. La forma hexadecimal del digest SHA-1 se generará automáticamente, usa set_decode_hex para decodificar el resultado si deseas la forma binaria del digest SHA-1.
Por ejemplo,
location /test {
set $raw "hello";
set_sha1 $digest $raw;
echo $digest;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "hello";
set_sha1 $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_md5
sintaxis: set_md5 $dst <src>
sintaxis: set_md5 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
categoría: ndk_set_var_value
Al tomar dos argumentos, esta directiva codificará el valor del segundo argumento <src> a su digest MD5 y asignará el resultado al primer argumento, la variable $dst. La forma hexadecimal del digest MD5 se generará automáticamente, usa set_decode_hex para decodificar el resultado si deseas la forma binaria del digest MD5.
Por ejemplo,
location /test {
set $raw "hello";
set_md5 $digest $raw;
echo $digest;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
5d41402abc4b2a76b9719d911017c592
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Al tomar un solo argumento, esta directiva realizará una modificación en el lugar de la variable del argumento. Por ejemplo,
location /test {
set $value "hello";
set_md5 $value;
echo $value;
}
entonces la solicitud GET /test dará exactamente la misma salida que el ejemplo anterior.
Esta directiva puede ser invocada por la interfaz ndk.set_var.DIRECTIVE del lua-nginx-module y la directiva array_map_op del array-var-nginx-module.
set_hmac_sha1
sintaxis: set_hmac_sha1 $dst <secret_key> <src>
sintaxis: set_hmac_sha1 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
Calcula el digest HMAC-SHA1 del argumento <src> y asigna el resultado a la variable de argumento $dst con la clave secreta <secret_key>.
La forma binaria cruda del digest HMAC-SHA1 se generará, usa set_encode_base64, por ejemplo, para codificar el resultado a una representación textual si lo deseas.
Por ejemplo,
location /test {
set $secret 'thisisverysecretstuff';
set $string_to_sign 'some string we want to sign';
set_hmac_sha1 $signature $secret $string_to_sign;
set_encode_base64 $signature $signature;
echo $signature;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
R/pvxzHC4NLtj7S+kXFg/NePTmk=
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Esta directiva requiere que la biblioteca OpenSSL esté habilitada en tu compilación de NGINX (generalmente pasando la opción --with-http_ssl_module al script ./configure).
set_hmac_sha256
sintaxis: set_hmac_sha256 $dst <secret_key> <src>
sintaxis: set_hmac_sha256 $dst
predeterminado: no
contexto: location, location if
fase: rewrite
Calcula el digest HMAC-SHA256 del argumento <src> y asigna el resultado a la variable de argumento $dst con la clave secreta <secret_key>.
La forma binaria cruda del digest HMAC-SHA256 se generará, usa set_encode_base64, por ejemplo, para codificar el resultado a una representación textual si lo deseas.
Por ejemplo,
location /test {
set $secret 'thisisverysecretstuff';
set $string_to_sign 'some string we want to sign';
set_hmac_sha256 $signature $secret $string_to_sign;
set_encode_base64 $signature $signature;
echo $signature;
}
Entonces, la solicitud GET /test dará como resultado la siguiente salida
4pU3GRQrKKIoeLb9CqYsavHE2l6Hx+KMmRmesU+Cfrs=
Ten en cuenta que estamos utilizando la directiva echo del echo-nginx-module aquí para mostrar los valores de las variables de nginx directamente.
Esta directiva requiere que la biblioteca OpenSSL esté habilitada en tu compilación de NGINX (generalmente pasando la opción --with-http_ssl_module al script ./configure).
set_random
sintaxis: set_random $res <from> <to>
predeterminado: no
contexto: location, location if
fase: rewrite
Genera un número (pseudo) aleatorio (en forma textual) dentro del rango [<$from>, <$to>] (inclusive).
Solo se permiten números no negativos para los argumentos <from> y <to>.
Cuando <from> es mayor que <to>, sus valores se intercambiarán en consecuencia.
Por ejemplo,
location /test {
set $from 5;
set $to 7;
set_random $res $from $to;
echo $res;
}
entonces la solicitud GET /test dará como resultado un número entre 5 y 7 (es decir, entre 5, 6, 7).
Por ahora, no hay forma de configurar una semilla de generador aleatorio personalizada.
Detrás de escena, utiliza la función estándar de C rand().
Esta directiva fue introducida por primera vez en el lanzamiento v0.22rc1.
Consulta también set_secure_random_alphanum y set_secure_random_lcalpha.
set_secure_random_alphanum
sintaxis: set_secure_random_alphanum $res <length>
predeterminado: no
contexto: location, location if
fase: rewrite
Genera una cadena aleatoria criptográficamente fuerte de <length> caracteres de longitud con el alfabeto [a-zA-Z0-9].
<length> puede estar entre 1 y 64, inclusive.
Por ejemplo,
location /test {
set_secure_random_alphanum $res 32;
echo $res;
}
entonces la solicitud GET /test dará como resultado una cadena como ivVVRP2DGaAqDmdf3Rv4ZDJ7k0gOfASz.
Esta funcionalidad depende de la presencia del dispositivo /dev/urandom, disponible en la mayoría de los sistemas similares a UNIX.
Consulta también set_secure_random_lcalpha y set_random.
Esta directiva fue introducida por primera vez en el lanzamiento v0.22rc8.
set_secure_random_lcalpha
sintaxis: set_secure_random_lcalpha $res <length>
predeterminado: no
contexto: location, location if
fase: rewrite
Genera una cadena aleatoria criptográficamente fuerte de <length> caracteres de longitud con el alfabeto [a-z].
<length> puede estar entre 1 y 64, inclusive.
Por ejemplo,
location /test {
set_secure_random_lcalpha $res 32;
echo $res;
}
entonces la solicitud GET /test dará como resultado una cadena como kcuxcddktffsippuekhshdaclaquiusj.
Esta funcionalidad depende de la presencia del dispositivo /dev/urandom, disponible en la mayoría de los sistemas similares a UNIX.
Esta directiva fue introducida por primera vez en el lanzamiento v0.22rc8.
Consulta también set_secure_random_alphanum y set_random.
set_rotate
sintaxis: set_rotate $value <from> <to>
predeterminado: no
contexto: location, location if
fase: rewrite
Incrementa $value pero lo mantiene en el rango de <from> a <to>.
Si $value es mayor que <to> o menor que <from>, se establecerá en el valor <from>.
El valor actual después de ejecutar esta directiva se guardará siempre en una base por ubicación. Y este valor guardado se utilizará para la incrementación cuando $value no esté inicializado o tenga un valor incorrecto.
Solo se permiten números no negativos para los argumentos <from> y <to>.
Cuando <from> es mayor que <to>, sus valores se intercambiarán en consecuencia.
Por ejemplo,
location /rotate {
default_type text/plain;
set $counter $cookie_counter;
set_rotate $counter 1 5;
echo $counter;
add_header Set-Cookie counter=$counter;
}
entonces la solicitud GET /rotate dará como resultado el siguiente número entre 1 y 5 (es decir, 1, 2, 3, 4, 5) en cada
actualización de la página. Esta directiva puede ser útil para propósitos de rotación de banners.
Otro ejemplo es usar la persistencia de valores del lado del servidor para hacer un simple round-robin:
location /rotate {
default_type text/plain;
set_rotate $counter 0 3;
echo $counter;
}
Y acceder a /rotate también dará como resultado una secuencia entera 0, 1, 2, 3, 0, 1, 2, 3, y así sucesivamente.
Esta directiva fue introducida por primera vez en el lanzamiento v0.22rc7.
set_local_today
sintaxis: set_local_today $dst
predeterminado: no
contexto: location, location if
fase: rewrite
Establece la fecha de hoy ("yyyy-mm-dd") en hora local en la variable de argumento $dst.
Aquí hay un ejemplo,
location /today {
set_local_today $today;
echo $today;
}
entonces la solicitud GET /today dará como resultado algo como
2011-08-16
y el año, la fecha actual que obtienes aquí variará cada día ;)
Detrás de escena, esta directiva utiliza la API ngx_time en el núcleo de NGINX, por lo que generalmente no se involucra ninguna llamada al sistema debido al mecanismo de caché de tiempo en el núcleo de NGINX.
set_formatted_gmt_time
sintaxis: set_formatted_gmt_time $res <time-format>
predeterminado: no
contexto: location, location if
fase: rewrite
Establece un tiempo GMT formateado en la variable $res (como el primer argumento) utilizando la cadena de formato en el segundo argumento.
Se admiten todas las notaciones de especificación de conversión en la función estándar de C strftime, como %Y (para años de 4 dígitos) y %M (para minutos en decimal). Consulta http://linux.die.net/man/3/strftime para obtener una lista completa de símbolos de especificación de conversión.
A continuación se muestra un ejemplo:
location = /t {
set_formatted_gmt_time $timestr "%a %b %e %H:%M:%S %Y GMT";
echo $timestr;
}
Acceder a /t produce la salida
Fri Dec 13 15:34:37 2013 GMT
Esta directiva fue añadida por primera vez en el lanzamiento 0.23.
Consulta también set_formatted_local_time.
set_formatted_local_time
sintaxis: set_formatted_local_time $res <time-format>
predeterminado: no
contexto: location, location if
fase: rewrite
Establece un tiempo local formateado en la variable $res (como el primer argumento) utilizando la cadena de formato en el segundo argumento.
Se admiten todas las notaciones de especificación de conversión en la función estándar de C strftime, como %Y (para años de 4 dígitos) y %M (para minutos en decimal). Consulta http://linux.die.net/man/3/strftime para obtener una lista completa de símbolos de especificación de conversión.
A continuación se muestra un ejemplo:
location = /t {
set_formatted_local_time $timestr "%a %b %e %H:%M:%S %Y %Z";
echo $timestr;
}
Acceder a /t produce la salida
Fri Dec 13 15:42:15 2013 PST
Esta directiva fue añadida por primera vez en el lanzamiento 0.23.
Consulta también set_formatted_gmt_time.
Advertencias
No uses $arg_PARAMETER, $cookie_COOKIE, $http_HEADER u otras variables especiales definidas en el módulo central de NGINX como la variable objetivo en las directivas de este módulo. Por ejemplo,
set_if_empty $arg_user 'foo'; # ¡NO USE ESTO!
puede llevar a fallos de segmentación.
Cambios
Los registros de cambios de cada lanzamiento de este módulo se pueden obtener de los registros de cambios del paquete OpenResty:
Suite de Pruebas
Este módulo viene con una suite de pruebas impulsada por Perl. Los casos de prueba son declarativos también. Gracias al módulo Test::Nginx en el mundo de Perl.
Para ejecutarlo en tu lado:
$ PATH=/path/to/your/nginx-with-set-misc-module:$PATH prove -r t
Necesitas terminar cualquier proceso de NGINX antes de ejecutar la suite de pruebas si has cambiado el binario del servidor NGINX.
Debido a que se utiliza un solo servidor nginx (por defecto, localhost:1984) en todos los scripts de prueba (.t), no tiene sentido ejecutar la suite de pruebas en paralelo especificando -jN al invocar la utilidad prove.
Véase También
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-set-misc.