maintien des redirections dans nginx à partir d'une source externe

15

Je suis en mesure de donner à notre service marketing l'opportunité de maintenir leurs redirections par leurs propres moyens. Jusqu'à présent, ils transmettaient les informations au service informatique et nous les conservions pour eux nginx.conf.

Certains de ces types connaissent bien les redirections dans IIS ou même dans Apache, mais il n'est pas possible de leur donner un accès direct à la configuration nginx.

Je vois qu'il n'y a pas de support nginx pour les .htaccessfichiers auxquels je pourrais donner accès et je préférerais également ne pas accorder l'accès en écriture à un fichier de conf que nginx inclut. Je m'attends à ce que notre marketing brise notre configuration nginx en quelques heures ...

Existe-t-il une possibilité sécurisée sans leur donner accès au cœur de notre équilibreur de charge?

Sascha
la source

Réponses:

24

Il n'y a aucun moyen intégré pour isoler correctement la configuration de réécriture comme ça. Vous pouvez adopter trois approches.

Le module de carte comprend

Le module de carte vous permet d'inclure des mappages à partir d'un fichier séparé. Nginx doit encore être rechargé après la modification du fichier et le fichier de mappage doit être syntaxiquement correct, mais cela limite ce qui peut être fait.

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;

Configuration de pré-processus

La première consiste à écrire un script qui transforme les redirections d'un format que vous définissez en configuration nginx. Par exemple, étant donné une liste de redirections séparées par des espaces:

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

et un script:

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

pour former la configuration suivante:

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

Vous voudrez alors exécuter nginx -tsur toute la configuration pour vérifier qu'elle est valide avant de recharger.

Traitement à la volée

La deuxième option consiste à utiliser ngx_lua , ngx_perl ou ngx_js pour implémenter la lecture et le traitement de votre configuration de redirection dans nginx lui-même. Par exemple, la rewrite_by_luadirective vous permet d'exécuter du code Lua pour construire une réécriture. Cependant, vous devez faire attention à la performance, car vous interpréterez le code pour chaque demande.

mgorven
la source
1
Le module de carte fournit un moyen légèrement restreint de configurer les redirections.
mgorven
1
La méthode de la carte semble très prometteuse! Je vais donc commencer à écrire un site Web simple pour maintenir le fichier de carte. Je vous remercie!
Sascha
2
Malheureusement, à ce stade (automne 2014), le projet ngx_js a été touché pour la dernière fois il y a plus de deux ans. ngx_lua est cependant très actif et bien entretenu.
Ville
Maintenant est disponible nginScript (qualité alpha) qui permet d'utiliser un sous-ensemble de js.
lifeisfoo