¿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?
¿Cuál es la forma más elegante de comprobar qué módulos de apache están habilitados?
Estás en Ubuntu, así que prueba:
apache2ctl -M
httpd -M
le dirá qué módulos están incorporados o compartidos.
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
.
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/
Creo que en realidad hay tres preguntas aquí. No estoy seguro de cuáles son.
Esto estaría (normalmente) en el directorio modules de su distribución de apache, normalmente /etc/httpd/modules/
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
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
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.
Lista de todos los módulos habilitados
a2query -m
En mi gentoo, puedo ejecutar apache2ctl modules
y ver los módulos listados.
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.
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']