a partir de la versión 1.9.2 puedes hacer:
nginx -T
mostrar la configuración completa de nginx
nginx -T | grep "server_name " #include the whitespace to exclude non relevant results
mostrarle todos los nombres de servidor
grep server_name /etc/nginx/* -RiI
Imho mucho más rápido de escribir que la respuesta de @Haubix. Agregue |grep -v "#"
opcionalmente
Actualización: Gracias a @Putnik por señalar una forma más fácil (pero prefiero enumerar solo los sitios habilitados):
grep server_name /etc/nginx/sites-enabled/* -RiI
Publicación antigua:
Prueba algo como esto:
find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'
¡Espero que eso ayude!
Las respuestas hasta ahora funcionarán, excepto si tienes server_name
directivas que se ejecutan en varias líneas, fallará silenciosamente. También parecen estar escritos para el consumo humano (recogiendo líneas adicionales como server_name_in_redirect off;
) para que no pueda incluirlos en un script.
Tengo muchos hosts virtuales y quería usar la salida en un script (suspiro ), así que aquí hay algo que es mucho más largo, pero debería ser lo suficientemente robusto para ese propósito:
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
Ya que es largo y \
-y, incluiré una explicación rápida de cada línea.
- Haga que nginx imprima su configuración completa (para que no tengamos que preocuparnos por qué archivos incluir) y desinfecte:elimine los espacios iniciales y finales, los comentarios (incluidos los finales) y las líneas en blanco.
- Cada línea que no termine con un punto y coma o una llave debe continuar, por lo que reemplazamos cualquier
\n
sin un precedente;
,{
o}
con un espacio Esto necesita usar el bicho raro de sed:a;N;$!ba;
toma el truco del archivo completo y algunas agrupaciones para que podamos volver a colocar el último carácter con\1
, además de un montón de barras invertidas adicionales para la suerte. - Ahora podemos extraer cada
server_name
línea, con algunas comprobaciones adicionales para eliminar las variables nginx ($foo
) y solo incluye dominios válidos (es decir, nolocalhost
y_
). - Cualquier tabulación/espacio entre palabras se convierte en retornos de carro, luego eliminamos los espacios sobrantes (por si acaso), los puntos y comas y el
server_name
parte. - Finalmente ordénelo, unifíquelo y use
xargs -L1
para eliminar la única línea en blanco en la parte superior.
Tenga en cuenta que hay algunos bits aquí que son técnicamente duplicándome, pero me gusta ser lo más claro y sólido posible. Sin embargo, se aceptan sugerencias para mejorar.