nginx membagi file konfigurasi besar

16

File konfigurasi default nginx saya menjadi besar. Saya ingin membaginya menjadi file konfigurasi yang lebih kecil, masing-masing hanya mencakup satu, maksimum 4 lokasi untuk setiap file, sehingga saya dapat mengaktifkan / menonaktifkannya dengan cepat.

File aktual terlihat seperti ini:

server {
    listen 80 default_server;
    root /var/www/

    location /1 {
        config info...;
    }

    location /2 {
        config info....;
    }        
    location /abc {
        proxy_pass...;
    }

    location /xyz {
        fastcgi_pass....;
    }
    location /5678ab {
        config info...;
    }

    location /admin {
        config info....;
    }

sekarang, jika saya ingin membagi yang memiliki hanya beberapa lokasi di setiap file (lokasi yang dimiliki bersama), apa yang akan menjadi cara yang tepat untuk melakukannya tanpa menyebabkan kekacauan (seperti menyatakan root di setiap file, maka memiliki jalur aneh yang nginx mencoba mencari file)?

oliverjkb
sumber

Jawaban:

22

Anda mungkin mencari includefungsi Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

Anda bisa menggunakannya seperti ini:

server {
  listen 80;
  server_name example.com;
  […]
  include conf/location.conf;
}

termasuk juga menerima wildcard sehingga Anda juga bisa menulis

include include/*.conf;

untuk memasukkan setiap file * .conf dalam direktori termasuk .

FLXN
sumber
Saya sudah mempertimbangkan ini tetapi melewatkannya, karena itu berarti mengedit konten file, bukan hanya memutuskan tautan file di folder yang didukung situs.
oliverjkb
@ardukar jadi solusi Anda adalah menggunakan folder yang mendukung situs?
Mark Stosberg
Saya sedikit bingung sekarang ...
FLXN
Maaf telah menjawab begitu terlambat! Sepertinya saya tidak membaca notifikasi .. -.- Saya sudah menggunakan solusi FLXN. Tapi itu tidak membuatku bahagia. Karena saya sedang membangun server untuk perusahaan yang lebih kecil, di mana administrasi dilakukan hanya melalui Browser, saya lebih suka tidak ingin membuat perubahan di dalam file. Jika sebuah layanan dinonaktifkan melalui browser, saya ingin subfolder (katakanlah 'lokasi') di nginx juga dinonaktifkan, maka memutuskan tautan file konfigurasi dalam folder yang didukung situs tampaknya merupakan ide terbaik.
oliverjkb
5

Anda dapat membuat folder situs dengan

mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled

# Dan kemudian bagi your_config.conffile besar Anda menjadi file yang lebih kecil sites-available/dengan:

YOURCONF="/etc/nginx/conf.d/your_config.conf"
cd /etc/nginx
mkdir -p sites-available sites-enabled
cd  sites-available/
csplit "$YOURCONF" '/^\s*server\s*{*$/' {*}
for i in xx*; do
  new=$(grep -oPm1 '(?<=server_name).+(?=;)' $i|sed -e 's/\(\w\) /\1_/g'|xargs);
  if [[ -e $new.conf ]] ; then
    echo "" >>$new.conf
    cat "$i">>$new.conf
    rm "$i"
  else
    mv "$i" $new.conf
  fi
done

(Saya meningkatkan ini dari sumber ini: /programming//a/9635153/1069083 )

Pastikan untuk menambahkan ini di bagian akhir di dalam httpblok Anda /etc/nginx/conf.d/*.conf;:

include /etc/nginx/sites-enabled/*.conf; 

Catatan: komentar di luar serverblok dipotong ke bagian bawah setiap file, jadi tidak boleh ada komentar SEBELUM serverblok. pindahkan komentar di baris pertama DI DALAM blok sebagai gantinya.

rubo77
sumber