GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich alle vhosts in nginx auflisten

Ab Version 1.9.2 können Sie Folgendes tun:

nginx -T

vollständige Nginx-Konfiguration anzeigen

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

zeigt dir alle Servernamen


grep server_name /etc/nginx/* -RiI

Imho viel schneller zu tippen als die Antwort von @ Haubix. Fügen Sie |grep -v "#" hinzu optional


Aktualisierung: Danke an @Putnik für den Hinweis auf einen einfacheren Weg (aber ich ziehe es vor, nur Sites aufzulisten, die aktiviert sind):

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

Alter Beitrag:

Probieren Sie so etwas aus:

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

Hoffe das hilft!


Die bisherigen Antworten funktionieren, außer wenn Sie server_name haben Anweisungen, die über mehrere Zeilen laufen, dann schlägt es stillschweigend fehl. Sie scheinen auch für den menschlichen Konsum geschrieben zu sein (sie nehmen zusätzliche Zeilen auf wie server_name_in_redirect off; ), sodass Sie sie nicht in ein Skript einfügen können.

Ich habe viele virtuelle Hosts und wollte die Ausgabe in einem Skript verwenden (seufz ), also hier ist etwas, das viel länger ist, aber robust genug für diesen Zweck sein sollte:

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

Da es lang und \ ist -y, ich füge eine kurze Erklärung jeder Zeile hinzu.

  1. Lassen Sie nginx seine gesamte Konfiguration drucken (damit wir uns keine Gedanken darüber machen müssen, welche Dateien eingeschlossen werden sollen) und bereinigen Sie es:Entfernen Sie führende und nachfolgende Leerzeichen, Kommentare (einschließlich nachfolgender) und Leerzeilen.
  2. Jede Zeile, die nicht mit einem Semikolon oder einer geschweiften Klammer endet, sollte fortgesetzt werden, also ersetzen wir jeden \n ohne vorangestelltes ; , { oder } mit einem Leerzeichen. Dies muss seds Weirdo :a;N;$!ba; verwenden Nehmen Sie den ganzen Dateitrick und einige Gruppierungen, damit wir das letzte Zeichen mit \1 zurücksetzen können , plus ein paar zusätzliche Backslashes als Glücksbringer.
  3. Jetzt können wir jeden server_name ziehen Zeile, mit einigen zusätzlichen Überprüfungen zum Entfernen von Nginx-Variablen ($foo ) und nur gültige Domänen enthalten (also nicht localhost und _ ).
  4. Alle Tabulatoren/Leerzeichen zwischen Wörtern werden in Wagenrückläufe umgewandelt, dann entfernen wir überschüssige Leerzeichen (nur für den Fall), Semikolons und den server_name Teil.
  5. Sortieren Sie es schließlich, vereinheitlichen Sie es und verwenden Sie xargs -L1 um die einzelne Leerzeile oben zu entfernen.

Beachten Sie, dass hier einige Teile enthalten sind, die technisch sind verdoppeln, aber ich möchte so klar und robust wie möglich sein. Verbesserungsvorschläge sind aber willkommen.


Linux
  1. So listen Sie alle installierten Pakete in Linux auf

  2. So listen Sie alle angemeldeten Benutzer auf

  3. Wie finde ich alle fest verlinkten Dateien in einem Dateisystem?

  4. Können Sie alle erweiterten Attribute anzeigen/auflisten und wie?

  5. Wie liste ich alle Benutzer mit root auf?

So listen Sie alle Benutzer in Linux auf

So finden Sie alle installierten Schriftarten in Linux

So zeigen Sie alle Datenbanken auf MySQL auf

So listen Sie alle Benutzer einer Gruppe in Linux auf

Wie listet man alle Gruppen in Linux auf?

Wie listet man alle Dateien in Linux nach Größe sortiert auf?