mempertahankan pengalihan di nginx dari sumber eksternal

15

Saya berada dalam situasi untuk memberikan departemen pemasaran kami kesempatan untuk mempertahankan arahan ulang mereka sendiri. Sampai sekarang, mereka meneruskan informasi itu ke departemen TI dan kami menyimpannya untuk mereka nginx.conf.

Beberapa dari orang-orang ini cukup akrab dengan pengalihan di IIS atau bahkan di Apache tetapi tidak ada pilihan untuk memberi mereka akses langsung ke konfigurasi nginx.

Saya melihat, bahwa tidak ada dukungan nginx untuk .htaccessfile yang dapat saya berikan akses dan saya juga lebih suka untuk tidak memberikan akses tulis ke file conf yang termasuk nginx. Saya berharap, bahwa pemasaran kami akan merusak setup nginx kami dalam beberapa jam ...

Apakah ada kemungkinan aman tanpa memberi mereka akses ke jantung penyeimbang beban kami?

Sascha
sumber

Jawaban:

24

Tidak ada cara untuk mengisolasi konfigurasi penulisan ulang dengan benar seperti itu. Ada tiga pendekatan yang bisa Anda ambil.

Modul peta termasuk

The modul peta memungkinkan Anda untuk memasukkan pemetaan dari file terpisah. Nginx masih harus dimuat ulang setelah file diubah, dan file pemetaan harus benar secara sintaksis, tetapi itu membatasi apa yang bisa dilakukan.

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;

Konfigurasi pra-proses

Yang pertama adalah menulis skrip yang mengubah arahan ulang dari beberapa format yang Anda definisikan menjadi konfigurasi nginx. Misalnya, diberi daftar pengalihan yang dipisahkan ruang:

/foo/(.*) /bar/$1

dan skrip:

#!/bin/sh
while read SOURCE DEST; do
    echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf

untuk membentuk konfigurasi berikut:

rewrite /foo/(.*) /bar/$1 permanent;

Anda kemudian ingin menjalankan nginx -tseluruh konfigurasi untuk memeriksa apakah itu valid sebelum memuat ulang.

Pemrosesan langsung

Opsi kedua adalah menggunakan ngx_lua , ngx_perl atau ngx_js untuk mengimplementasikan membaca dan memproses konfigurasi pengalihan Anda di nginx itu sendiri. Misalnya, rewrite_by_luaarahan memungkinkan Anda untuk mengeksekusi kode Lua untuk membangun penulisan ulang. Anda harus berhati-hati tentang dalm karena Anda akan menafsirkan kode untuk setiap permintaan.

Mgorven
sumber
1
Modul peta memang menyediakan cara yang sedikit terbatas untuk mengkonfigurasi arahan ulang.
Mgorven
1
Metode peta terlihat sangat menjanjikan! Jadi, saya akan mulai menulis situs web sederhana untuk memelihara file peta. Terima kasih!
Sascha
2
Sayangnya, pada titik ini (musim gugur 2014) proyek ngx_js terakhir disentuh lebih dari dua tahun yang lalu. ngx_lua sangat aktif dan terawat dengan baik.
Ville
Sekarang tersedia nginScript (kualitas alpha) yang memungkinkan untuk menggunakan subset dari js.
lifeisfoo