mantenendo i reindirizzamenti in nginx da una fonte esterna


15

Sono nella situazione di dare al nostro ufficio marketing l'opportunità di mantenere i reindirizzamenti da soli. Fino ad ora, hanno passato le informazioni al dipartimento IT e le abbiamo conservate per loro nginx.conf.

Alcuni di questi ragazzi hanno una certa familiarità con i reindirizzamenti in IIS o anche in Apache, ma non è un'opzione per dare loro l'accesso diretto alla configurazione di nginx.

Vedo che non esiste alcun supporto nginx per i .htaccessfile a cui potrei dare accesso e preferirei anche non concedere l'accesso in scrittura a un file conf che nginx include. Mi aspetto che il nostro marketing rompa la nostra configurazione di nginx in poche ore ...

Esiste una possibilità sicura senza dare loro l'accesso al cuore del nostro bilanciamento del carico?

Risposte:


24

Non esiste un modo integrato per isolare correttamente la configurazione di riscrittura in questo modo. Ci sono tre approcci che potresti adottare.

Il modulo mappa include

Il modulo mappa consente di includere i mapping da un file separato. Nginx deve ancora essere ricaricato dopo la modifica del file e il file di mappatura deve essere sintatticamente corretto, ma limita ciò che può essere fatto.

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;

Configurazione pre-processo

Il primo è scrivere uno script che trasformi i reindirizzamenti da un formato definito in configurazione nginx. Ad esempio, dato un elenco di reindirizzamenti separati da spazio:

/foo/(.*) /bar/$1

e una sceneggiatura:

#!/bin/sh
while read SOURCE DEST; do
    echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf

per formare la seguente configurazione:

rewrite /foo/(.*) /bar/$1 permanent;

Dovresti quindi eseguire nginx -tl'intera configurazione per verificare che sia valida prima di ricaricare.

Elaborazione al volo

La seconda opzione è utilizzare ngx_lua , ngx_perl o ngx_js per implementare la lettura e l'elaborazione della configurazione di reindirizzamento in nginx stesso. Ad esempio, la rewrite_by_luadirettiva consente di eseguire il codice Lua per costruire una riscrittura. Devi stare attento alle preformance, poiché interpreterai il codice per ogni richiesta.


1
Il modulo mappa fornisce un modo leggermente limitato per configurare i reindirizzamenti.
mgorven

1
Il metodo della mappa sembra molto promettente! Quindi, inizierò a scrivere un semplice sito Web per mantenere il file della mappa. Grazie!
Sascha,

2
Purtroppo, a questo punto (autunno 2014) il progetto ngx_js è stato toccato l'ultima volta due anni fa. ngx_lua è comunque molto attivo e ben mantenuto.
Ville,

Ora è disponibile nginScript (qualità alfa) che consente di utilizzare un sottoinsieme di js.
lifeisfoo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.