2011-05-17 19:55:14 +0000 2011-05-17 19:55:14 +0000
393
393

Come controllare quali moduli apache sono abilitati/installati?

Qual è il modo più elegante per controllare quali moduli apache sono abilitati?

Risposte (11)

483
483
483
2011-05-17 20:01:43 +0000

Sei su Ubuntu quindi prova:

apache2ctl -M
120
120
120
2011-05-17 19:56:42 +0000

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

37
37
37
2012-04-11 09:10:50 +0000

Niente delle risposte dall'alto funziona se non è possibile eseguire comandi sul server remoto. Se avete solo privilegi di “utente” o nessuno, provate a creare lo script test.php:

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

Anche se funzionerà solo se PHP è installato come mod_php.

28
28
28
2015-05-04 11:33:10 +0000

Forse questo aiuterà alcune persone su host condivisi senza accesso a httpd, apachectl o processi:

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

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

18
18
18
2013-02-06 07:04:37 +0000

È anche possibile utilizzare apachectl

apachectl -t -D DUMP_MODULES
14
14
14
2011-05-17 20:57:05 +0000

Penso che in realtà ci siano tre domande. Non sono sicuro di quale sia la domanda.

  • Quali moduli avete su disco. Quali sono tutti i moduli che potete usare.

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

  • Quali moduli è una qualsiasi istanza specifica configurata per funzionare.

Questo può essere controllato con /usr/sbin/httpd -M, almeno per il sistema base apache. Se si vuole 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, si può vedere con http://machinename/server-info/ Questo non è configurato di default, si dovrebbe configurare in. È un po’ una perdita di informazioni, quindi configuratelo in modo che solo le persone locali possano vederlo.

Se siete sulla macchina e avete accesso ad essere l'utente in esecuzione, potete anche vedere cosa viene caricato controllando il processo. Potete trovare il processo padre con:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
``` ```
cat /proc/PID_FROM_ABOVE/maps

Poi controllare

&001

11
11
11
2014-03-11 18:41:39 +0000

Se siete su Redhat/CentOS, httpd è usato al posto di apache2ctl.

Ciò significa che dovete usare il

httpd -M

Tuttavia, httpd non è quasi mai nel percorso che vi aspettate.

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

/usr/sbin/httpd -M

Ma se questo non è il percorso, potete scoprirlo. Ecco come sono riuscito a farlo.

Per prima cosa, ho controllato il demone utilizzato per controllarlo.

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

Intorno alla linea 40ish

&001

che mi ha detto esattamente dove trovarlo. Spero che questo sia d'aiuto.

5
5
5
2016-08-30 12:23:45 +0000

Elencare tutti i moduli abilitati

a2query -m
3
3
3
2014-05-21 22:35:14 +0000

Sul mio gentoo posso eseguire apache2ctl modules e vedere i moduli elencati.

2
2
2
2016-04-11 17:36:03 +0000

Controllo 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 è quello di escludere quando php è in esecuzione come CGI, in quanto apache_get__modules() non funziona in quel contesto. Inoltre, se questo viene eseguito su php < 5.0.0, solo il contesto apache2handler produrrà il risultato previsto.

1
1
1
2018-07-19 16:20:26 +0000

Ho creato una piccola sceneggiatura in pitone per aiutarti. Date un'occhiata a https://github.com/zioalex/unused_apache_moduli

Questo è ciò che ci si può aspettare 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']