mantendo redirecionamentos no nginx de uma fonte externa

15

Estou na situação de dar ao nosso departamento de marketing a oportunidade de manter seus redirecionamentos por conta própria. Até agora, eles passaram as informações para o departamento de TI e nós as atualizamos em nginx.conf .

Alguns desses caras estão bastante familiarizados com redirecionamentos no IIS ou mesmo no Apache, mas não é uma opção para dar acesso direto à configuração do nginx.

Vejo que não há suporte a nginx para .htaccess arquivos aos quais eu poderia dar acesso e também prefiro não conceder acesso de gravação a um arquivo conf que o nginx inclui. Eu espero que nosso marketing irá quebrar nossa configuração nginx dentro de horas ...

Existe uma possibilidade segura sem dar acesso ao coração do nosso balanceador de carga?

    
por Sascha 23.10.2012 / 09:01

1 resposta

24

Não há uma maneira de isolar adequadamente a configuração de reescrita como essa. Existem três abordagens que você pode seguir.

Módulo de mapa inclui

O módulo de mapa permite incluir mapeamentos de um arquivo separado. O Nginx ainda precisa ser recarregado depois que o arquivo é alterado e o arquivo de mapeamento deve estar sintaticamente correto, mas isso limita o que pode ser feito.

nginx.conf :

map $uri $new {
    include /etc/nginx/marketing.map;
}

server {
    ...
    if ($new) {
        rewrite ^ $new redirect;
    }
    ...
}

marketing.map :

/about  /company/about-us;
~^/people/(?<person>.*)$    /company/people/$person;

Configuração de pré-processamento

O primeiro é escrever um script que transforme os redirecionamentos de algum formato que você define na configuração do nginx. Por exemplo, dada uma lista de redirecionamentos separados por espaço:

/foo/(.*) /bar/$1

e um script:

#!/bin/sh
while read SOURCE DEST; do
    echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf

para formar a seguinte configuração:

rewrite /foo/(.*) /bar/$1 permanent;

Você então deseja executar nginx -t em toda a configuração para verificar se ela é válida antes de recarregar.

Processamento on-the-fly

A segunda opção é usar ngx_lua , ngx_perl ou ngx_js para implementar a leitura e o processamento de sua configuração de redirecionamento no próprio nginx. Por exemplo, a diretiva rewrite_by_lua permite executar Lua código para construir uma reescrita. Você precisa ter cuidado com a performance, pois estará interpretando o código para cada solicitação.

    
por 23.10.2012 / 22:14

Tags