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


15

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

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

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

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

Ответы:


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


1
Модуль карты предоставляет слегка ограниченный способ настройки перенаправлений.
Mgorven

1
Метод карты выглядит очень многообещающе! Итак, я начну писать простой веб-сайт для поддержки файла карты. Спасибо!
Саша

2
К сожалению, в этот момент (осенью 2014 года) проект ngx_js был последний раз затронут более двух лет назад. Однако ngx_lua очень активен и в хорошем состоянии.
Ville

Теперь доступен nginScript (альфа-качество), который позволяет использовать подмножество js.
lifeisfoo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.