utrzymywanie przekierowań w nginx z zewnętrznego źródła

15

Jestem w sytuacji, aby dać naszemu działowi marketingu możliwość samodzielnego utrzymania przekierowań. Do tej pory przekazali informacje do działu IT, a my je dla nich przechowaliśmy nginx.conf.

Niektórzy z tych facetów są dość dobrze zaznajomieni z przekierowaniami w IIS lub nawet w Apache, ale nie ma opcji, aby dać im bezpośredni dostęp do konfiguracji nginx.

Widzę, że nie ma wsparcia dla .htaccessplików Nginx, do którego mógłbym uzyskać dostęp, i wolałbym również nie przyznawać dostępu do zapisu do pliku conf, który zawiera Nginx. Oczekuję, że nasz marketing przełamie naszą konfigurację nginx w ciągu kilku godzin ...

Czy istnieje bezpieczna możliwość bez umożliwienia im dostępu do serca naszego modułu równoważenia obciążenia?

Sascha
źródło

Odpowiedzi:

24

Nie ma wbudowanego sposobu prawidłowego odizolowania konfiguracji przepisywania w ten sposób. Istnieją trzy podejścia, które możesz zastosować.

Moduł mapy obejmuje

Moduł map pozwala na to mapowania z oddzielnego pliku. Nginx musi zostać ponownie załadowany po zmianie pliku, a plik odwzorowania musi być poprawny pod względem składniowym, ale ogranicza to, co można zrobić.

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;

Konfiguracja przedprocesowa

Pierwszym jest napisanie skryptu, który przekształci przekierowania z określonego przez ciebie formatu w konfigurację nginx. Na przykład, biorąc pod uwagę listę przekierowań oddzielonych spacjami:

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

i skrypt:

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

aby utworzyć następującą konfigurację:

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

Następnie należy uruchomić nginx -tcałą konfigurację, aby sprawdzić, czy jest poprawna przed ponownym załadowaniem.

Przetwarzanie w locie

Drugą opcją jest użycie ngx_lua , ngx_perl lub ngx_js do zaimplementowania odczytu i przetwarzania konfiguracji przekierowania w samym nginx. Na przykład rewrite_by_luadyrektywa pozwala na wykonanie kodu Lua w celu skonstruowania przepisywania. Trzeba jednak uważać na wydajność, ponieważ będziesz interpretować kod dla każdego żądania.

mgorven
źródło
1
Moduł mapy zapewnia nieco ograniczony sposób konfigurowania przekierowań.
mgorven
1
Metoda mapy wygląda bardzo obiecująco! Zacznę więc pisać prostą stronę internetową do obsługi pliku mapy. Dziękuję Ci!
Sascha
2
Niestety, w tym momencie (jesień 2014) projekt ngx_js został ostatnio dotknięty ponad dwa lata temu. ngx_lua jest jednak bardzo aktywny i dobrze utrzymany.
Ville
Teraz jest dostępny nginScript (jakość alfa), który pozwala na użycie podzbioru js.
lifeisfoo