Не существует встроенного способа правильно изолировать конфигурацию перезаписи таким образом. Есть три подхода, которые вы можете использовать.
Модуль карты включает
Модуль карты позволяет включать сопоставления из отдельного файла. Nginx все еще должен быть перезагружен после изменения файла, и файл отображения должен быть синтаксически правильным, но он ограничивает то, что может быть сделано.
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;
Конфигурация предварительной обработки
Первый - написать скрипт, который преобразует перенаправления из определенного вами формата в конфигурацию nginx. Например, приведен список перенаправлений, разделенных пробелами:
/foo/(.*) /bar/$1
и скрипт:
#!/bin/sh
while read SOURCE DEST; do
echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf
сформировать следующую конфигурацию:
rewrite /foo/(.*) /bar/$1 permanent;
Затем вы захотите запустить nginx -t
всю конфигурацию, чтобы проверить ее правильность перед перезагрузкой.
Обработка на лету
Второй вариант - использовать ngx_lua , ngx_perl или ngx_js для реализации чтения и обработки вашей конфигурации перенаправления в самом nginx. Например, rewrite_by_lua
директива позволяет вам выполнить код Lua для создания перезаписи. Вы должны быть осторожны с предварительным исполнением, поскольку вы будете интерпретировать код для каждого запроса.