Variáveis ​​dinâmicas de fonte externa na configuração do proxy nginx

Variáveis ​​dinâmicas de fonte externa na configuração do proxy nginx

Preciso fazer algumas ações condicionais no nginx que está funcionando como proxy. Basicamente, tudo se resume a ser capaz de definir alguma variável nginx de uma fonte externa. Pode ser um script bash ou resultado gerado por url ou algo parecido.

Por exemplo:

set $var = [result of http request]

ou

set $var = [result of bash command]

Existem soluções confiáveis ​​para isso? Módulos? Se não for uma boa ideia fazer isso com o nginx, quais são as alternativas?

Responder1

A solução foi usarmódulo luaque executa um script lua simples para realizar o processamento necessário. Exemplo simples:

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

Tudo o que é retornado pelo script lua fica dentro $device_typeda variável.

O importante a lembrar é que na maioria das distribuições Linux, o módulo lua faz parte do pacote nginx-extras que deve ser instalado em vez do nginx-core padrão.

Responder2

O Nginx tem muitas variáveis ​​integradas[1]. Você poderia usar algo assim:

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

Uma solução baseada em bash poderia ser um "sed -i nginx_conf_file && service nginx reload", mas acho que não é muito limpo.

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

informação relacionada