2011-05-17 19:55:14 +0000 2011-05-17 19:55:14 +0000
393
393

¿Cómo comprobar qué módulos de apache están habilitados/instalados?

¿Cuál es la forma más elegante de comprobar qué módulos de apache están habilitados?

Respuestas (11)

483
483
483
2011-05-17 20:01:43 +0000

Estás en Ubuntu, así que prueba:

apache2ctl -M
120
120
120
2011-05-17 19:56:42 +0000

httpd -M le dirá qué módulos están incorporados o compartidos.

37
37
37
2012-04-11 09:10:50 +0000

Nada de las respuestas anteriores funciona si no puedes ejecutar los comandos en el servidor remoto. Si sólo tienes privilegios de “usuario” o ninguno, intenta crear el script test.php:

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

Aunque sólo funcionará si PHP está instalado como mod_php.

28
28
28
2015-05-04 11:33:10 +0000

Tal vez esto ayude a algunas personas en hosts compartidos sin acceso a httpd, apachectl o procesos:

Módulos habilitados: ls /etc/apache2/mods-enabled/

Módulos disponibles: ls /etc/apache2/mods-available/

18
18
18
2013-02-06 07:04:37 +0000

También puedes usar apachectl

apachectl -t -D DUMP_MODULES
14
14
14
2011-05-17 20:57:05 +0000

Creo que en realidad hay tres preguntas aquí. No estoy seguro de cuáles son.

  • ¿Qué módulos tiene en el disco. Cuáles son todos los módulos que puede usar.

Esto estaría (normalmente) en el directorio modules de su distribución de apache, normalmente /etc/httpd/modules/

  • Qué módulos es cualquier instancia específica configurada para ejecutarse.

Esto puede comprobarse con /usr/sbin/httpd -M, al menos para el sistema base de apache. Si quiere comprobar un fichero de configuración específico /usr/sbin/httpd -M -f /ruta/al/archivo de configuración

  • Qué hay en un apache en ejecución

Para obtener mucha información, puede verla con http://machinename/server-info/ Esto no está configurado por defecto, tendría que configurar en él. Es un poco de fuga de información, así que configúralo para que sólo lo vea la gente local.

Si estás en la máquina y tienes acceso a ser el usuario que se está ejecutando, también puedes ver lo que está cargado comprobando el proceso. Puedes encontrar el proceso padre con:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'

Entonces comprueba

cat /proc/PID_FROM_ABOVE/maps
11
11
11
2014-03-11 18:41:39 +0000

Si estás en Redhat/CentOS, httpd se usa en lugar de apache2ctl.

Esto significa que necesitas usar el

httpd -M

Sin embargo, httpd casi nunca está en el camino que esperas.

Puedo confirmar en CentOS 5.8 que el camino real es /usr/sbin/httpd.

/usr/sbin/httpd -M

Pero si ese no es el camino, puedes descubrirlo. Así es como fui capaz de hacerlo.

Primero, comprobé el demonio que se usa para controlarlo.

less /init.d/httpd

Alrededor de la línea 40ish

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd

que me dijo exactamente dónde encontrarlo. Espero que esto ayude.

5
5
5
2016-08-30 12:23:45 +0000

Lista de todos los módulos habilitados

a2query -m
3
3
3
2014-05-21 22:35:14 +0000

En mi gentoo, puedo ejecutar apache2ctl modules y ver los módulos listados.

2
2
2
2016-04-11 17:36:03 +0000

Comprobando desde dentro del script php (para el mod_xsendfile):

if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
  && in_array('mod_xsendfile', apache_get_modules()))
  \doSomething();

La comprobación para PHP_SAPI es para excluir cuando php se está ejecutando como CGI, ya que apache_get_modules() no funciona en ese contexto. Además, si esto se ejecuta en php < 5.0.0, sólo el contexto apache2handler producirá el resultado esperado.

1
1
1
2018-07-19 16:20:26 +0000

He creado un pequeño guión de pitón para ayudarte con él. Por favor, echa un vistazo a https://github.com/zioalex/unused_apache_modules

Esto es lo que puedes esperar de él:

curl http://localhost/server-info > http_modules_test.txt
cat http_modules_test.txt| python find_unused_apache_mod.py

1
Module name mod_python.c
Configuration Phase Participation: 4
Request Phase Participation: 11
Current Configuration: 3

2
Module name mod_version.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 1

3
Module name mod_proxy_connect.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 0

To remove safely:
 ['mod_proxy_connect.c']
POPPED: mod_proxy_connect.c

To KEEP: ['mod_python.c', 'mod_version.c', 'mod_proxy_connect.c']