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_type
da 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