web-dev-qa-db-pt.com

Como atualizar quais módulos do Apache estão habilitados/instalados?

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

369
udo

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

Apache2ctl -M
448
Linker3000

httpd -M lhe dirá quais módulos estão embutidos ou compartilhados.

115
Ignacio Vazquez-Abrams

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.

36
yatsa

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/

26
CodeBrauer

Você também pode usar apachectl

apachectl -t -D DUMP_MODULES
18
Eddie B

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 (normalmente) no diretório modules da sua distribuição 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 sistema base Apache. 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ê-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
13
Rich Homolka

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.

11
geedew

Listar todos os módulos ativados

a2query -m
5
MetalGodwin

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

3
Grzegorz Golec

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.

2
noobish

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