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.
- 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.
- 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. - Ora possiamo estrarre ogni
server_name
line, con alcuni controlli extra per rimuovere le variabili nginx ($foo
) e includere solo domini validi (cioè nonlocalhost
e_
). - 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. - 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ò.