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

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?

Antworten (11)

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

Sie sind auf Ubuntu, also versuchen Sie es:

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

httpd -M wird Ihnen sagen, welche Module eingebaut oder gemeinsam genutzt werden.

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

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.

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

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/

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

Sie können auch apachectl

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

Ich glaube, es gibt hier eigentlich drei Fragen. Ich bin mir nicht sicher, welche Sie stellen.

  • Welche Module haben Sie auf der Festplatte. Was sind all die Module, die Sie benutzen können?

Dies wäre (normalerweise) im Modul-Verzeichnis Ihrer Apache-Distribution, normalerweise /etc/httpd/modules/

  • Welche Module eine bestimmte Instanz ist, die zur Ausführung konfiguriert ist.

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

  • Was ist in einem laufenden Apache

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
11
11
11
2014-03-11 18:41:39 +0000

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.

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

Alle aktivierten Module auflisten

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

Auf meinem Gentoo kann ich apache2ctl modules ausführen und die aufgelisteten Module sehen.

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

Ü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.

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

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']