array-var: Array-typisierte Variablen für NGINX
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-array-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-array-var
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_array_var_module.so;
Dieses Dokument beschreibt nginx-module-array-var v0.6, veröffentlicht am 23. Mai 2022.
location /foo {
array_split ',' $arg_files to=$array;
# verwenden Sie die Direktive set_quote_sql_str im ngx_set_misc
# Modul, um auf jedes Element im Array $array zuzugreifen:
array_map_op set_quote_sql_str $array;
array_map "name = $array_it" $array;
array_join ' or ' $array to=$sql_condition;
# nun, wir könnten es an ngx_drizzle übergeben, um beispielsweise mit MySQL zu kommunizieren ;)
echo "select * from files where $sql_condition";
}
Beschreibung
Dieses Modul bietet array-typisierte nginx-Variablen für nginx.conf.
Unter der Haube "missbraucht" dieses Modul einfach die nginx-Zeichenfolgenwerte, um binäre Zeiger auf C-Datenstrukturen (NGINX-Kern ngx_array_t-Struktur im C-Bereich) zu halten.
Der Array-Typ verleiht nginx.conf wunderbare Fähigkeiten zur Handhabung von Wertelisten. Heutzutage wird jedoch dringend empfohlen, das ngx_lua Modul zu verwenden, um die volle Skripting-Power der Lua-Sprache in nginx zu nutzen.
Direktiven
array_split
Syntax: array_split <separator> <subject> to=$target_variable
Standard: nein
Kontext: http, server, server if, location, location if
Teilt den Zeichenfolgenwert im subject-Argument mit der durch das separator-Argument angegebenen Trennzeichen-Zeichenfolge. Das Ergebnis ist ein array-typisierter Wert, der in der durch die Option to=VAR angegebenen nginx-Variablen gespeichert wird.
Zum Beispiel,
array_split "," $arg_names to=$names;
teilt die Zeichenfolgenwerte im URI-Abfrageargument names in einen array-typisierten Wert, der in der benutzerdefinierten nginx-Variablen $names gespeichert wird.
Diese Direktive erstellt eine array-typisierte Variable. Array-typisierte Variablen können außerhalb der von diesem Modul angebotenen Direktiven nicht verwendet werden. Wenn Sie die Werte in einer array-typisierten Variablen in anderen Kontexten verwenden möchten, müssen Sie die array_join Direktive verwenden, um einen normalen Zeichenfolgenwert zu erzeugen.
array_join
Syntax: array_join <separator> $array_var
Standard: nein
Kontext: http, server, server if, location, location if
Verbindet die Elemente in der array-typisierten nginx-Variablen ($array_var) zu einem einzigen Zeichenfolgenwert mit dem durch das erste Argument angegebenen Trennzeichen.
Zum Beispiel,
location /foo {
array_split ',' $arg_names to=$names;
array_join '+' $names;
echo $names;
}
Dann wird die Anfrage GET /foo?names=Bob,Marry,John den Antworttext
Bob+Marry+John
erzeugen. Im obigen Beispiel verwenden wir die ngx_echo Modul-Direktive echo, um das Endergebnis auszugeben.
array_map
Syntax: array_map <template> $array_var
Syntax: array_map <template> $array_var to=$new_array_var
Standard: nein
Kontext: http, server, server if, location, location if
Ordnet die Zeichenfolgenvorlage jedem Element in der angegebenen array-typisierten nginx-Variablen zu. Innerhalb der Zeichenfolgenvorlage können Sie die spezielle Iterator-Variable $array_it verwenden, um auf das aktuelle Array-Element im abgebildeten Array zuzugreifen.
Zum Beispiel,
array_map "[$array_it]" $names;
ändert jedes Element in der Array-Variablen $names, indem es die eckigen Klammern um den Zeichenfolgenwert jedes Elements setzt. Die Modifikation erfolgt in diesem Fall in-place.
Wenn Sie keine In-Place-Modifikationen wünschen, können Sie die Option to=$var verwenden, um eine neue nginx-Variable zu spezifizieren, die die Ergebnisse speichert. Zum Beispiel,
array_map "[$array_it]" $names to=$new_names;
wobei die Ergebnisse in einer anderen (array-typisierten) nginx-Variablen namens $new_names gespeichert werden, während die Variable $names intakt bleibt.
Hier ist ein vollständiges Beispiel dafür:
location /foo {
array_split ',' $arg_names to=$names;
array_map '[$array_it]' $names;
array_join '+' $names;
echo "$names";
}
Dann wird die Anfrage GET /foo?names=bob,marry,nomas den Antworttext
[bob]+[marry]+[nomas]
erzeugen.
array_map_op
Syntax: array_map_op <directive> $array_var
Syntax: array_map_op <directive> $array_var to=$new_array_var
Standard: nein
Kontext: http, server, server if, location, location if
Ähnlich wie die array_map Direktive, aber wendet die angegebene nginx-Konfigurationsdirektive anstelle einer Zeichenfolgenvorlage auf jedes Element in der angegebenen array-typisierten nginx-Variablen an. Das Ergebnis der Anwendung der angegebenen Konfigurationsdirektive wird zum Ergebnis der Abbildung.
Die nginx-Konfigurationsdirektive, die als Iterator verwendet wird, muss vom Nginx Devel Kit (NDK) Submodul ndk_set_var_value implementiert sein. Zum Beispiel können die folgenden set-misc-nginx-module Direktiven auf diese Weise aufgerufen werden:
- set_quote_sql_str
- set_quote_pgsql_str
- set_quote_json_str
- set_unescape_uri
- set_escape_uri
- set_encode_base32
- set_decode_base32
- set_encode_base64
- set_decode_base64
- set_encode_hex
- set_decode_hex
- set_sha1
- set_md5
Dies ist eine höherwertige Operation, bei der andere nginx-Konfigurationsdirektiven als Argumente für diese map_array_op Direktive verwendet werden können.
Betrachten Sie das folgende Beispiel,
array_map_op set_quote_sql_str $names;
Diese Zeile ändert jedes Element in der array-typisierten nginx-Variablen $names, indem sie nacheinander die set_quote_sql_str Direktive des ngx_set_misc Moduls anwendet. Das Ergebnis ist, dass jedes Element im Array $names als SQL-Zeichenfolgenliteralwerte escaped wurde.
Sie können auch die Option to=$var angeben, wenn Sie keine In-Place-Modifikationen der Eingabearrays wünschen. Zum Beispiel,
array_map_op set_quote_sql_str $names to=$quoted_names;
speichert die escaped Elemente in einer neuen (array-typisierten) nginx-Variablen namens $quoted_names, während $names intakt bleibt.
Das folgende ist ein relativ vollständiges Beispiel:
location /foo {
array_split ',' $arg_names to=$names;
array_map_op set_quote_sql_str $names;
array_join '+' $names to=$res;
echo $res;
}
Dann wird die Anfrage GET /foo?names=bob,marry,nomas den Antworttext
'bob'+'marry'+'nomas'
erzeugen.
Ziemlich cool, oder?
Hier gehen wir davon aus, dass Sie nginx unter /opt/nginx/ installieren würden.
./configure --prefix=/opt/nginx \ --add-module=/path/to/ngx_devel_kit \ --add-module=/path/to/array-var-nginx-module
make -j2 make install ```
Laden Sie die neueste Version des Release-Tarballs dieses Moduls von der array-var-nginx-module-Dateiliste herunter und den neuesten Tarball für ngx_devel_kit von dessen Dateiliste.
Außerdem ist dieses Modul standardmäßig im OpenResty-Bundle enthalten und aktiviert.
Siehe auch
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-array-var.