mantendo redirecionamentos no nginx de uma fonte externa

15

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

Alguns desses caras estão familiarizados com os redirecionamentos no IIS ou mesmo no Apache, mas não há opção para fornecer acesso direto à configuração do nginx.

Entendo que não há suporte ao nginx para .htaccessarquivos aos quais eu poderia dar acesso e também preferiria não conceder acesso de gravação a um arquivo conf que o nginx inclui. Espero que nosso marketing interrompa nossa configuração do nginx em poucas horas ...

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

Sascha
fonte

Respostas:

24

Não existe uma maneira integrada de isolar adequadamente a configuração de reescrita dessa maneira. Existem três abordagens que você pode adotar.

O módulo de mapa inclui

O módulo de mapa permite incluir mapeamentos de um arquivo separado. O Nginx ainda precisa ser recarregado após a alteração do arquivo, e o arquivo de mapeamento deve estar sintaticamente correto, mas 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 pré-processo

O primeiro é escrever um script que transforme os redirecionamentos de algum formato definido 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ê deseja executar nginx -ta configuração inteira para verificar se é válida antes de recarregar.

Processamento rápido

A segunda opção é usar ngx_lua , ngx_perl ou ngx_js para implementar a leitura e o processamento da configuração de redirecionamento no próprio nginx. Por exemplo, a rewrite_by_luadiretiva permite executar o código Lua para construir uma reescrita. No entanto, você precisa ter cuidado com o desempenho, pois interpretará o código para cada solicitação.

mgorven
fonte
1
O módulo map fornece uma maneira um pouco restrita de configurar redirecionamentos.
mgorven
1
O método do mapa parece muito promissor! Então, vou começar a escrever um site simples para manter o arquivo de mapa. Obrigado!
26412 Sascha
2
Infelizmente, neste ponto (outono de 2014), o projeto ngx_js foi abordado pela última vez há mais de dois anos. ngx_lua é muito ativo e bem conservado, no entanto.
Ville
Agora está disponível o nginScript (qualidade alfa) que permite usar um subconjunto de js.
lifeisfoo