3 votes

Variables dynamiques provenant d'une source externe dans la configuration du proxy nginx

J'ai besoin de faire quelques actions conditionnelles dans nginx qui fonctionne comme un proxy. Fondamentalement, tout se résume à être en mesure de définir une certaine variable nginx à partir d'une source externe. Cela peut être un bash script ou un résultat généré par url ou quelque chose comme ça.

Par exemple :

set $var = [result of http request]

ou

set $var = [result of bash command]

Existe-t-il des solutions fiables pour cela ? Des modules ? Si ce n'est pas une bonne idée de le faire avec nginx, quelles sont les alternatives ?

0 votes

Eh bien, c'est une question trop vaste. Peut-être que le module Lua de Nginx pourrait vous aider.

0 votes

@AlexeyTen si vous "promouvez" votre commentaire sur Lua en une réponse avec un exemple, je serai heureux de l'accepter.

0 votes

Si vous êtes plus précis, il se peut qu'il y ait des variables que vous voulez et que vous n'ayez pas besoin de lua.

2voto

SiliconMind Points 161

La solution consistait à utiliser module lua qui exécute un simple lua script pour effectuer les traitements nécessaires. Exemple simple :

location / {
  # Get device type from lua script.
  # Note: do not use content_by_lua as it's executed in separate context.
  set_by_lua_file $device_type 'device-detect.lua';

  # Do what needs to be done...
}

Tout ce qui est renvoyé par le script de lua atterrit dans $device_type variable.

Il est important de se rappeler que sur la plupart des distributions linux, le module lua fait partie du paquet nginx-extras qui doit être installé à la place du paquet standard nginx-core.

0voto

maxxvw Points 321

Nginx a beaucoup de variables intégrées [1]. Vous pourriez utiliser quelque chose comme ceci :

#Default to EN
set $vislang "EN";
#Discriminate language
if ($http_accept_language ~* "^fr") {
    set $vislang "FR";
}

Une solution basée sur bash pourrait être un "sed -i nginx_conf_file && service nginx reload" mais je pense que ce n'est pas très propre.

[1] http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

0 votes

Je le sais. Mais ce dont j'ai besoin, c'est d'un moyen de définir la valeur d'une variable dynamiquement à partir d'une source externe (par exemple un script exécuté pour chaque requête).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X