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

380

Qual é a maneira mais elegante de verificar quais módulos apache estão ativados?

udo
fonte

Respostas:

464

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

apache2ctl -M
Linker3000
fonte
11
apache2ctl -M funciona muito bem
udo
3
apache2 -M resulta neste erroapache2: bad user name ${APACHE_RUN_USER}
udo 17/05
4
Bastante justo - é devido ao fato de você não estar executando o comando como o usuário de tempo de execução do apache (provavelmente www-data) definido na configuração do apache. Existe uma maneira de corrigir isso, mas você também pode usar o apache2ctl.
Linker3000
9
sudo apache2ctl -M | sort
Mmdemirbas 06/07/2012
4
Observe que existem muitas opções úteis (sinalizadores), apache2ctlmas elas não estão listadas na página de manual nem em apache2ctl --help. Isso é porque eles são entregues a httpd. Eles estão listados apenas na documentação httpd .
Lutz Prechelt
117

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

Ignacio Vazquez-Abrams
fonte
hmm ... Estou recebendo um "bash: httpd: comando não encontrado" ao iniciar httpd -M como root
udo
Então, especifique o caminho completo para o httpdexecutável.
Ignacio Vazquez-Abrams
9
@ IgnacioVazquez-Abrams: No Ubuntu (e em outras distribuições baseadas no Debian), o nome é apache2e não httpd, e é por isso que não foi encontrado.
Daniel Andersson
3
O Apache é httpd no redhat. Tente uma das outras respostas se esta não funcionar para você.
Jacks_Depression
3
CentOS também usa httpd em vez de apache2
pedromanoel
37

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 um test.phpscript:

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

Embora funcione apenas se o PHP estiver instalado como mod_php.

yatsa
fonte
4
Além disso, convém que isso não seja visível publicamente. Pode querer restringir esse resultado aos do cliente com o IP de um administrador. E você deseja remover esse script assim que terminar. Porque defesa em profundidade; não facilite o que precisa ser.
Parthian Shot
28

Talvez isto ajude para algumas pessoas em hosts compartilhados sem acesso a httpd, apachectlou processos:

Módulos ativados: ls /etc/apache2/mods-enabled/

Módulos disponíveis: ls /etc/apache2/mods-available/

CodeBrauer
fonte
Aqui está a lista completa, apache2ctl filtrá-los
jgpATs2w 6/06
18

Você também pode usar apachectl

apachectl -t -D DUMP_MODULES
Eddie B
fonte
13

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

  • Quais módulos você possui em 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 execução.

Isso pode ser verificado com / usr / sbin / httpd -M, pelo menos para o apache do sistema básico. Se você deseja verificar um arquivo de configuração específico / usr / sbin / httpd -M -f / path / to / config / file

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

Para obter muitas informações, você pode vê-las com http: // nome da máquina / informações do servidor / Isso não está configurado por padrão, você precisa configurá- las. É um vazamento de informações, então configure-o para que apenas as 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
Rich Homolka
fonte
1
Informações úteis, mas como o OP está usando o Ubuntu, os nomes e os locais dos arquivos são diferentes - por exemplo: / usr / sbin / apache2 em vez de httpd e ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' A localização dos módulos é tratado de forma diferente, com subpastas mods-available e mods-enabled
Linker3000
Obrigado @ Linker3000 ... Você tem razão, isto é para RedHat / CentOS, eu vou deixar o seu comentário ficar sobre como converter para o Ubuntu
rico Homolka
11

Se você estiver no Redhat / CentOS, httpdé usado no lugar de apache2ctl.

Isso significa que você precisa usar o

httpd -M

No entanto, httpdquase nunca está no caminho que você espera.

Posso confirmar no CentOS 5.8 o caminho real /usr/sbin/httpd.

/usr/sbin/httpd -M

Mas se esse não for o caminho, você poderá descobri-lo. Aqui está como eu pude fazê-lo.

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.

geedew
fonte
5

Listar todos os módulos ativados

a2query -m
MetalGodwin
fonte
3

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

Grzegorz Golec
fonte
2

Verificando 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 do PHP_SAPI é para 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, apenas o apache2handlercontexto produzirá o resultado esperado.

noobish
fonte
1

Eu criei um pequeno script python para ajudá-lo. Consulte https://github.com/zioalex/unused_apache_modules

É isso 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']
Alex
fonte