поддержание перенаправлений в nginx из внешнего источника

15

Я нахожусь в ситуации, чтобы дать нашему отделу маркетинга возможность самостоятельно перенаправлять свои перенаправления. До сих пор они передавали информацию в ИТ-отдел, и мы хранили ее для них nginx.conf.

Некоторые из этих ребят хорошо знакомы с перенаправлениями в IIS или даже в Apache, но у них нет возможности предоставить им прямой доступ к конфигурации nginx.

Я вижу, что nginx не поддерживает .htaccessфайлы, к которым я мог бы предоставить доступ, и я также предпочел бы не предоставлять права на запись в conf-файл, который включает nginx. Я ожидаю, что наш маркетинг сломает нашу настройку nginx в течение нескольких часов ...

Есть ли безопасная возможность, не предоставляя им доступ к сердцу нашего балансировщика нагрузки?

Sascha
источник

Ответы:

24

Не существует встроенного способа правильно изолировать конфигурацию перезаписи таким образом. Есть три подхода, которые вы можете использовать.

Модуль карты включает

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

mgorven
источник
1
Модуль карты предоставляет слегка ограниченный способ настройки перенаправлений.
Mgorven
1
Метод карты выглядит очень многообещающе! Итак, я начну писать простой веб-сайт для поддержки файла карты. Спасибо!
Саша
2
К сожалению, в этот момент (осенью 2014 года) проект ngx_js был последний раз затронут более двух лет назад. Однако ngx_lua очень активен и в хорошем состоянии.
Ville
Теперь доступен nginScript (альфа-качество), который позволяет использовать подмножество js.
lifeisfoo