Не існує вбудованого способу, щоб правильно ізолювати конфігурацію переписати так. Ви можете скористатися трьома підходами.
Модуль карт включає
Модуль карт дозволяє включати відображення з окремого файлу. 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 для побудови переписування. Ви повинні бути обережними щодо відповідності, оскільки ви будете інтерпретувати код для кожного запиту.