Wie überprüfe ich, welche Apache-Module aktiviert / installiert sind?

380

Welches ist die eleganteste Methode, um zu überprüfen, welche Apache-Module aktiviert sind?

Du tust
quelle

Antworten:

464

Du bist auf Ubuntu, also versuche:

apache2ctl -M
Linker3000
quelle
11
apache2ctl-M funktioniert
super
3
apache2 -M führt zu diesem Fehlerapache2: bad user name ${APACHE_RUN_USER}
udo
4
Fair genug - es liegt an der Tatsache, dass Sie den Befehl nicht als Apache-Laufzeitbenutzer (wahrscheinlich www-data) ausführen, der in der Apache-Konfiguration definiert ist. Es gibt eine Möglichkeit, dies zu beheben, aber Sie können sich genauso gut an apache2ctl halten.
Linker3000
9
sudo apache2ctl -M | sort
mmdemirbas
4
Beachten Sie, dass es viele nützliche Optionen (Flags) gibt, die apache2ctljedoch weder in der Manpage noch in aufgeführt sind apache2ctl --help. Das ist , weil sie durch zu übergeben sind httpd. Sie sind nur in der httpd-Dokumentation aufgeführt .
Lutz Prechelt
117

httpd -M wird Ihnen sagen, welche Module eingebaut oder geteilt sind.

Ignacio Vazquez-Abrams
quelle
hmm ... Ich erhalte eine „bash: httpd: Befehl nicht gefunden“ beim Starten von httpd -M als root
udo
Geben Sie dann den vollständigen Pfad zur httpdausführbaren Datei an.
Ignacio Vazquez-Abrams
9
@ IgnacioVazquez-Abrams: Auf Ubuntu (und anderen Debian-basierten Distributionen) ist der Name apache2und nicht httpd, weshalb er nicht gefunden wird.
Daniel Andersson
3
Apache ist httpd auf redhat. Versuchen Sie eine der anderen Antworten, wenn diese für Sie nicht funktioniert.
Jacks_Depression
3
CentOS verwendet auch httpd anstelle von apache2
pedromanoel
37

Die obigen Antworten funktionieren nicht, wenn Sie keine Befehle auf einem Remote-Server ausführen können. Wenn Sie nur "Benutzer" -Rechte oder gar keine haben, versuchen Sie, ein test.phpSkript zu erstellen :

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

Dies funktioniert jedoch nur, wenn PHP als installiert ist mod_php.

Yatsa
quelle
4
Außerdem soll dies nicht öffentlich sichtbar sein. Möglicherweise möchten Sie dieses Ergebnis auf Clients mit einer Administrator-IP einschränken. Und Sie möchten das Skript entfernen, sobald Sie damit fertig sind. Weil die Verteidigung in der Tiefe; Mach es nicht einfacher, als es sein muss.
Parthian Shot
28

Vielleicht für einige Leute bei gemeinsamen Rechnern ohne Zugriff auf diese helfen httpd, apachectloder Prozesse:

Aktivierte Module: ls /etc/apache2/mods-enabled/

Verfügbare Module: ls /etc/apache2/mods-available/

CodeBrauer
quelle
Hier ist die komplette Liste, apache2ctl filtert sie
jgpATs2w
13

Ich denke, hier gibt es tatsächlich drei Fragen. Ich bin nicht sicher, wonach du fragst.

  • Welche Module haben Sie auf der Festplatte. Was sind alle Module, die Sie verwenden können.

Dies ist (normalerweise) im modules-Verzeichnis Ihrer Apache-Distribution, normalerweise / etc / httpd / modules /.

  • Für welche Module ist eine bestimmte Instanz konfiguriert, um ausgeführt zu werden.

Dies kann mit / usr / sbin / httpd -M überprüft werden, zumindest für das Basissystem Apache. Wenn Sie eine bestimmte Konfigurationsdatei / usr / sbin / httpd -f / path / to / config / file überprüfen möchten

  • Was steckt in einem laufenden Apache?

Um viele Informationen zu erhalten, können Sie sie unter http: // machinename / server-info / anzeigen. Dies ist nicht standardmäßig konfiguriert, Sie müssen es in konfigurieren . Es ist ein kleines Informationsleck, also konfigurieren Sie es so können nur Einheimische es sehen.

Wenn Sie sich auf dem Computer befinden und als aktiver Benutzer angemeldet sind, 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 check out

cat /proc/PID_FROM_ABOVE/maps
Reiche Homolka
quelle
1
Nützliche Informationen, aber da das OP Ubuntu verwendet, sind die Dateinamen und Speicherorte unterschiedlich - zum Beispiel: / usr / sbin / apache2 anstelle von httpd und ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' Die Position der Module wird unterschiedlich gehandhabt, mit mods-verfügbaren und mods-aktivierten Unterordnern
Linker3000
Thanks @ Linker3000 ... Du hast recht, dies ist für RedHat / Centos. Ich werde deinen Kommentar dazu abgeben, wie man zu Ubuntu
Rich Homolka
11

Wenn Sie auf Redhat / CentOS sind, httpdwird anstelle von verwendet apache2ctl.

Dies bedeutet, dass Sie die verwenden müssen

httpd -M

Befindet sich httpdjedoch fast nie auf dem Weg, den Sie erwarten.

Ich kann auf CentOS 5.8 bestätigen, dass der tatsächliche Pfad ist /usr/sbin/httpd.

/usr/sbin/httpd -M

Aber wenn das nicht der Weg ist, können Sie es entdecken. Hier ist, wie ich das konnte.

Zuerst habe ich den Daemon überprüft, der zur Steuerung verwendet wird.

less /init.d/httpd

Um die Linie 40ish

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

Was mir genau gesagt hat, wo ich es finden kann. Hoffe das hilft.

geedew
quelle
5

Listet alle aktivierten Module auf

a2query -m
MetalGodwin
quelle
3

Auf meinem gentoo kann ich apache2ctl modulesdie aufgelisteten Module ausführen und sehen.

Grzegorz Golec
quelle
2

Überprüfung aus dem PHP-Skript (für mod_xsendfile):

if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
  && in_array('mod_xsendfile', apache_get_modules()))
  \\doSomething();

Die Prüfung für PHP_SAPI soll ausschließen, wenn PHP als CGI ausgeführt wird, da apache_get_modules () in diesem Kontext nicht funktioniert. Wenn dies unter PHP <5.0.0 ausgeführt wird, wird nur der apache2handlerKontext das erwartete Ergebnis liefern.

noobish
quelle
1

Ich habe ein kleines Python-Skript erstellt, um Ihnen dabei zu helfen. Bitte werfen Sie einen Blick auf https://github.com/zioalex/unused_apache_modules

Das können Sie davon erwarten:

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