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 -t
całą 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_lua
dyrektywa pozwala na wykonanie kodu Lua w celu skonstruowania przepisywania. Trzeba jednak uważać na wydajność, ponieważ będziesz interpretować kod dla każdego żądania.