apache2: obtenga una lista de controladores registrados


10

¿Es posible obtener una lista de todos los controladores de apache? Con setHandler es posible crear controladores.

Un posible uso sería agregar un controlador para una extensión de archivo específica ( addHandler ). Conocer todos los posibles controladores y su identificador facilitaría el proceso de hacerlos coincidir con una extensión de archivo (o en el caso de que los controladores de URL creen una lista de posibles URL).

Los manejadores deben administrarse en Apache Core en algún tipo de lista: ¿cómo es posible sacar esta lista?

Respuestas:


2

Apache no expone una lista de controladores configurados. Sin usar apachectl, no con nada más.

El mejor método que podría encontrar para obtener una lista de controladores configurados es simplemente grep la carpeta de configuración de Apache para Handlercapturar todo AddHandlery SetHandlerdeclaraciones.

Para hosts basados ​​en Debian (Ubuntu)

$ grep -ir "Handler" /etc/apache2/*
mods-enabled/php5.conf: SetHandler application/x-httpd-php
mods-enabled/php5.conf: SetHandler application/x-httpd-php-source
apache2.conf:           SetHandler server-status
mods-available/info.conf:    SetHandler server-info
mods-available/ldap.conf:    SetHandler ldap-status
mods-available/status.conf:  SetHandler server-status
mods-available/php5.conf:    SetHandler application/x-httpd-php
mods-available/php5.conf:    SetHandler application/x-httpd-php-source
sites-available/default:     AddHandler cgi-script .cgi
sites-enabled/000-default:   AddHandler cgi-script .cgi

Para hosts basados ​​en Redhat (Fedora, CentOS)

$ grep -ir "Handler" /etc/httpd/*
conf.d/php.conf:  AddHandler php5-script .php
conf/httpd.conf:  #AddHandler cgi-script .cgi
conf/httpd.conf:  #AddHandler send-as-is asis
conf/httpd.conf:  AddHandler type-map var
conf/httpd.conf:  #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
conf/httpd.conf:     AddHandler type-map var
conf/httpd.conf:#    SetHandler server-status
conf/httpd.conf:#    SetHandler server-info
conf.d/fcgid.conf:   AddHandler fcgid-script fcg fcgi fpl
conf.d/perl.conf:#   SetHandler perl-script
conf.d/perl.conf:#   SetHandler perl-script

¡Tenga en cuenta que no todos los controladores encontrados están de hecho registrados! Busque en mods-enabled(Debian) y haga caso omiso de las líneas que comienzan #por reducir solo los controladores registrados.

Como lo sugirió Jenny en los comentarios, las líneas comentadas se pueden eliminar filtrando la salida con grep -Pv '^[^ ]*:\s*#'. Aquí está el comando final para máquinas basadas en Debian:

$ grep -ir "Handler" /etc/apache2/* | grep -Pv '^[^ ]*:\s*#'

Y para máquinas basadas en Redhat:

$ grep -ir "Handler" /etc/httpd/* | grep -Pv '^[^ ]*:\s*#'

En los comentarios, el usuario gogoud proporciona una forma adicional de eliminar los controladores comentados, devolviendo así solo los controladores registrados:

// Debian or Ubuntu
$ grep -R "Handler" /etc/apache2/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

// Redhat, CentoOS, Fedora
$ grep -R "Handler" /etc/httpd/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

2
Para deshacerse de los manejadores comentados, use un poco de magia de encontrar y grep:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D

@ JennyD: Creo que eso eliminaría las líneas con comentarios después de las declaraciones, como AddHandler cgi-script .cgi # Ben needs CGI.
dotancohen

1
Cierto. Podría hacerlo con egrepuna expresión regular adecuada, que se deja como ejercicio para el lector (ya que desafortunadamente tengo que hacer un trabajo remunerado en este momento ...)
Jenny D

@JennyD: ¡Desafío aceptado! He agregado un filtro grep para líneas comentadas. Buen pensamiento, gracias!
dotancohen

¿Por qué los votos negativos repentinos? Esta respuesta responde directamente a la pregunta e incluso incluye ejemplos de las dos variantes de Linux más comunes. Si la respuesta pudiera mejorarse, agradecería algunas críticas constructivas .
dotancohen

0

Esto no es exactamente lo que desea, pero si habilita el server-infocontrolador en su configuración, la salida le dirá qué módulos tienen controladores y cuáles no, de esta manera:

Module Name: mod_negotiation.c
Content handlers: yes
....
Module Name: mod_mime.c
Content handlers: none
....

Esto fue con Apache 2.2, por lo que quizás las versiones posteriores le darán una salida más útil.


Gracias, sin embargo, no veo esa información. Esta página muestra la salida de server-info. Sin embargo, tenga en cuenta que la salida es una página estática copiada del servidor real y que se le sirve a través de una Raspberry Pi.
dotancohen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.