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


Respuestas:


465

Estás en Ubuntu, así que prueba:

apache2ctl -M

11
apache2ctl -M funciona muy bien
— udo

3
apache2 -M produce este errorapache2: bad user name ${APACHE_RUN_USER}
— udo

44
Es justo: se debe al hecho de que no está ejecutando el comando como el usuario de tiempo de ejecución de apache (probablemente www-data) definido en la configuración de apache. Hay una manera de arreglar esto, pero también podría apegarse a apache2ctl.
— Linker3000

99
sudo apache2ctl -M | sort
— mmdemirbas

44
Tenga en cuenta que hay muchas opciones útiles (marcas) apache2ctlpero no se enumeran ni en la página de manual ni en apache2ctl --help. Eso es porque son entregados a httpd. Se enumeran solo en la documentación de httpd .
— Lutz Prechelt

117

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


hmm ... obtengo un "bash: httpd: comando no encontrado" al iniciar httpd -M como root
— udo

Entonces, especifique la ruta completa al httpdejecutable.
— Ignacio Vazquez-Abrams

99
@ IgnacioVazquez-Abrams: En Ubuntu (y otras distribuciones basadas en Debian), el nombre es apache2y no httpd, por lo que no se encuentra.
— Daniel Andersson

3
Apache es httpd en redhat. Pruebe una de las otras respuestas si esta no funciona para usted.
— Jacks_Depression

3
CentOS también usa httpd en lugar de apache2
— pedromanoel

37

Nada de las respuestas anteriores funciona si no puede ejecutar comandos en el servidor remoto. Si solo tiene privilegios de "usuario" o ninguno, intente crear un test.phpscript:

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

Aunque solo funcionará si PHP está instalado como mod_php.


44
Además, querrás que esto no sea visible públicamente. Es posible que desee restringir ese resultado a los clientes con la IP de un administrador. Y querrás eliminar ese script tan pronto como hayas terminado con él. Porque defensa en profundidad; no lo hagas más fácil de lo necesario.
— Parthian Shot

28

Tal vez esto ayude para algunas personas en los ordenadores compartidos que no tienen acceso a httpd, apachectlo procesos:

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

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


Aquí está la lista completa, apache2ctl filtrarlos
— jgpATs2w


13

Creo que en realidad hay tres preguntas aquí. No estoy seguro de lo que estás preguntando.

  • ¿Qué módulos tienes en el disco? ¿Cuáles son todos los módulos que puedes usar?

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

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

Esto se puede verificar con / usr / sbin / httpd -M, al menos para el sistema base apache. Si desea verificar un archivo de configuración específico / usr / sbin / httpd -M -f / path / to / config / file

  • ¿Qué hay en un apache?

Para obtener mucha información, puede verla con http: // machinename / server-info / Esto no está configurado de manera predeterminada, tendría que configurarlo . Es un poco una fuga de información, así que configúrelo así que solo la gente local puede verlo.

Si está en la máquina y tiene acceso para ser el usuario en ejecución, también puede ver qué se carga al verificar el proceso. Puede encontrar el proceso principal con:

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

Entonces echa un vistazo

cat /proc/PID_FROM_ABOVE/maps

1
Información útil, pero debido a que el OP está usando Ubuntu, los nombres y las ubicaciones de los archivos son diferentes, por ejemplo: / usr / sbin / apache2 en lugar de httpd, y ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' La ubicación de los módulos se maneja de manera diferente, con subcarpetas mods-available y mods-enabled
— Linker3000

Gracias @ Linker3000 ... Tienes razón, esto es para RedHat / Centos, dejaré tu comentario sobre cómo convertir a Ubuntu
— Rich Homolka

11

Si está en Redhat / CentOS, httpdse utiliza en lugar de apache2ctl.

Esto significa que necesita usar el

httpd -M

Sin embargo, httpdcasi nunca está en el camino que espera.

Puedo confirmar en CentOS 5.8 que la ruta real es /usr/sbin/httpd.

/usr/sbin/httpd -M

Pero si ese no es el camino, puedes descubrirlo. Así es como pude hacerlo.

Primero, verifiqué el demonio que se usaba 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

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




2

Comprobación desde el script php (para mod_xsendfile):

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

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


1

Creé un pequeño script de Python para ayudarte con él. Por favor, eche un vistazo a https://github.com/zioalex/unused_apache_modules

Esto es lo que puede 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']
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.