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 -t
a 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_lua
diretiva 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.