Nginx & Lua: Hacks, otimizações e observações

3

Após este post sobre o uso de Lua para aumentar a flexibilidade do nginx e na redução de carga no Eu estou curioso para saber como as pessoas estão usando Lua para melhorar a capacidade do nginx.

Existem quaisquer hacks, otimizações e & observações usando Lua ? Hacks que as pessoas usaram para descobrir capacidade com o Nginx que de outra forma seria complicado / impossível com um servidor web ou proxy reverso?

Editar:
Links: link
link
link

    
por Quintin Par 04.09.2012 / 20:23

2 respostas

2

Anteriormente, escrevemos uma solução que obtém dinamicamente a raiz do documento com base no domínio ou no alias de domínio especificado. Ele usa um banco de dados mysql para armazenar domainname para mapeamentos alias. O link para ele é
Um truque bastante interessante, pois pode impedir que você tenha vários hosts virtuais configurados e tenha apenas um em vez disso.

    
por 11.09.2012 / 12:57
1

Minha solução de raiz de documentos também usa Lua, mas usa um script bash em vez de um banco de dados. Em suma, ele inverte as partes do domínio e as usa como uma estrutura de diretórios. Dentro dessa estrutura, os diretórios prefixados com _ podem ser usados para diferenciar raízes de documentos de subdomínios.

por exemplo. domain.com - > com / domain / _public sub.dominio.com - > com / domain / sub / _public

server_name _ ~^(?<www>www\.)?(?<domain>[a-zA-Z0-9-\.]+)$;

set_by_lua $docRoot "
  local f = assert(io.popen('/path/to/conversion/script.sh '..ngx.var.domain, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  return s
";

root /var/www/$docRoot/_public;

Meu script de conversão é:

echo $1 | tr "." "\n"  | tac | tr "\n" "/" | rev | cut -b 2- | rev | tr -d "\n"

O recorte remove uma barra adicional enquanto o tr final é necessário porque ter uma nova linha na raiz nginx trunca o / _public

Eu rodei dezenas de domínios como este sem problemas. Pode ser mais lento que um gerador de configuração baseado em modelo para cada domínio, mas eu prefiro ter um único arquivo para solucionar problemas.

    
por 12.09.2012 / 12:48