GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mendaftar semua vhosts di nginx

mulai dari versi 1.9.2 Anda dapat melakukan:

nginx -T

tampilkan konfigurasi nginx lengkap

nginx -T | grep "server_name " #include the whitespace to exclude non relevant results

menampilkan semua nama server


grep server_name /etc/nginx/* -RiI

Saya lebih cepat mengetik daripada jawaban @ Haubix. Tambahkan |grep -v "#" opsional


Perbarui: Terima kasih kepada @Putnik karena telah menunjukkan cara yang lebih mudah (namun saya lebih suka hanya mencantumkan situs yang diaktifkan):

grep server_name /etc/nginx/sites-enabled/* -RiI

Pos Lama:

Coba sesuatu seperti ini:

find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'

Semoga itu bisa membantu!


Jawaban sejauh ini akan berhasil, kecuali jika Anda memiliki server_name arahan berjalan di beberapa baris, maka itu akan gagal secara diam-diam. Mereka juga tampaknya ditulis untuk konsumsi manusia (mengambil baris tambahan seperti server_name_in_redirect off; ) sehingga Anda tidak dapat memasukkannya ke dalam skrip.

Saya memiliki banyak host virtual, dan ingin menggunakan hasilnya dalam sebuah skrip (sigh ), jadi inilah sesuatu yang lebih panjang, tetapi harus cukup kuat untuk tujuan itu:

nginx -T | sed -r -e 's/[ \t]*$//' -e 's/^[ \t]*//' -e 's/^#.*$//' -e 's/[ \t]*#.*$//' -e '/^$/d' | \
sed -e ':a;N;$!ba;s/\([^;\{\}]\)\n/\1 /g' | \
grep -P 'server_name[ \t]' | grep -v '\$' | grep '\.' | \
sed -r -e 's/(\S)[ \t]+(\S)/\1\n\2/g' -e 's/[\t ]//g' -e 's/;//' -e 's/server_name//' | \
sort | uniq | xargs -L1

Karena panjang dan \ -y, saya akan menyertakan penjelasan singkat untuk setiap baris.

  1. Dapatkan nginx untuk mencetak seluruh konfigurasinya (sehingga kita tidak perlu khawatir tentang file mana yang akan disertakan) dan bersihkan:hapus spasi awal dan akhir, komentar (termasuk yang akhir) dan baris kosong.
  2. Setiap baris yang tidak diakhiri dengan titik koma atau kurung kurawal harus dilanjutkan, jadi kami mengganti \n tanpa ; sebelumnya , { atau } dengan spasi. Ini perlu menggunakan :a;N;$!ba; sed yang aneh ambil trik seluruh file, dan beberapa pengelompokan sehingga kita dapat mengembalikan karakter terakhir dengan \1 , ditambah banyak garis miring terbalik untuk keberuntungan.
  3. Sekarang kita dapat menarik setiap server_name baris, dengan beberapa pemeriksaan tambahan untuk menghapus variabel nginx ($foo ) dan hanya menyertakan domain yang valid (bukan localhost dan _ ).
  4. Setiap tab/spasi di antara kata diubah menjadi carriage return, lalu kami menghapus spasi berlebih (untuk berjaga-jaga), titik koma, dan server_name bagian.
  5. Akhirnya urutkan, uniqify dan gunakan xargs -L1 untuk menghapus satu baris kosong di bagian atas.

Perhatikan bahwa ada beberapa bit di sini yang secara teknis menggandakan, tapi saya ingin menjadi sejelas dan sekuat mungkin. Namun, saran untuk perbaikan diterima.


Linux
  1. Cara membuat daftar semua ekstensi PHP yang diinstal

  2. Bagaimana cara mendaftar semua pengguna dalam grup Linux?

  3. Bagaimana saya bisa menemukan semua file yang di-hardlink pada sistem file?

  1. Bisakah Anda menampilkan/mencantumkan semua atribut yang diperluas dan bagaimana caranya?

  2. Bagaimana cara mendaftar semua pengguna dengan root?

  3. Bagaimana cara mendaftar semua file partisi di linux?

  1. Cara Mendaftar Semua Paket yang Terinstal Di Linux

  2. Cara mendaftar semua pengguna yang masuk

  3. Bagaimana saya bisa mendaftar semua pengguna yang terkunci di Linux?