No hay una forma integrada de aislar adecuadamente la configuración de reescritura como esa. Hay tres enfoques que podría tomar.
El módulo de mapa incluye
El módulo de mapas le permite incluir asignaciones de un archivo separado. Nginx aún debe recargarse después de cambiar el archivo, y el archivo de mapeo debe ser sintácticamente correcto, pero limita lo que se puede hacer.
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;
Configuración previa al proceso
El primero es escribir un script que transforme los redireccionamientos desde algún formato que usted defina en la configuración nginx. Por ejemplo, dada una lista de redireccionamientos separados por espacios:
/foo/(.*) /bar/$1
y un guión:
#!/bin/sh
while read SOURCE DEST; do
echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf
para formar la siguiente configuración:
rewrite /foo/(.*) /bar/$1 permanent;
Luego, debe ejecutar nginx -t
toda la configuración para verificar que sea válida antes de volver a cargarla.
Procesamiento sobre la marcha
La segunda opción es usar ngx_lua , ngx_perl o ngx_js para implementar la lectura y el procesamiento de la configuración de redireccionamiento en nginx. Por ejemplo, la rewrite_by_lua
directiva le permite ejecutar código Lua para construir una reescritura. Sin embargo, debe tener cuidado con el rendimiento, ya que interpretará el código para cada solicitud.