Я имею возможность дать нашему отделу маркетинга возможность самостоятельно поддерживать перенаправления. До сих пор они передавали информацию в ИТ-отдел, и мы сохраняли ее для них в nginx.conf
.
Некоторые из этих ребят хорошо знакомы с перенаправлениями в IIS или даже в Apache, но дать им прямой доступ к конфигурации nginx невозможно.
Я вижу, что nginx не поддерживает .htaccess
файлы, к которым я мог бы предоставить доступ, и я бы также предпочел не предоставлять доступ на запись к conf-файлу, который включает nginx. Я ожидаю, что наш маркетинг сломает нашу настройку nginx в течение нескольких часов ...
Есть ли безопасная возможность без предоставления им доступа к сердцу нашего балансировщика нагрузки?
Не существует встроенного способа должным образом изолировать такую конфигурацию перезаписи. Есть три подхода.
В модуль карты позволяет включать сопоставления из отдельного файла. 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 код для создания перезаписи. Однако вы должны быть осторожны с преформой, поскольку вы будете интерпретировать код для каждого запроса.