Respuestas:
Estás en Ubuntu, así que prueba:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
pero 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 .
httpd -M
le dirá qué módulos están integrados o compartidos.
httpd
ejecutable.
apache2
y no httpd
, por lo que no se encuentra.
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.php
script:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Aunque solo funcionará si PHP está instalado como mod_php
.
Tal vez esto ayude para algunas personas en los ordenadores compartidos que no tienen 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 lo que estás preguntando.
Esto estaría (generalmente) en el directorio de módulos de su distribución de apache, generalmente / etc / httpd / modules /
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
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
Si está en Redhat / CentOS, httpd
se utiliza en lugar de apache2ctl
.
Esto significa que necesita usar el
httpd -M
Sin embargo, httpd
casi 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.
Listar todos los módulos habilitados
a2query -m
En mi gentoo, puedo ejecutar apache2ctl modules
y ver los módulos enumerados.
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 apache2handler
contexto producirá el resultado esperado.
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']