¿Cuál es la forma más elegante de verificar qué módulos de apache están habilitados?
fuente
¿Cuál es la forma más elegante de verificar 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 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']
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
pero no se enumeran ni en la página de manual ni enapache2ctl --help
. Eso es porque son entregados ahttpd
. Se enumeran solo en la documentación de httpd .