Variables dinámicas de fuente externa en la configuración del proxy nginx

Variables dinámicas de fuente externa en la configuración del proxy nginx

Necesito realizar algunas acciones condicionales en nginx que funciona como proxy. Básicamente, todo se reduce a poder configurar alguna variable nginx desde una fuente externa. Puede ser un script bash o un resultado generado por una URL o algo así.

Por ejemplo:

set $var = [result of http request]

o

set $var = [result of bash command]

¿Existe alguna solución confiable para esto? ¿Módulos? Si no es una buena idea hacer esto con nginx, ¿cuáles son las alternativas?

Respuesta1

La solución fue utilizarmódulo luaque ejecuta un script lua simple para realizar el procesamiento necesario. Ejemplo sencillo:

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...
}

Todo lo que devuelve el script lua aterriza dentro de $device_typela variable.

Lo importante que hay que recordar es que en la mayoría de las distribuciones de Linux, el módulo lua es parte del paquete nginx-extras que debe instalarse en lugar del nginx-core estándar.

Respuesta2

Nginx tiene muchas variables integradas[1]. Podrías usar algo como esto:

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

Una solución basada en bash podría ser "sed -i nginx_conf_file && service nginx reload", pero creo que no es muy limpia.

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

información relacionada