¿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.