set-misc: NGINX Set-Misc-Modul
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und 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
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_set_misc_module.so;
Dieses Dokument beschreibt nginx-module-set-misc v0.33, veröffentlicht am 06. September 2021.
Synopsis
location /foo {
set $a $arg_a;
set_if_empty $a 56;
# GET /foo?a=32 ergibt $a == 32
# während GET /foo und GET /foo?a=
# ergibt $a == 56 hier.
}
location /bar {
set $foo "hello\n\n'\"\\";
set_quote_sql_str $foo $foo; # für mysql
# ODER In-Place-Bearbeitung:
# set_quote_sql_str $foo;
# jetzt ist $foo: 'hello\n\n\'\"\\'
}
location /bar {
set $foo "hello\n\n'\"\\";
set_quote_pgsql_str $foo; # für PostgreSQL
# jetzt ist $foo: E'hello\n\n\'\"\\'
}
location /json {
set $foo "hello\n\n'\"\\";
set_quote_json_str $foo $foo;
# ODER In-Place-Bearbeitung:
# set_quote_json_str $foo;
# jetzt ist $foo: "hello\n\n'\"\\"
}
location /baz {
set $foo "hello%20world";
set_unescape_uri $foo $foo;
# ODER In-Place-Bearbeitung:
# set_unescape_uri $foo;
# jetzt ist $foo: 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; # verwendet mit ngx_drizzle
}
location /base32 {
set $a 'abcde';
set_encode_base32 $a;
set_decode_base32 $b $a;
# jetzt $a == 'c5h66p35' und
# $b == 'abcde'
}
location /base64 {
set $a 'abcde';
set_encode_base64 $a;
set_decode_base64 $b $a;
# jetzt $a == 'YWJjZGU=' und
# $b == 'abcde'
}
location /hex {
set $a 'abcde';
set_encode_hex $a;
set_decode_hex $b $a;
# jetzt $a == '6162636465' und
# $b == 'abcde'
}
# GET /sha1 ergibt die Ausgabe
# aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
location /sha1 {
set_sha1 $a hello;
echo $a;
}
# ebenso
location /sha1 {
set $a hello;
set_sha1 $a;
echo $a;
}
# GET /today ergibt das heutige Datum in lokaler Zeit im Format 'yyyy-mm-dd'
location /today {
set_local_today $today;
echo $today;
}
# GET /signature ergibt die hmac-sha-1 Signatur
# gegeben einen geheimen Schlüssel und einen zu signierenden String
# dieses Beispiel ergibt die base64 kodierte Signatur, die ist
# "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;
# oder direkt schreiben
# set_random $rand 3 15;
echo $rand; # wird eine zufällige Ganzzahl im Bereich [3, 15] ausgeben
}
Beschreibung
Dieses Modul erweitert die Standard-Direktive des HttpRewriteModule, um mehr Funktionen wie URI-Escaping und -Unescaping, JSON-Quoting, Hexadezimal/MD5/SHA1/Base32/Base64-Digest-Kodierung und -Dekodierung, Zufallszahlengenerator und mehr bereitzustellen!
Jede von diesem Modul bereitgestellte Direktive kann frei mit anderen ngx_http_rewrite_module-Direktiven wie if und set gemischt werden. (Dank des Nginx Devel Kit!)
Direktiven
set_if_empty
syntax: set_if_empty $dst <src>
default: nein
context: location, location if
phase: rewrite
Weist den Wert des Arguments <src> nur dann zu, wenn die Variable $dst leer ist (d.h. nicht gefunden oder einen leeren String-Wert hat).
Im folgenden Beispiel,
set $a 32;
set_if_empty $a 56;
wird die Variable $dst letztendlich den Wert 32 annehmen. Aber im Beispiel
set $a '';
set $value "hello, world"
set_if_empty $a $value;
wird $a letztendlich den Wert "hello, world" annehmen.
set_quote_sql_str
syntax: set_quote_sql_str $dst <src>
syntax: set_quote_sql_str $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> gemäß den MySQL-Stringwert-Quoting-Regeln quotieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Zum Beispiel,
location /test {
set $value "hello\n\r'\"\\";
set_quote_sql_str $quoted $value;
echo $quoted;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
'hello\n\r\'\"\\'
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "hello\n\r'\"\\";
set_quote_sql_str $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive wird normalerweise verwendet, um SQL-Injection zu verhindern.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_quote_pgsql_str
syntax: set_quote_pgsql_str $dst <src>
syntax: set_quote_pgsql_str $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Ähnlich wie set_quote_sql_str, aber mit PostgreSQL-Quoting-Regeln für SQL-Stringliterale.
set_quote_json_str
syntax: set_quote_json_str $dst <src>
syntax: set_quote_json_str $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> gemäß den JSON-Stringwert-Quoting-Regeln quotieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Zum Beispiel,
location /test {
set $value "hello\n\r'\"\\";
set_quote_json_str $quoted $value;
echo $quoted;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
"hello\n\r'\"\\"
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "hello\n\r'\"\\";
set_quote_json_str $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_unescape_uri
syntax: set_unescape_uri $dst <src>
syntax: set_unescape_uri $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> als URI-Komponente unescapen und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Zum Beispiel,
location /test {
set_unescape_uri $key $arg_key;
echo $key;
}
Dann wird die Anfrage GET /test?key=hello+world%21 die folgende Ausgabe ergeben
hello world!
Die nginx-Standard-Variable $arg_PARAMETER enthält den rohen (escaped) Wert des URI-Parameters. Daher benötigen wir die Direktive set_unescape_uri, um ihn zuerst zu unescapen.
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $key $arg_key;
set_unescape_uri $key;
echo $key;
}
Dann wird die Anfrage GET /test?key=hello+world%21 genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_escape_uri
syntax: set_escape_uri $dst <src>
syntax: set_escape_uri $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Ähnlich wie die set_unescape_uri Direktive, aber führt die Umwandlung in die andere Richtung durch, d.h. URL-Komponenten-Escaping.
set_hashed_upstream
syntax: set_hashed_upstream $dst <upstream_list_name> <src>
default: nein
context: location, location if
phase: rewrite
Hasht den String-Argument <src> in einen der Upstream-Namen, die in der Upstream-Liste mit dem Namen <upstream_list_name> enthalten sind. Die verwendete Hash-Funktion ist einfach modulo.
Hier ist ein Beispiel,
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;
}
Dann wird GET /test?key=blah entweder "moon", "sun" oder "earth" ausgeben, abhängig vom tatsächlichen Wert des key-Abfragearguments.
Diese Direktive wird normalerweise verwendet, um eine nginx-Variable zu berechnen, die an die memc-nginx-module's memc_pass Direktive, die redis2-nginx-module's [[HttpRedis2Module#redis2_pass]] Direktive und die ngx_http_proxy_module's proxy_pass Direktive, unter anderem, übergeben wird.
set_encode_base32
syntax: set_encode_base32 $dst <src>
syntax: set_encode_base32 $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> in seinen base32(hex) Digest kodieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Zum Beispiel,
location /test {
set $raw "abcde";
set_encode_base32 $digest $raw;
echo $digest;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
c5h66p35
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
RFC zwingt die [A-Z2-7] RFC-3548 konforme Kodierung, aber wir verwenden standardmäßig die "base32hex"-Kodierung ([0-9a-v]). Die set_base32_alphabet Direktive (zuerst in v0.28 eingeführt) ermöglicht es Ihnen, das Alphabet, das für die Kodierung/Dekodierung verwendet wird, zu ändern, sodass eine RFC-3548 konforme Kodierung durch benutzerdefinierte Konfigurationen weiterhin möglich ist.
Standardmäßig wird das Zeichen = verwendet, um die verbleibenden Bytes aufgrund der Ausrichtung aufzufüllen. Aber das Padding-Verhalten kann vollständig deaktiviert werden, indem set_base32_padding auf off gesetzt wird.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "abcde";
set_encode_base32 $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_base32_padding
syntax: set_base32_padding on|off
default: on
context: http, server, server if, location, location if
phase: nein
Diese Direktive kann steuern, ob verbleibende Bytes mit dem Zeichen "=" aufgefüllt werden sollen, wenn ein base32-Digest durch die set_encode_base32 Direktive kodiert wird.
Diese Direktive wurde erstmals in v0.28 eingeführt. Wenn Sie frühere Versionen dieses Moduls verwenden, sollten Sie stattdessen set_misc_base32_padding verwenden.
set_misc_base32_padding
syntax: set_misc_base32_padding on|off
default: on
context: http, server, server if, location, location if
phase: nein
Diese Direktive ist seit v0.28 veraltet. Verwenden Sie stattdessen set_base32_padding, wenn Sie v0.28+ verwenden.
set_base32_alphabet
syntax: set_base32_alphabet <alphabet>
default: "0123456789abcdefghijklmnopqrstuv"
context: http, server, server if, location, location if
phase: nein
Diese Direktive steuert das Alphabet, das für die Kodierung/Dekodierung eines base32-Digests verwendet wird. Sie akzeptiert einen String, der das gewünschte Alphabet wie "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" für das Standardalphabet enthält.
Das erweiterte (base32hex) Alphabet wird standardmäßig verwendet.
Diese Direktive wurde erstmals in v0.28 eingeführt.
set_decode_base32
syntax: set_decode_base32 $dst <src>
syntax: set_decode_base32 $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Ähnlich wie die set_encode_base32 Direktive, aber führt genau die entgegengesetzte Operation durch, d.h. dekodiert einen base32(hex) Digest in seine ursprüngliche Form.
set_encode_base64
syntax: set_encode_base64 $dst <src>
syntax: set_encode_base64 $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> in seinen base64-Digest kodieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Zum Beispiel,
location /test {
set $raw "abcde";
set_encode_base64 $digest $raw;
echo $digest;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
YWJjZGU=
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "abcde";
set_encode_base64 $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_encode_base64url
syntax: set_encode_base64url $dst <src>
syntax: set_encode_base64url $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> in seinen base64 URL-sicheren Digest kodieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Zum Beispiel,
location /test {
set $raw "abcde";
set_encode_base64url $digest $raw;
echo $digest;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
YWJjZGU=
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "abcde";
set_encode_base64url $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_decode_base64
syntax: set_decode_base64 $dst <src>
syntax: set_decode_base64 $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Ähnlich wie die set_encode_base64 Direktive, aber führt genau die entgegengesetzte Operation durch, d.h. dekodiert einen base64 Digest in seine ursprüngliche Form.
set_decode_base64url
syntax: set_decode_base64url $dst <src>
syntax: set_decode_base64url $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Ähnlich wie die set_encode_base64url Direktive, aber führt genau die entgegengesetzte Operation durch, d.h. dekodiert einen base64 URL-sicheren Digest in seine ursprüngliche Form.
set_encode_hex
syntax: set_encode_hex $dst <src>
syntax: set_encode_hex $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> in seinen hexadezimalen Digest kodieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Zum Beispiel,
location /test {
set $raw "章亦春";
set_encode_hex $digest $raw;
echo $digest;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
e7aba0e4baa6e698a5
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "章亦春";
set_encode_hex $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_decode_hex
syntax: set_decode_hex $dst <src>
syntax: set_decode_hex $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Ähnlich wie die set_encode_hex Direktive, aber führt genau die entgegengesetzte Operation durch, d.h. dekodiert einen hexadezimalen Digest in seine ursprüngliche Form.
set_sha1
syntax: set_sha1 $dst <src>
syntax: set_sha1 $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> in seinen SHA-1 Digest kodieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Die hexadezimale Form des SHA-1 Digests wird automatisch generiert, verwenden Sie set_decode_hex, um das Ergebnis zu dekodieren, wenn Sie die binäre Form des SHA-1 Digests wünschen.
Zum Beispiel,
location /test {
set $raw "hello";
set_sha1 $digest $raw;
echo $digest;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "hello";
set_sha1 $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_md5
syntax: set_md5 $dst <src>
syntax: set_md5 $dst
default: nein
context: location, location if
phase: rewrite
category: ndk_set_var_value
Wenn zwei Argumente übergeben werden, wird diese Direktive den Wert des zweiten Arguments <src> in seinen MD5 Digest kodieren und das Ergebnis in das erste Argument, die Variable $dst, zuweisen. Die hexadezimale Form des MD5 Digests wird automatisch generiert, verwenden Sie set_decode_hex, um das Ergebnis zu dekodieren, wenn Sie die binäre Form des MD5 Digests wünschen.
Zum Beispiel,
location /test {
set $raw "hello";
set_md5 $digest $raw;
echo $digest;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
5d41402abc4b2a76b9719d911017c592
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Wenn ein einzelnes Argument übergeben wird, wird diese Direktive eine In-Place-Modifikation der Argumentvariablen durchführen. Zum Beispiel,
location /test {
set $value "hello";
set_md5 $value;
echo $value;
}
Dann wird die Anfrage GET /test genau die gleiche Ausgabe wie im vorherigen Beispiel ergeben.
Diese Direktive kann über die lua-nginx-module's ndk.set_var.DIRECTIVE Schnittstelle und die array-var-nginx-module's array_map_op Direktive aufgerufen werden.
set_hmac_sha1
syntax: set_hmac_sha1 $dst <secret_key> <src>
syntax: set_hmac_sha1 $dst
default: nein
context: location, location if
phase: rewrite
Berechnet den HMAC-SHA1 Digest des Arguments <src> und weist das Ergebnis der Argumentvariablen $dst mit dem geheimen Schlüssel <secret_key> zu.
Die rohe binäre Form des HMAC-SHA1 Digests wird generiert, verwenden Sie set_encode_base64, um das Ergebnis in eine textuelle Darstellung zu kodieren, wenn gewünscht.
Zum Beispiel,
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;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
R/pvxzHC4NLtj7S+kXFg/NePTmk=
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Diese Direktive erfordert, dass die OpenSSL-Bibliothek in Ihrem Nginx-Build aktiviert ist (normalerweise durch die Übergabe der Option --with-http_ssl_module an das ./configure-Skript).
set_hmac_sha256
syntax: set_hmac_sha256 $dst <secret_key> <src>
syntax: set_hmac_sha256 $dst
default: nein
context: location, location if
phase: rewrite
Berechnet den HMAC-SHA256 Digest des Arguments <src> und weist das Ergebnis der Argumentvariablen $dst mit dem geheimen Schlüssel <secret_key> zu.
Die rohe binäre Form des HMAC-SHA256 Digests wird generiert, verwenden Sie set_encode_base64, um das Ergebnis in eine textuelle Darstellung zu kodieren, wenn gewünscht.
Zum Beispiel,
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;
}
Dann wird die Anfrage GET /test die folgende Ausgabe ergeben
4pU3GRQrKKIoeLb9CqYsavHE2l6Hx+KMmRmesU+Cfrs=
Bitte beachten Sie, dass wir hier die echo-nginx-module's echo-Direktive verwenden, um die Werte von nginx-Variablen direkt auszugeben.
Diese Direktive erfordert, dass die OpenSSL-Bibliothek in Ihrem Nginx-Build aktiviert ist (normalerweise durch die Übergabe der Option --with-http_ssl_module an das ./configure-Skript).
set_random
syntax: set_random $res <from> <to>
default: nein
context: location, location if
phase: rewrite
Generiert eine (pseudo) zufällige Zahl (in textueller Form) im Bereich [<$from>, <$to>] (einschließlich).
Nur nicht-negative Zahlen sind für die Argumente <from> und <to> erlaubt.
Wenn <from> größer als <to> ist, werden ihre Werte entsprechend getauscht.
Zum Beispiel,
location /test {
set $from 5;
set $to 7;
set_random $res $from $to;
echo $res;
}
Dann wird die Anfrage GET /test eine Zahl zwischen 5 und 7 (d.h. 5, 6, 7) ausgeben.
Derzeit gibt es keine Möglichkeit, einen benutzerdefinierten Zufallszahlengenerator-Samen zu konfigurieren.
Im Hintergrund verwendet es die Standard-C-Funktion rand().
Diese Direktive wurde erstmals in der v0.22rc1 Veröffentlichung eingeführt.
Siehe auch set_secure_random_alphanum und set_secure_random_lcalpha.
set_secure_random_alphanum
syntax: set_secure_random_alphanum $res <length>
default: nein
context: location, location if
phase: rewrite
Generiert einen kryptografisch sicheren zufälligen String von <length> Zeichen mit dem Alphabet [a-zA-Z0-9].
<length> kann zwischen 1 und 64, einschließlich, liegen.
Zum Beispiel,
location /test {
set_secure_random_alphanum $res 32;
echo $res;
}
Dann wird die Anfrage GET /test einen String wie ivVVRP2DGaAqDmdf3Rv4ZDJ7k0gOfASz ausgeben.
Diese Funktionalität hängt von der Verfügbarkeit des Geräts /dev/urandom ab, das auf den meisten UNIX-ähnlichen Systemen verfügbar ist.
Siehe auch set_secure_random_lcalpha und set_random.
Diese Direktive wurde erstmals in der v0.22rc8 Veröffentlichung eingeführt.
set_secure_random_lcalpha
syntax: set_secure_random_lcalpha $res <length>
default: nein
context: location, location if
phase: rewrite
Generiert einen kryptografisch sicheren zufälligen String von <length> Zeichen mit dem Alphabet [a-z].
<length> kann zwischen 1 und 64, einschließlich, liegen.
Zum Beispiel,
location /test {
set_secure_random_lcalpha $res 32;
echo $res;
}
Dann wird die Anfrage GET /test einen String wie kcuxcddktffsippuekhshdaclaquiusj ausgeben.
Diese Funktionalität hängt von der Verfügbarkeit des Geräts /dev/urandom ab, das auf den meisten UNIX-ähnlichen Systemen verfügbar ist.
Diese Direktive wurde erstmals in der v0.22rc8 Veröffentlichung eingeführt.
Siehe auch set_secure_random_alphanum und set_random.
set_rotate
syntax: set_rotate $value <from> <to>
default: nein
context: location, location if
phase: rewrite
Erhöht $value, hält es jedoch im Bereich von <from> bis <to>.
Wenn $value größer als <to> oder kleiner als <from> ist, wird es auf den Wert <from> gesetzt.
Der aktuelle Wert nach Ausführung dieser Direktive wird immer pro Location gespeichert. Und dieser gespeicherte Wert wird für die Inkrementierung verwendet, wenn $value nicht initialisiert oder einen ungültigen Wert hat.
Nur nicht-negative Zahlen sind für die Argumente <from> und <to> erlaubt.
Wenn <from> größer als <to> ist, werden ihre Werte entsprechend getauscht.
Zum Beispiel,
location /rotate {
default_type text/plain;
set $counter $cookie_counter;
set_rotate $counter 1 5;
echo $counter;
add_header Set-Cookie counter=$counter;
}
Dann wird die Anfrage GET /rotate bei jedem Neuladen der Seite die nächste Zahl zwischen 1 und 5 (d.h. 1, 2, 3, 4, 5) ausgeben. Diese Direktive kann für Bannerrotation verwendet werden.
Ein weiteres Beispiel ist die Verwendung der serverseitigen Wertpersistenz für eine einfache Round-Robin:
location /rotate {
default_type text/plain;
set_rotate $counter 0 3;
echo $counter;
}
Und der Zugriff auf /rotate wird auch die Ganzzahlfolge 0, 1, 2, 3, 0, 1, 2, 3 usw. ausgeben.
Diese Direktive wurde erstmals in der v0.22rc7 Veröffentlichung eingeführt.
set_local_today
syntax: set_local_today $dst
default: nein
context: location, location if
phase: rewrite
Setzt das heutige Datum ("yyyy-mm-dd") in lokaler Zeit in die Argumentvariablen $dst.
Hier ist ein Beispiel,
location /today {
set_local_today $today;
echo $today;
}
Dann wird die Anfrage GET /today etwas wie
2011-08-16
ausgeben und das Jahr, das tatsächliche Datum, das Sie hier erhalten, wird sich jeden Tag ändern ;)
Im Hintergrund nutzt diese Direktive die ngx_time API im Nginx-Kern, sodass normalerweise kein Systemaufruf aufgrund des Zeit-Caching-Mechanismus im Nginx-Kern erforderlich ist.
set_formatted_gmt_time
syntax: set_formatted_gmt_time $res <time-format>
default: nein
context: location, location if
phase: rewrite
Setzt eine formatierte GMT-Zeit in die Variable $res (als erstes Argument) unter Verwendung des Formatstrings im zweiten Argument.
Alle Umwandlungs-Spezifikationsnotationen in der Standard-C-Funktion strftime werden unterstützt, wie %Y (für 4-stellige Jahre) und %M (für Minuten im Dezimalformat). Siehe http://linux.die.net/man/3/strftime für eine vollständige Liste der Umwandlungs-Spezifikationssymbole.
Unten ist ein Beispiel:
location = /t {
set_formatted_gmt_time $timestr "%a %b %e %H:%M:%S %Y GMT";
echo $timestr;
}
Der Zugriff auf /t ergibt die Ausgabe
Fri Dec 13 15:34:37 2013 GMT
Diese Direktive wurde erstmals in der 0.23 Veröffentlichung hinzugefügt.
Siehe auch set_formatted_local_time.
set_formatted_local_time
syntax: set_formatted_local_time $res <time-format>
default: nein
context: location, location if
phase: rewrite
Setzt eine formatierte lokale Zeit in die Variable $res (als erstes Argument) unter Verwendung des Formatstrings im zweiten Argument.
Alle Umwandlungs-Spezifikationsnotationen in der Standard-C-Funktion strftime werden unterstützt, wie %Y (für 4-stellige Jahre) und %M (für Minuten im Dezimalformat). Siehe http://linux.die.net/man/3/strftime für eine vollständige Liste der Umwandlungs-Spezifikationssymbole.
Unten ist ein Beispiel:
location = /t {
set_formatted_local_time $timestr "%a %b %e %H:%M:%S %Y %Z";
echo $timestr;
}
Der Zugriff auf /t ergibt die Ausgabe
Fri Dec 13 15:42:15 2013 PST
Diese Direktive wurde erstmals in der 0.23 Veröffentlichung hinzugefügt.
Siehe auch set_formatted_gmt_time.
Warnhinweise
Verwenden Sie nicht $arg_PARAMETER, $cookie_COOKIE, $http_HEADER oder andere spezielle Variablen, die im Nginx-Kernmodul definiert sind, als Zielvariable in den Direktiven dieses Moduls. Zum Beispiel,
set_if_empty $arg_user 'foo'; # NICHT VERWENDEN!
kann zu Segmentierungsfehlern führen.
Änderungen
Die Änderungsprotokolle für jede Veröffentlichung dieses Moduls können aus den Änderungsprotokollen des OpenResty-Bundles abgerufen werden:
Test Suite
Dieses Modul wird mit einer Perl-gesteuerten Test-Suite geliefert. Die Testfälle sind ebenfalls deklarativ. Dank des Test::Nginx Moduls in der Perl-Welt.
Um es auf Ihrer Seite auszuführen:
$ PATH=/path/to/your/nginx-with-set-misc-module:$PATH prove -r t
Sie müssen alle Nginx-Prozesse beenden, bevor Sie die Test-Suite ausführen, wenn Sie die Nginx-Server-Binärdatei geändert haben.
Da ein einzelner nginx-Server (standardmäßig localhost:1984) in allen Testskripten (.t-Dateien) verwendet wird, ist es sinnlos, die Test-Suite parallel auszuführen, indem Sie -jN beim Aufruf des prove-Dienstprogramms angeben.
Siehe auch
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-set-misc.