Zum Inhalt

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:

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.