Come controllare quali moduli apache sono abilitati/installati?
Qual è il modo più elegante per controllare quali moduli apache sono abilitati?
Qual è il modo più elegante per controllare quali moduli apache sono abilitati?
Sei su Ubuntu quindi prova:
apache2ctl -M
httpd -M
vi dirà quali moduli sono integrati o condivisi.
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
.
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/
Penso che in realtà ci siano tre domande. Non sono sicuro di quale sia la domanda.
Questo sarebbe (di solito) nella directory dei moduli della vostra distribuzione apache, di solito /etc/httpd/modules/
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
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
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.
Elencare tutti i moduli abilitati
a2query -m
Sul mio gentoo posso eseguire apache2ctl modules
e vedere i moduli elencati.
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.
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']