array-var: Variables de type tableau pour NGINX
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et 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
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_array_var_module.so;
Ce document décrit nginx-module-array-var v0.6 publié le 23 mai 2022.
location /foo {
array_split ',' $arg_files to=$array;
# utilisez la directive set_quote_sql_str dans le module ngx_set_misc
# pour mapper à chaque élément du tableau $array :
array_map_op set_quote_sql_str $array;
array_map "name = $array_it" $array;
array_join ' or ' $array to=$sql_condition;
# eh bien, nous pourrions le transmettre à ngx_drizzle pour parler à MySQL, par exemple ;)
echo "select * from files where $sql_condition";
}
Description
Ce module fournit des variables nginx de type tableau à nginx.conf.
Sous le capot, ce module "abuse" simplement des valeurs de chaîne nginx pour contenir des pointeurs binaires
vers des structures de données C (la structure ngx_array_t du cœur de NGINX).
Le type tableau donne à nginx.conf de merveilleuses capacités de gestion des listes de valeurs. De nos jours, cependant,
il est fortement recommandé d'utiliser le module ngx_lua
afin de bénéficier de toute la puissance de script fournie par le langage Lua dans nginx.
Directives
array_split
syntaxe : array_split <séparateur> <sujet> to=$target_variable
par défaut : non
contexte : http, serveur, serveur si, emplacement, emplacement si
Divise la valeur de chaîne dans l'argument sujet avec la chaîne séparatrice spécifiée par l'argument
séparateur. Le résultat est une valeur de type tableau enregistrée dans la variable nginx spécifiée par l'option to=VAR.
Par exemple,
array_split "," $arg_names to=$names;
divisera les valeurs de chaîne dans l'argument de requête URI names en une valeur de type tableau enregistrée dans la variable nginx personnalisée
$names.
Cette directive crée une variable de type tableau. Les variables de type tableau ne peuvent pas être utilisées en dehors des directives offertes par ce module. Si vous souhaitez utiliser les valeurs d'une variable de type tableau dans d'autres contextes, vous devez utiliser la directive array_join pour produire une valeur de chaîne normale.
array_join
syntaxe : array_split <séparateur> $array_var
par défaut : non
contexte : http, serveur, serveur si, emplacement, emplacement si
Joint les éléments de la variable nginx de type tableau ($array_var) en une seule valeur de chaîne
avec le séparateur spécifié par le premier argument.
Par exemple,
location /foo {
array_split ',' $arg_names to=$names;
array_join '+' $names;
echo $names;
}
Ensuite, la requête GET /foo?names=Bob,Marry,John produira le corps de la réponse
Bob+Marry+John
Dans l'exemple ci-dessus, nous utilisons la directive echo du module ngx_echo pour afficher le résultat final.
array_map
syntaxe : array_map <template> $array_var
syntaxe : array_map <template> $array_var to=$new_array_var
par défaut : non
contexte : http, serveur, serveur si, emplacement, emplacement si
Mappe le modèle de chaîne à chaque élément de la variable nginx de type tableau spécifiée. Dans
le modèle de chaîne, vous pouvez utiliser la variable d'itérateur spéciale $array_it pour référencer l'élément
actuel du tableau en cours de mappage.
Par exemple,
array_map "[$array_it]" $names;
changera chaque élément de la variable de tableau $names en mettant des crochets autour
de la valeur de chaîne de chaque élément. La modification est en place dans ce cas.
Si vous ne souhaitez pas de modifications en place, vous pouvez utiliser l'option to=$var pour spécifier une nouvelle variable nginx pour contenir les résultats. Par exemple,
array_map "[$array_it]" $names to=$new_names;
où les résultats sont enregistrés dans une autre variable nginx (de type tableau) nommée $new_names tandis que
la variable $names reste intacte.
Voici un exemple complet pour cela :
location /foo {
array_split ',' $arg_names to=$names;
array_map '[$array_it]' $names;
array_join '+' $names;
echo "$names";
}
Ensuite, la requête GET /foo?names=bob,marry,nomas produira le corps de la réponse
[bob]+[marry]+[nomas]
array_map_op
syntaxe : array_map_op <directive> $array_var
syntaxe : array_map_op <directive> $array_var to=$new_array_var
par défaut : non
contexte : http, serveur, serveur si, emplacement, emplacement si
Semblable à la directive array_map mais mappe la directive de configuration nginx spécifiée au lieu d'un modèle de chaîne à chaque élément de la variable nginx de type tableau spécifiée. Le résultat de l'application de la directive de configuration spécifiée devient le résultat du mappage.
La directive de configuration nginx utilisée comme itérateur doit être mise en œuvre par le sous-module set_var du Nginx Devel Kit (NDK) ndk_set_var_value.
Par exemple, les directives suivantes du set-misc-nginx-module peuvent être invoquées de cette manière :
- 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
C'est une opération d'ordre supérieur où d'autres directives de configuration nginx peuvent être utilisées
comme arguments pour cette directive map_array_op.
Considérez l'exemple suivant,
array_map_op set_quote_sql_str $names;
Cette ligne change chaque élément de la variable nginx de type tableau $names en appliquant la
directive set_quote_sql_str
fournie par le module ngx_set_misc
un par un. Le résultat est que chaque élément du tableau $names a été échappé en tant que valeurs littérales de chaîne SQL.
Vous pouvez également spécifier l'option to=$var si vous ne souhaitez pas de modifications en place des tableaux d'entrée. Par exemple,
array_map_op set_quote_sql_str $names to=$quoted_names;
enregistrera les éléments échappés dans une nouvelle variable nginx (de type tableau) nommée $quoted_names avec $names intact.
Voici un exemple relativement complet :
location /foo {
array_split ',' $arg_names to=$names;
array_map_op set_quote_sql_str $names;
array_join '+' $names to=$res;
echo $res;
}
Ensuite, la requête GET /foo?names=bob,marry,nomas produira le corps de la réponse
'bob'+'marry'+'nomas'
Assez cool, non ?
Ici, nous supposons que vous installeriez votre nginx sous /opt/nginx/.
./configure --prefix=/opt/nginx \ --add-module=/path/to/ngx_devel_kit \ --add-module=/path/to/array-var-nginx-module
make -j2 make install ```
Téléchargez la dernière version de l'archive tar de ce module depuis array-var-nginx-module file list, et la dernière archive tar pour ngx_devel_kit depuis sa file list.
De plus, ce module est inclus et activé par défaut dans le bundle OpenResty.
Voir aussi
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-array-var.