Como verificar que módulos apache estão activados/instalados?
Qual é a forma mais elegante de verificar que módulos apache estão activados?
Qual é a forma mais elegante de verificar que módulos apache estão activados?
Você está em Ubuntu então tente:
apache2ctl -M
httpd -M
dir-lhe-á quais os módulos que estão integrados ou partilhados.
Nada das respostas acima funciona se não for possível executar comandos no servidor remoto. Se você tem apenas privilégios de “usuário” ou nenhum, tente criar test.php
script:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Embora funcione apenas se o PHP estiver instalado como mod_php
.
Talvez isto ajude algumas pessoas em anfitriões partilhados sem acesso a httpd
, apachectl
ou processos:
Módulos habilitados: ls /etc/apache2/mods-enabled/
Módulos disponíveis: ls /etc/apache2/mods-available/
Penso que há aqui, de facto, três questões. Não tenho a certeza do que está a perguntar.
Isto estaria (normalmente) no directório de módulos da sua distribuição apache, normalmente /etc/httpd/modules/
Isto pode ser verificado com /usr/sbin/httpd -M, pelo menos para o apache do sistema base. Se quiser verificar num ficheiro de configuração específico /usr/sbin/httpd -M -f /path/to/config/file
Para obter muita informação, pode vê-la com http://machinename/server-info/ Isto não está configurado por omissão, teria de configure . É um pouco de fuga de informação, por isso configure-o para que apenas as pessoas locais o possam ver.
Se estiver na máquina e tiver acesso para ser o utilizador em execução, também pode ver o que está carregado, verificando o processo. Pode encontrar o processo pai com:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Depois verifique
cat /proc/PID_FROM_ABOVE/maps
Se estiver no Redhat/CentOS, httpd
é usado no lugar de apache2ctl
.
Isto significa que precisa de usar o
httpd -M
Contudo, o httpd
quase nunca está no caminho que espera.
Posso confirmar no CentOS 5.8 que o caminho real é /usr/sbin/httpd
.
/usr/sbin/httpd -M
Mas se não é esse o caminho, pode descobri-lo. Aqui está como o consegui fazer.
Primeiro, verifiquei o daemon utilizado para o controlar.
less /init.d/httpd
Em torno da linha 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 disse exactamente onde o encontrar. Espero que isto ajude.
Listar todos os módulos habilitados
a2query -m
No meu gentoo, eu posso executar apache2ctl modules
e ver os módulos listados.
Verificação de dentro do script php (para mod_xsendfile):
if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
&& in_array('mod_xsendfile', apache_get_modules()))
\doSomething();
A verificação para PHP_SAPI é para excluir quando o php está rodando como CGI, pois apache_get_modules() não funciona nesse contexto. Adicionalmente, se isto for executado em php \ < 5.0.0, apenas o contexto apache2handler
produzirá o resultado esperado.
Eu criei um pequeno guião de pitão para o ajudar com ele. Por favor veja https://github.com/zioalex/unused_apache_modules
Isto é o que você pode esperar dele:
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']