à partir de la version 1.9.2 vous pouvez faire :
nginx -T
afficher la configuration complète de nginx
nginx -T | grep "server_name " #include the whitespace to exclude non relevant results
vous montrer tous les noms de serveurs
grep server_name /etc/nginx/* -RiI
Imho beaucoup plus rapide à taper que la réponse de @ Haubix.Ajouter |grep -v "#"
éventuellement
Mise à jour : Merci à @Putnik d'avoir indiqué un moyen plus simple (mais je préfère ne répertorier que les sites activés) :
grep server_name /etc/nginx/sites-enabled/* -RiI
Ancien message :
Essayez quelque chose comme ceci :
find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'
J'espère que ça aide !
Les réponses jusqu'à présent fonctionneront, sauf si vous avez server_name
directives s'exécutant sur plusieurs lignes, il échouera silencieusement. Ils semblent également être écrits pour la consommation humaine (en prenant des lignes supplémentaires comme server_name_in_redirect off;
) afin que vous ne puissiez pas les inclure dans un script.
J'ai beaucoup d'hôtes virtuels et je voulais utiliser la sortie dans un script (soupir ), voici donc quelque chose qui est beaucoup plus long, mais qui devrait être suffisamment robuste pour cela :
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
Comme c'est long et \
-y, je vais inclure une explication rapide de chaque ligne.
- Demandez à nginx d'imprimer l'intégralité de sa configuration (afin que nous n'ayons pas à nous soucier des fichiers à inclure) et de la nettoyer :supprimez les espaces de début et de fin, les commentaires (y compris ceux de fin) et les lignes vides.
- Chaque ligne qui ne se termine pas par un point-virgule ou une accolade doit être continuée, nous remplaçons donc tout
\n
sans;
précédent ,{
ou}
avec un espace. Cela doit utiliser le bizarre:a;N;$!ba;
de sed récupérez toute l'astuce du fichier, et quelques regroupements pour que nous puissions remettre le dernier caractère avec\1
, plus un tas de barres obliques inverses supplémentaires pour la chance. - Nous pouvons maintenant extraire chaque
server_name
ligne, avec quelques vérifications supplémentaires pour supprimer les variables nginx ($foo
) et n'inclure que des domaines valides (c'est-à-dire paslocalhost
et_
). - Tous les tabulations/espaces entre les mots sont transformés en retours chariot, puis nous supprimons les espaces excédentaires (juste au cas où), les points-virgules et le
server_name
partie. - Enfin, triez-le, unifiez-le et utilisez
xargs -L1
pour supprimer la seule ligne vide en haut.
Notez qu'il y a quelques éléments ici qui sont techniquement doubler, mais j'aime être aussi clair et robuste que possible. Les suggestions d'amélioration sont les bienvenues.