GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu vypsat všechny vhosty v nginx

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.

  1. 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.
  2. 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í.
  3. 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. nikoli localhost). a _ ).
  4. 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.
  5. 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.


Linux
  1. Jak vypsat všechny nainstalované balíčky v Linuxu

  2. Jak vypsat všechny přihlášené uživatele

  3. Jak mohu uvést seznam všech zamčených uživatelů v Linuxu?

  1. Jak vypsat všechny uživatele ve skupině Linuxu?

  2. Jak mohu získat seznam všech chybně napsaných slov v textu pomocí Linuxu?

  3. Jak vypíšu všechny uživatele s rootem?

  1. Jak najdu všechny pevné odkazy na souborovém systému?

  2. Můžete zobrazit/vypsat všechny rozšířené atributy a jak?

  3. Jak mohu zabít všechny zastavené úlohy?