od verze 1.9.2 můžete:
nginx -T
zobrazit kompletní konfiguraci nginx
nginx -T | grep "server_name " #include the whitespace to exclude non relevant results
zobrazit všechny názvy serverů
grep server_name /etc/nginx/* -RiI
Imho mnohem rychlejší psaní než odpověď @Haubix. Přidejte |grep -v "#"
volitelně
Aktualizace: Děkuji @Putnik za naznačení jednoduššího způsobu (ale preferuji pouze uvádění webů s povoleným seznamem):
grep server_name /etc/nginx/sites-enabled/* -RiI
Starý příspěvek:
Zkuste něco takového:
find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'
Doufám, že to pomůže!
Dosavadní odpovědi budou fungovat,kromě pokud máte server_name
direktivy běžící na více řádcích, pak tiše selže. Zdá se také, že jsou napsány pro lidskou spotřebu (zachycují další řádky jako server_name_in_redirect off;
), takže je nemůžete zahrnout do skriptu.
Mám spoustu virtuálních hostitelů a chtěl jsem použít výstup ve skriptu (povzdech ), takže zde je něco, co je mnohem delší, ale mělo by být pro tento účel dostatečně robustní:
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
Protože je to dlouhé a \
-y, přidám rychlé vysvětlení každého řádku.
- Požádejte nginx, aby vytiskl celou svou konfiguraci (abyste se nemuseli starat o to, které soubory zahrnout) a vyčistěte ji:odstraňte mezeru na začátku a na konci, komentáře (včetně těch na konci) a prázdné řádky.
- Každý řádek, který nekončí středníkem nebo složenou složenou závorkou, by měl pokračovat, proto nahrazujeme všechny
\n
bez předchozího;
,{
nebo}
s mezerou. K tomu je potřeba použít sedův podivín:a;N;$!ba;
uchopit celý trik se souborem a nějaké seskupení, abychom mohli vrátit poslední znak zpět s\1
, plus spoustu dalších zpětných lomítek pro štěstí. - Nyní můžeme stáhnout každý
server_name
řádek s několika dalšími kontrolami pro odstranění proměnných nginx ($foo
) a zahrnují pouze platné domény (tj. nikolilocalhost
). a_
). - Všechny tabulátory/mezery mezi slovy se změní na návrat vozíku, poté odstraníme přebytečné mezery (pro jistotu), středníky a
server_name
část. - Nakonec to roztřiďte, sjednoťte a použijte
xargs -L1
k odstranění jednoho prázdného řádku nahoře.
Všimněte si, že jsou zde některé bity, které jsou technicky zdvojnásobení, ale chci být co nejjasnější a nejodolnější. Návrhy na zlepšení jsou však vítány.