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


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


336


origem




Respostas:


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

apache2ctl -M

414



apache2ctl -M funciona bem - udo
apache2 -M resulta neste erro apache2: bad user name ${APACHE_RUN_USER} - udo
Justo o suficiente - é devido ao fato de que você não está executando o comando como o usuário do 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 se apegar ao apache2ctl. - Linker3000
sudo apache2ctl -M | sort - mmdemirbas
Note que existem muitas opções úteis (flags) para apache2ctl mas eles não estão listados nem na manpage nem na apache2ctl --help. Isso é porque eles são entregues para httpd. Eles estão listados no documentação do httpd só. - Lutz Prechelt


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


105



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


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 test.php roteiro:

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

Embora funcione apenas se o PHP estiver instalado como mod_php.


35



Além disso, você não quer que isso seja visível publicamente. Pode querer restringir esse resultado para o cliente com um IP do administrador. E você vai querer remover esse script assim que terminar. Porque defesa em profundidade; Não torne isso mais fácil do que precisa ser. - Parthian Shot


Talvez isso ajude para algumas pessoas em hosts compartilhados 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



Aqui está a lista completa, apache2ctl filtrá-los - jgpATs2w


Você também pode usar apachectl

apachectl -t -D DUMP_MODULES

17





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 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 / arquivo

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

Para obter muitas informações, você pode ver http: // machinename / server-info / Isso não está configurado por padrão, você teria que configurar É um pouco de vazamento de informações, então configure-o para 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

10



Informações úteis, mas como o OP está usando o Ubuntu, os nomes e 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 é feita de maneira diferente, com subpastas mods-available e mods-enabled - Linker3000
Obrigado @ Linker3000 ... Você está certo, isso é para RedHat / Centos, vou deixar seu comentário sobre como converter para o Ubuntu - Rich Homolka


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

Isso significa que você precisa usar o

httpd -M

Contudo, httpd quase nunca está no caminho que você espera.

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.


10





Listar todos os módulos ativados

a2query -m

5





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


3





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, como apache_get_modules () não funciona nesse contexto. Além disso, se isso for executado no php <5.0.0, apenas o apache2handler contexto produzirá o resultado esperado.


2