GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo enumerar todos los vhosts en nginx?

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.

  1. 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.
  2. 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.
  3. 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, no localhost y _ ).
  4. 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.
  5. 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.


Linux
  1. Cómo enumerar todos los paquetes instalados en Linux

  2. Cómo enumerar todos los usuarios registrados

  3. ¿Cómo puedo enumerar todos los usuarios bloqueados en Linux?

  4. ¿Cómo puedo obtener una lista de todas las palabras mal escritas en un texto usando Linux?

  5. ¿Cómo puedo eliminar todos los trabajos detenidos?

Cómo enumerar todos los usuarios en Linux

Cómo encontrar todas las fuentes instaladas en Linux

Cómo mostrar la lista de todas las bases de datos en MySQL

Cómo enumerar todos los usuarios de un grupo en Linux

¿Cómo enumerar todos los grupos en Linux?

¿Cómo enumerar todos los archivos ordenados por tamaño en Linux?