GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso elencare tutti i vhost in nginx

a partire dalla versione 1.9.2 puoi fare:

nginx -T

mostra la configurazione completa di nginx

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

mostra tutti i nomi dei server


grep server_name /etc/nginx/* -RiI

Imho molto più veloce da digitare rispetto alla risposta di @ Haubix. Aggiungi |grep -v "#" facoltativamente


Aggiornamento: Grazie a @Putnik per aver indicato un modo più semplice (ma preferisco elencare solo i siti abilitati):

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

Post precedente:

Prova qualcosa del genere:

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

Spero di esserti stato d'aiuto!


Le risposte finora funzioneranno, eccetto se hai server_name direttive in esecuzione su più righe, fallirà silenziosamente. Sembrano anche essere scritti per il consumo umano (raccogliendo righe extra come server_name_in_redirect off; ) quindi non puoi includerli in uno script.

Ho molti host virtuali e volevo usare l'output in uno script (sigh ), quindi ecco qualcosa che è molto più lungo, ma dovrebbe essere abbastanza robusto per quello scopo:

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

Dal momento che è lungo e \ -y, includerò una breve spiegazione di ogni riga.

  1. Fai in modo che nginx stampi la sua intera configurazione (in modo da non doverci preoccupare di quali file includere) e puliscila:rimuovi gli spazi iniziali e finali, i commenti (compresi quelli finali) e le righe vuote.
  2. Ogni riga che non termina con un punto e virgola o una parentesi graffa deve essere continuata, quindi sostituiamo qualsiasi \n senza un ; precedente , { o } con uno spazio. Questo deve usare lo strano :a;N;$!ba; di sed prendi l'intero trucco del file e alcuni raggruppamenti in modo da poter riportare l'ultimo carattere con \1 , oltre a un mucchio di barre rovesciate extra per fortuna.
  3. Ora possiamo estrarre ogni server_name line, con alcuni controlli extra per rimuovere le variabili nginx ($foo ) e includere solo domini validi (cioè non localhost e _ ).
  4. Eventuali tabulazioni/spazi tra le parole vengono trasformati in ritorni a capo, quindi rimuoviamo gli spazi in eccesso (per ogni evenienza), i punti e virgola e il server_name parte.
  5. Infine ordinalo, unificalo e usa xargs -L1 per rimuovere la singola riga vuota in alto.

Nota che qui ci sono alcune parti che sono tecnicamente raddoppiando, ma mi piace essere il più chiaro e robusto possibile. Suggerimenti per miglioramenti ben accetti, però.


Linux
  1. Come elencare tutte le estensioni PHP installate

  2. Come elencare tutti gli utenti in un gruppo Linux?

  3. Come posso elencare tutti gli utenti bloccati in Linux?

  4. Come posso ottenere un elenco di tutte le parole errate in un testo usando Linux?

  5. Come posso eliminare tutti i lavori interrotti?

Come elencare tutti gli utenti in Linux

Come trovare tutti i caratteri installati in Linux

Come mostrare l'elenco di tutti i database su MySQL

Come elencare tutti gli utenti di un gruppo in Linux

Come elencare tutti i gruppi in Linux?

Come elencare tutti i file ordinati per dimensione in Linux?