Назад | Перейти на главную страницу

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

Я имею возможность дать нашему отделу маркетинга возможность самостоятельно поддерживать перенаправления. До сих пор они передавали информацию в ИТ-отдел, и мы сохраняли ее для них в 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 код для создания перезаписи. Однако вы должны быть осторожны с преформой, поскольку вы будете интерпретировать код для каждого запроса.