Wie kann man überprüfen, welche Apache-Module aktiviert/installiert sind?
Welches ist der eleganteste Weg, um zu überprüfen, welche Apache-Module aktiviert sind?
Welches ist der eleganteste Weg, um zu überprüfen, welche Apache-Module aktiviert sind?
Sie sind auf Ubuntu, also versuchen Sie es:
apache2ctl -M
httpd -M
wird Ihnen sagen, welche Module eingebaut oder gemeinsam genutzt werden.
Nichts von den obigen Antworten funktioniert, wenn Sie keine Befehle auf einem entfernten Server ausführen können. Wenn Sie nur “Benutzer”-Privilegien oder gar keine haben, versuchen Sie das Skript test.php
zu erstellen:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Obwohl es nur funktioniert, wenn PHP als mod_php
installiert ist.
Vielleicht hilft dies einigen Personen auf gemeinsam genutzten Hosts ohne Zugriff auf httpd
, apachectl
oder Prozesse:
Aktivierte Module: ls /etc/apache2/mods-enabled/
Verfügbare Module: ls /etc/apache2/mods-available/
Ich glaube, es gibt hier eigentlich drei Fragen. Ich bin mir nicht sicher, welche Sie stellen.
Dies wäre (normalerweise) im Modul-Verzeichnis Ihrer Apache-Distribution, normalerweise /etc/httpd/modules/
Dies kann mit /usr/sbin/httpd -M überprüft werden, zumindest für das Basissystem Apache. Wenn Sie eine bestimmte Konfigurationsdatei überprüfen wollen, /usr/sbin/httpd -M -f /path/to/config/file
Um viele Informationen zu erhalten, können Sie sie mit http://machinename/server-info/ abrufen. Standardmäßig ist sie nicht konfiguriert, Sie müssten sie mit configure anzeigen. Es ist ein kleines Informationsleck, also konfigurieren Sie es so, dass nur lokale Leute es sehen können.
Wenn Sie auf dem Rechner sind und Zugriff haben, um der laufende Benutzer zu sein, können Sie auch sehen, was geladen ist, indem Sie den Prozess überprüfen. Sie finden den übergeordneten Prozess mit:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Dann überprüfen Sie
cat /proc/PID_FROM_ABOVE/maps
Wenn Sie auf Redhat/CentOS sind, wird httpd
anstelle von apache2ctl
verwendet.
Das bedeutet, dass Sie die
httpd -M
verwenden müssen. httpd
liegt jedoch fast nie in dem Pfad, den Sie erwarten.
Ich kann auf CentOS 5.8 bestätigen, dass der tatsächliche Pfad /usr/sbin/httpd
ist. Hier ist, wie ich das tun konnte.
Zuerst habe ich den Dämon überprüft, mit dem er gesteuert wird.
/usr/sbin/httpd -M
Um die Zeile 40 herum
less /init.d/httpd
, die mir genau sagte, wo ich ihn finden kann. Ich hoffe, das hilft.
Alle aktivierten Module auflisten
a2query -m
Auf meinem Gentoo kann ich apache2ctl modules
ausführen und die aufgelisteten Module sehen.
Überprüfung aus dem php-Skript heraus (für mod_xsendfile):
if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
&& in_array('mod_xsendfile', apache_get_modules()))
\doSomething();
Die Überprüfung auf PHP_SAPI soll ausschließen, wenn php als CGI läuft, da apache_get_modules() in diesem Kontext nicht funktioniert. Wenn dies auf php < 5.0.0 ausgeführt wird, wird nur der Kontext apache2handler
das erwartete Ergebnis liefern.
Ich habe ein kleines Python-Skript erstellt, um Ihnen dabei zu helfen. Bitte schauen Sie sich https://github.com/zioalex/unused_apache_modules
Was Sie davon erwarten können:
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']