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


Respostas:


464

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

apache2ctl -M

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.


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.


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/


Aqui está a lista completa, apache2ctl filtrá-los
— jgpATs2w 6/06


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

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.



3

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


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.


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']
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.