Beibehalten von Weiterleitungen in Nginx von einer externen Quelle

15

Ich bin in der Lage, unserer Marketingabteilung die Möglichkeit zu geben, ihre Weiterleitungen selbst zu verwalten. Bisher haben sie die Informationen an die IT-Abteilung weitergegeben und wir haben sie für sie in verwaltet nginx.conf.

Einige dieser Leute sind mit Umleitungen in IIS oder sogar in Apache vertraut, aber es ist keine Option, ihnen direkten Zugriff auf die Nginx-Konfiguration zu gewähren.

Ich sehe, dass es keine Nginx-Unterstützung für .htaccessDateien gibt, auf die ich Zugriff gewähren könnte, und ich würde es auch vorziehen, keinen Schreibzugriff auf eine Conf-Datei zu gewähren, die Nginx enthält. Ich gehe davon aus, dass unser Marketing innerhalb weniger Stunden unser Nginx-Setup zum Erliegen bringen wird ...

Gibt es eine sichere Möglichkeit, ohne ihnen Zugriff auf das Herzstück unseres Load Balancers zu gewähren?

Sascha
quelle

Antworten:

24

Es gibt keinen eingebauten Weg, um die Neuschreibkonfiguration so richtig zu isolieren. Sie können drei Ansätze wählen.

Kartenmodul enthalten

Mit dem Kartenmodul können Sie Zuordnungen aus einer separaten Datei einfügen. Nginx muss nach dem Ändern der Datei immer noch neu geladen werden, und die Zuordnungsdatei muss syntaktisch korrekt sein, schränkt jedoch die Möglichkeiten ein.

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;

Konfiguration vor dem Prozess

Der erste besteht darin, ein Skript zu schreiben, das die Weiterleitungen von einem von Ihnen definierten Format in eine Nginx-Konfiguration umwandelt. Wenn Sie beispielsweise eine Liste von durch Leerzeichen getrennten Weiterleitungen angegeben haben:

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

und ein Skript:

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

um die folgende Konfiguration zu bilden:

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

Sie sollten dann nginx -tdie gesamte Konfiguration ausführen , um zu überprüfen, ob sie gültig ist, bevor Sie sie erneut laden.

On-the-Fly-Verarbeitung

Die zweite Möglichkeit besteht darin, ngx_lua , ngx_perl oder ngx_js zu verwenden, um das Lesen und Verarbeiten Ihrer Umleitungskonfiguration in nginx selbst zu implementieren. Mit der rewrite_by_luaDirektive können Sie beispielsweise Lua- Code ausführen , um ein Umschreiben zu erstellen. Sie müssen jedoch vorsichtig mit der Leistung sein, da Sie Code für jede Anforderung interpretieren.

mgorven
quelle
1
Das Kartenmodul bietet eine leicht eingeschränkte Möglichkeit zum Konfigurieren von Weiterleitungen.
mgorven
1
Die Kartenmethode sieht sehr vielversprechend aus! Also werde ich anfangen, eine einfache Website zu schreiben, um die Kartendatei zu pflegen. Vielen Dank!
Sascha
2
Leider wurde zu diesem Zeitpunkt (Herbst 2014) das Projekt ngx_js zuletzt vor über zwei Jahren angesprochen. ngx_lua ist jedoch sehr aktiv und gut gepflegt.
Ville
Jetzt ist nginScript (Alpha-Qualität) verfügbar , mit dem eine Teilmenge von js verwendet werden kann.
Lifeisfoo