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.