Risposte:
Sei su Ubuntu quindi prova:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
ma non sono elencate né nella manpage né in apache2ctl --help
. Questo perché vengono consegnati a httpd
. Sono elencati solo nella documentazione httpd .
httpd -M
ti dirà quali moduli sono integrati o condivisi.
httpd
dell'eseguibile.
apache2
e non httpd
, motivo per cui non viene trovato.
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.php
script:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Sebbene funzionerà solo se PHP è installato come mod_php
.
Forse questo aiuterà per alcune persone sugli host condivisi che non hanno accesso a httpd
, apachectl
o dei processi:
Moduli abilitati: ls /etc/apache2/mods-enabled/
Moduli disponibili: ls /etc/apache2/mods-available/
Penso che ci siano in realtà tre domande qui. Non sono sicuro di ciò che stai chiedendo.
Questo sarebbe (di solito) nella directory dei moduli della tua distribuzione apache, di solito / etc / httpd / modules /
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
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
Se sei su Redhat / CentOS, httpd
viene 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.
Elenca tutti i moduli abilitati
a2query -m
Sul mio gentoo, posso eseguire apache2ctl modules
e vedere i moduli elencati.
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 apache2handler
contesto produrrà il risultato previsto.
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']