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.
- 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.
- 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. - 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 nichtlocalhost
und_
). - 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. - 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.