Qual é a maneira mais elegante de verificar quais módulos do Apache estão habilitados?
Você está no Ubuntu, então tente:
Apache2ctl -M
httpd -M
lhe dirá quais módulos estão embutidos ou compartilhados.
Nada acima das respostas funciona se você não puder executar comandos no servidor remoto. Se você tiver apenas privilégios de "usuário" ou nenhum tente criar o script test.php
:
<pre>
<?php
print_r(Apache_get_modules());
?>
</pre>
Embora funcione somente se PHP estiver instalado como mod_php
.
Talvez isso ajude para algumas pessoas em hosts compartilhados sem acesso a httpd
, apachectl
ou processos:
Módulos ativados: ls /etc/Apache2/mods-enabled/
Módulos disponíveis: ls /etc/Apache2/mods-available/
Você também pode usar apachectl
apachectl -t -D DUMP_MODULES
Eu acho que existem três perguntas aqui. Não tenho certeza do que você está perguntando.
Isso seria (normalmente) no diretório modules da sua distribuição Apache, geralmente/etc/httpd/modules /
Isto pode ser verificado com/usr/sbin/httpd -M, pelo menos para o sistema base Apache. Se você quiser verificar um arquivo de configuração específico/usr/sbin/httpd -M -f/caminho/para/config/file
Para obter muitas informações, você pode vê-lo com http: // machinename/server-info/ Isso não está configurado por padrão, você teria que configure it in. É um pouco de um vazamento de informações, configure-o de modo que apenas pessoas locais possam vê-lo.
Se você estiver na máquina e tiver acesso para ser o usuário em execução, também poderá ver o que está carregado, verificando o processo. Você pode encontrar o processo pai com:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Então confira
cat /proc/PID_FROM_ABOVE/maps
Se você estiver no Redhat/CentOS, httpd
é usado no lugar de Apache2ctl
.
Isso significa que você precisa usar o
httpd -M
No entanto, httpd
quase nunca está no caminho esperado.
Eu posso confirmar no CentOS 5.8 que o caminho real é /usr/sbin/httpd
.
/usr/sbin/httpd -M
Mas se esse não é o caminho, você pode descobrir. Aqui está como eu consegui fazer isso.
Primeiro, verifiquei o daemon sendo usado para controlá-lo.
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
O que me disse exatamente onde encontrá-lo. Espero que isto ajude.
Listar todos os módulos ativados
a2query -m
No meu gentoo, eu posso executar Apache2ctl modules
e ver os módulos listados.
Verificando a partir 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 é excluir quando o php estiver sendo executado como CGI, pois Apache_get_modules () não funciona nesse contexto. Além disso, se isso for executado no php <5.0.0, somente o contexto Apache2handler
produzirá o resultado esperado.
Eu criei um pequeno script python para ajudá-lo com isso. Por favor, dê uma olhada em https://github.com/zioalex/unused_Apache_modules
Isto é o que você pode esperar disso:
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']