2011-05-17 19:55:14 +0000 2011-05-17 19:55:14 +0000
393
393

Como verificar que módulos apache estão activados/instalados?

Qual é a forma mais elegante de verificar que módulos apache estão activados?

Respostas (11)

483
483
483
2011-05-17 20:01:43 +0000

Você está em Ubuntu então tente:

apache2ctl -M
120
120
120
2011-05-17 19:56:42 +0000

httpd -M dir-lhe-á quais os módulos que estão integrados ou partilhados.

37
37
37
2012-04-11 09:10:50 +0000

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.

28
28
28
2015-05-04 11:33:10 +0000

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/

18
18
18
2013-02-06 07:04:37 +0000

Também pode utilizar apachectl

apachectl -t -D DUMP_MODULES
14
14
14
2011-05-17 20:57:05 +0000

Penso que há aqui, de facto, três questões. Não tenho a certeza do que está a perguntar.

  • Que módulos tem no disco. Quais são todos os módulos que pode utilizar.

Isto estaria (normalmente) no directório de módulos da sua distribuição apache, normalmente /etc/httpd/modules/

  • Que módulos é qualquer instância específica configurada para correr.

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

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

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
11
11
11
2014-03-11 18:41:39 +0000

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.

5
5
5
2016-08-30 12:23:45 +0000

Listar todos os módulos habilitados

a2query -m
3
3
3
2014-05-21 22:35:14 +0000

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

2
2
2
2016-04-11 17:36:03 +0000

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.

1
1
1
2018-07-19 16:20:26 +0000

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']