підтримка переспрямувань у nginx із зовнішнього джерела


15

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

Деякі з цих хлопців добре знайомі з перенаправленнями в IIS або навіть в Apache, але це не дає можливості надати їм прямий доступ до конфігурації nginx.

Я бачу, що не існує підтримки nginx для .htaccessфайлів, до яких я міг би надати доступ, і я також вважаю за краще не надавати доступ для запису до конф-файлу, до якого входить 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
Метод карти виглядає дуже перспективно! Отже, я почну писати простий веб-сайт для підтримки файлу map. Дякую!
Саша

2
На жаль, в цей момент (осінь 2014 року) проект ngx_js востаннє торкнувся понад два роки тому. Однак, ngx_lua дуже активний і добре підтримується.
Віль

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