mantenimiento de redirecciones en nginx desde una fuente externa

15

Estoy en la situación de dar a nuestro departamento de marketing la oportunidad de mantener sus redireccionamientos por su cuenta. Hasta ahora, pasaron la información al departamento de TI y la mantuvimos para ellos nginx.conf.

Algunos de estos tipos están bastante familiarizados con las redirecciones en IIS o incluso en Apache, pero no es una opción darles acceso directo a la configuración de nginx.

Veo que no hay soporte nginx para .htaccessarchivos a los que podría dar acceso y también preferiría no otorgar acceso de escritura a un archivo conf que incluye nginx. Espero que nuestro marketing rompa nuestra configuración nginx en cuestión de horas ...

¿Existe alguna posibilidad segura sin darles acceso al corazón de nuestro equilibrador de carga?

Sascha
fuente

Respuestas:

24

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 -ttoda 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_luadirectiva 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.

mgorven
fuente
1
El módulo de mapa proporciona una forma ligeramente restringida de configurar redireccionamientos.
mgorven
1
¡El método del mapa parece muy prometedor! Entonces, comenzaré a escribir un sitio web simple para mantener el archivo de mapa. ¡Gracias!
Sascha
2
Lamentablemente, en este punto (otoño de 2014), el proyecto ngx_js se tocó por última vez hace dos años. Sin embargo, ngx_lua es muy activo y está bien mantenido.
Ville
Ahora está disponible nginScript (calidad alfa) que permite utilizar un subconjunto de js.
lifeisfoo