Come verificare quali moduli apache sono abilitati / installati?


Risposte:


465

Sei su Ubuntu quindi prova:

apache2ctl -M

11
apache2ctl -M funziona benissimo
udo

3
apache2 -M genera questo erroreapache2: bad user name ${APACHE_RUN_USER}
udo

4
Abbastanza giusto - è dovuto al fatto che non si sta eseguendo il comando come l'utente di runtime di apache (probabilmente www-data) definito nella configurazione di apache. C'è un modo per risolvere questo problema, ma potresti anche attenerti ad apache2ctl.
Linker3000,

9
sudo apache2ctl -M | sort
mmdemirbas,

4
Nota che ci sono molte opzioni utili (flag) apache2ctlma non sono elencate né nella manpage né in apache2ctl --help. Questo perché vengono consegnati a httpd. Sono elencati solo nella documentazione httpd .
Lutz Prechelt,

117

httpd -M ti dirà quali moduli sono integrati o condivisi.


hmm ... sto ricevendo un "comando bash: httpd: non trovato" quando si avvia httpd -M come root
udo

Quindi, specifica il percorso completo httpddell'eseguibile.
Ignacio Vazquez-Abrams,

9
@ IgnacioVazquez-Abrams: Su Ubuntu (e altre distribuzioni basate su Debian), il nome è apache2e non httpd, motivo per cui non viene trovato.
Daniel Andersson,

3
Apache è httpd su Redhat. Prova una delle altre risposte se questa non funziona per te.
Jacks_Depression

3
CentOS utilizza anche httpd anziché apache2
pedromanoel,

37

Nulla dalle risposte precedenti funziona se non è possibile eseguire comandi sul server remoto. Se hai solo privilegi di "utente" o nessuno prova a creare uno test.phpscript:

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

Sebbene funzionerà solo se PHP è installato come mod_php.


4
Inoltre, ti consigliamo di non renderlo visibile pubblicamente. Potrebbe voler limitare quel risultato a quello del client con l'IP di un amministratore. E ti consigliamo di rimuovere quello script non appena hai finito con esso. Perché la difesa in profondità; non renderlo più semplice di quanto debba essere.
Parthian Shot,

28

Forse questo aiuterà per alcune persone sugli host condivisi che non hanno accesso a httpd, apachectlo dei processi:

Moduli abilitati: ls /etc/apache2/mods-enabled/

Moduli disponibili: ls /etc/apache2/mods-available/


Ecco l'elenco completo, apache2ctl
filtrali


13

Penso che ci siano in realtà tre domande qui. Non sono sicuro di ciò che stai chiedendo.

  • Quali moduli hai sul disco. Quali sono tutti i moduli che puoi usare.

Questo sarebbe (di solito) nella directory dei moduli della tua distribuzione apache, di solito / etc / httpd / modules /

  • Quali moduli è un'istanza specifica configurata per l'esecuzione.

Questo può essere verificato con / usr / sbin / httpd -M, almeno per l'apache del sistema di base. Se si desidera controllare un file di configurazione specifico / usr / sbin / httpd -M -f / path / to / config / file

  • Cosa c'è in un apache in esecuzione

Per ottenere molte informazioni, puoi vederle con http: // nome computer / server-info / Questo non è configurato per impostazione predefinita, dovresti configurarlo in. È un po 'una perdita di informazioni, quindi configuralo quindi solo le persone locali possono vederlo.

Se sei sulla macchina e hai accesso per essere l'utente in esecuzione, puoi anche vedere cosa viene caricato controllando il processo. Puoi trovare il processo genitore con:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'

Quindi controlla

cat /proc/PID_FROM_ABOVE/maps

1
Informazioni utili ma poiché l'OP utilizza Ubuntu, i nomi e le posizioni dei file sono diversi, ad esempio: / usr / sbin / apache2 anziché httpd e ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' La posizione dei moduli è gestita in modo diverso, con sottocartelle disponibili e abilitate alle mod
Linker3000,

Grazie @ Linker3000 ... Hai ragione, questo è per RedHat / Centos, lascerò che il tuo commento rimanga su come convertire in Ubuntu
Rich Homolka,

11

Se sei su Redhat / CentOS, httpdviene utilizzato al posto di apache2ctl.

Questo significa che devi usare il

httpd -M

Tuttavia, non httpdè quasi mai nel percorso che ti aspetti.

Posso confermare su CentOS 5.8 il percorso effettivo è /usr/sbin/httpd.

/usr/sbin/httpd -M

Ma se questo non è il percorso, puoi scoprirlo. Ecco come sono stato in grado di farlo.

Innanzitutto, ho controllato il demone usato per controllarlo.

less /init.d/httpd

Intorno alla linea 40ish

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd

Il che mi ha detto esattamente dove trovarlo. Spero che sia di aiuto.



3

Sul mio gentoo, posso eseguire apache2ctl modulese vedere i moduli elencati.


2

Verifica dall'interno dello script php (per mod_xsendfile):

if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
  && in_array('mod_xsendfile', apache_get_modules()))
  \\doSomething();

Il controllo per PHP_SAPI è di escludere quando php è in esecuzione come CGI, poiché apache_get_modules () non funziona in quel contesto. Inoltre, se questo viene eseguito su php <5.0.0, solo il apache2handlercontesto produrrà il risultato previsto.


1

Ho creato un piccolo script Python per aiutarti. Dai un'occhiata a https://github.com/zioalex/unused_apache_modules

Questo è ciò che puoi aspettarti da esso:

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']
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.