Existe-t-il une commande répertoriant tous les vhosts ou serveurs s'exécutant sous nginx sur CentOS? Je voudrais transférer les résultats dans un fichier texte à des fins de rapport.
Je recherche quelque chose de similaire à cette commande que j'utilise pour Apache:
apachectl -S 2> & 1 | grep 'port 80'
Mise à jour: Merci à @Putnik pour avoir indiqué un moyen plus simple (mais je préfère uniquement lister les sites activés):
grep server_name /etc/nginx/sites-enabled/* -RiI
Old Post:
Essayez quelque chose comme ça:
find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'
J'espère que ça t'as aidé!
à partir de la version 1.9.2, vous pouvez faire:
nginx -T
affiche 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 serveur
Les réponses jusqu’à présent fonctionneront, sauf si vous avez server_name
directives sur plusieurs lignes, cela échouera silencieusement. Ils semblent aussi être destinés à la consommation humaine (ramasser des lignes supplémentaires comme server_name_in_redirect off;
) vous ne pouvez donc pas les inclure dans un script.
J'ai beaucoup d'hôtes virtuels et je voulais utiliser la sortie dans un script ( sigh ), alors voici quelque chose qui est beaucoup plus long, mais devrait l'être assez 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
Depuis que c'est long et \
- y, je vais inclure une brève explication de chaque ligne.
\n
sans précédent ;
, {
ou }
avec un espace. Cela doit utiliser sed's weirdo :a;N;$!ba;
récupère l'intégralité de l'astuce sur les fichiers, ainsi qu'un certain regroupement, de manière à pouvoir remettre le dernier caractère avec \1
, plus quelques barres obliques inverses supplémentaires pour la chance.server_name
ligne, avec quelques vérifications supplémentaires pour supprimer les variables nginx ($foo
) et n'inclut que les domaines valides (c'est-à-dire pas localhost
et _
).server_name
partie.xargs -L1
pour supprimer la seule ligne blanche en haut.Notez qu'il y a quelques bits ici qui sont techniquement en double, mais j'aime être aussi clair et robuste que possible. Des suggestions d'amélioration sont toutefois les bienvenues.
grep server_name /etc/nginx/* -RiI
Imho beaucoup plus rapide à taper que la réponse de @ Haubix. Ajouter |grep -v "#"
éventuellement
Outre toutes les autres solutions intéressantes, si vous avez simplement besoin d’une simple liste de tous les noms, un par ligne, comme:
example.com
my.example.com
etc.com
Analyser la config. Récupère toutes les lignes avec server_name
. Retirer server_name
. Enfin, mettez un domaine par ligne.
Sudo nginx -T | grep "server_name " | sed 's/.*server_name \(.*\);/\1/' | sed 's/ /\n/'
Vous pouvez répertorier les domaines ligne par ligne à l’aide des éléments suivants:
nginx_domains(){
domains=`find /etc/nginx/ -type f -name "*.conf" -print0 | xargs -0 egrep '^(\s|\t)*server_name' | sed -r 's/(.*server_name\s*|;)//g'`
for domain in $domains; do
echo $domain;
done
}