GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je lister tous les vhosts dans nginx

à 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.

  1. 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.
  2. 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.
  3. 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 pas localhost et _ ).
  4. 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.
  5. 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.


Linux
  1. Comment lister tous les packages installés sous Linux

  2. Comment lister tous les utilisateurs connectés

  3. Comment puis-je répertorier tous les utilisateurs verrouillés sous Linux ?

  4. Comment puis-je obtenir une liste de tous les mots mal orthographiés dans un texte en utilisant Linux ?

  5. Comment puis-je supprimer tous les travaux arrêtés ?

Comment lister tous les utilisateurs sous Linux

Comment trouver toutes les polices installées sous Linux

Comment afficher la liste de toutes les bases de données sur MySQL

Comment lister tous les utilisateurs d'un groupe sous Linux

Comment lister tous les groupes sous Linux ?

Comment lister tous les fichiers classés par taille sous Linux ?