¿Cómo puedo ver la configuración httpd completa?

83

Estoy tratando de averiguar cuál es la configuración completa completa de una configuración httpd.

Todos los archivos de configuración están dispersos en diferentes archivos (/etc/httpd/conf.d, httpd.conf, varias configuraciones de mod)

¿Hay alguna forma de listar la configuración httpd final?
¿Te gusta toda la configuración de instalación en ejecución en un solo archivo?

Gnafu
fuente
12
apachectl -Spara ejecutar config, apachectl -Mpara mostrar módulos cargados
arco444
7
Excepto que apachectl -Sno le da ni "la configuración completa completa" ni "la configuración de instalación completa en ejecución en un solo archivo".
Frederick Nord
1
Stack Overflow es un sitio para preguntas de programación y desarrollo. Esta pregunta parece estar fuera de tema porque no se trata de programación o desarrollo. Consulte ¿Qué temas puedo preguntar aquí en el Centro de ayuda? Tal vez Web Applications Stack Exchange , Webmaster Stack Exchange o Unix & Linux Stack Exchange sería un mejor lugar para preguntar.
jww
@imme Me parece divertido cómo su primer enlace "relacionado" es esta misma pregunta. También me parece muy divertido que haya copiado / pegado el mismo comentario en todos los enlaces a los que ha hecho referencia. Divertido :)
Hickory420

Respuestas:

50

Como señaló arco444, puede usar apachectl -Spara mostrar una descripción general de los VirtualHosts que se ejecutan actualmente desde las configuraciones y apachectl -Mpara mostrar todos los módulos cargados actualmente; no conozco una herramienta para mostrar la salida detallada de todas las configuraciones analizadas (y en qué orden fueron analizados) en el lanzamiento de httpd, pero le recomendaría que se familiarice con la estructura general de los archivos de configuración httpd :

De particular interés para su pregunta: el archivo de configuración de apache 'principal' se encuentra en /etc/httpd/conf/httpd.conf(en la región de la línea 221 en una instalación httpd predeterminada de los repositorios incluidos en CentOS 6, que supongo que está utilizando en función de sus etiquetas de publicación), y los archivos de configuración 'complementarios' se encuentran en /etc/httpd/conf.dy deben incluirse explícitamente en el archivo de configuración principal. Por ejemplo, si busca en el httpd.confarchivo el término ' Include', encontrará la línea Include conf.d/*.confque es la que incluye todos los archivos de extensión .confen el subdirectorio conf.d, en orden alfabético, por lo que querrá familiarizarse con la importancia del análisis de archivos de configuración en algún punto si es posible.

Además, si está utilizando un editor de texto basado en shell como vim, le sugiero que habilite la numeración de líneas y el resaltado de sintaxis de forma predeterminada para que los archivos de configuración tan largos sean un poco más fáciles de analizar y navegar, en el caso de vim , lo haría creando un archivo en su directorio de inicio llamado .vimrc(o agregando a uno existente) y agregando las siguientes líneas:

set nu
syntax on
BE77Y
fuente
Estamos usando apache 2.2 en CentOS. Sin embargo, apachectl no está disponible.
user674669
17

Como se describe en la documentación del servidor HTTP Apache

Si se establece config define -DDUMP_CONFIG, mod_info volcará la configuración previamente analizada a stdout durante el inicio del servidor.

httpd -DDUMP_CONFIG -k start

DUMP_CONFIGrequiere mod_infohabilitado a2enmod info:!

En Ubuntu haz lo siguiente

sudo apache2ctl -DDUMP_CONFIG

Si desea quitar los números de línea, hágalo

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"

o redirigir a un archivo

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$" > /path/to/dump.conf

Limitaciones conocidas

mod_info proporciona su información leyendo la configuración analizada, en lugar de leer el archivo de configuración original. Existen algunas limitaciones como resultado de la forma en que se crea el árbol de configuración analizado:

  • Las directivas que se ejecutan inmediatamente en lugar de almacenarse en la configuración analizada no se enumeran. Estos incluyen ServerRoot, LoadModule y LoadFile.
  • Las directivas que controlan el archivo de configuración en sí, como Incluir, y no se enumeran, pero las directivas de configuración incluidas sí lo están.
  • Los comentarios no se enumeran. (Esto puede considerarse una característica).
  • Las directivas de configuración de los archivos .htaccess no se enumeran (ya que no forman parte de la configuración permanente del servidor).
  • Las directivas de contenedor como las que se enumeran normalmente, pero mod_info no puede averiguar el número de línea para el cierre.
  • Es posible que las directivas generadas por módulos de terceros como mod_perl no aparezcan en la lista.
Wolfrevo
fuente
2

Tengo un script (por desgracia, en Perl; perdóname, es antiguo) que aplana los archivos de configuración, elimina los comentarios (de forma predeterminada) e incluye # FILEcomentarios para que puedas averiguar qué archivo contiene lo que podrías estar buscando.

Lo escribí con Apache httpd, aunque también se usa con Oracle OHS

https://github.com/cameronkerrnz/scriptorium/blob/master/httpd-dump-config

Particularmente útil para comparar configuraciones en diferentes máquinas con SSH y diff / meld / etc.

Ejemplo:

httpd-dump-config | grep -i -e '# FILE:' -e servername -e serveralias
# FILE: /etc/httpd/conf/maintenance-curtain.conf
# FILE: /etc/httpd/conf.d/proxy.conf
# FILE: /etc/httpd/otago/secure-www.alias.conf
# FILE: /etc/httpd/conf.d/proxy.conf
    ServerName www.otago.ac.nz
    ServerAlias otago.ac.nz

Aquí hay un ejemplo usando diff (CLI) y meld (GUI):

diff -Bb <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config)

meld <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config) &

He usado esto mucho a lo largo de los años al navegar por una configuración con miles de líneas de configuración distribuidas en muchos archivos.

Cameron Kerr
fuente
0

Cuando tuve que mantener demasiadas configuraciones de Apache, me equipé con un script que hizo lo que me pediste. Me ayudó un montón.

awk -v pc=$APCALL '

  NR == 1 {
    if (pf != "") {
      print "### End of "  pf  " ###"
    }
    print "### "  FILENAME  " ###"
    pf = FILENAME
  }
  { if (pc || ( $1 !~ "^#" && $0 != "" ) ) {
       printf "%5d %s\n", NR, $0
    }
  }
  $1 ~ /^Include(Optional)?$/ {
    $1 = ""
    system("for ACF in " $0 "; do apache_config.sh $ACF; done" )
  }
  END {
      print "### End of "  pf  " ###"
  }
' "$@"

Puede configurar la variable de entorno APCALL si desea ver los comentarios y las líneas vacías, lo que en su mayoría no hice. Advertencia: debe ejecutarse desde ServerRoot.

Gerard H. Pille
fuente