Como verificar quais módulos do apache estão habilitados / instalados?

347

Qual é a maneira mais elegante de verificar quais módulos do Apache estão habilitados?

    
por udo 17.05.2011 / 21:55

11 respostas

423

Você está no Ubuntu, então tente:

apache2ctl -M
    
por 17.05.2011 / 22:01
108

httpd -M dirá quais módulos são integrados ou compartilhados.

    
por 17.05.2011 / 21:56
35

Nada das respostas acima funciona se você não puder executar comandos no servidor remoto. Se você tiver apenas privilégios de "usuário" ou nenhum tente criar test.php script:

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

Embora funcione somente se o PHP estiver instalado como mod_php .

    
por 11.04.2012 / 11:10
20

Talvez isso ajude 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/

    
por 04.05.2015 / 13:33
17

Você também pode usar o apachectl

apachectl -t -D DUMP_MODULES
    
por 06.02.2013 / 08:04
11

Eu acho que existem três perguntas aqui. Não tenho certeza do que você está perguntando.

  • Quais módulos você tem no disco. Quais são todos os módulos que você pode usar.

Isso seria (geralmente) no diretório modules da sua distribuição do apache, geralmente / etc / httpd / modules /

  • Quais módulos é qualquer instância específica configurada para ser executada.

Isto pode ser verificado com / usr / sbin / httpd -M, pelo menos para o apache do sistema base. Se você quiser verificar um arquivo de configuração específico / usr / sbin / httpd -M -f / caminho / para / config / file

  • O que está em um apache em execução

Para obter muitas informações, você pode vê-las com o link Isso não está configurado por padrão, você teria que configurar ele dentro. É 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
    
por 17.05.2011 / 22:57
10

Se você está 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 pude fazê-lo.

Primeiro, verifiquei o daemon sendo usado para controlá-lo.

less /init.d/httpd

Na 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 isso ajude.

    
por 11.03.2014 / 19:41
5

Listar todos os módulos ativados

a2query -m
    
por 30.08.2016 / 14:23
3

No meu gentoo, posso executar apache2ctl modules e ver os módulos listados.

    
por 22.05.2014 / 00:35
2

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 é para excluir quando o PHP está sendo executado como CGI, como 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.

    
por 11.04.2016 / 19:36
1

Eu criei um pequeno script python para ajudá-lo. Por favor, dê uma olhada no link

Isso é o que você pode esperar:

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']
    
por 19.07.2018 / 18:20