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

Jak sprawdzić, które moduły apache są włączone/zainstalowane?

Jaki jest najbardziej elegancki sposób na sprawdzenie, które moduły apache są włączone?

Odpowiedzi (11)

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

You’re on Ubuntu so try:

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

httpd -M powie Ci, które moduły są wbudowane lub współdzielone.

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

Nic z powyższych odpowiedzi nie działa, jeśli nie można uruchomić poleceń na zdalnym serwerze. Jeśli masz tylko uprawnienia “użytkownika” lub nie masz ich wcale, spróbuj utworzyć skrypt test.php:

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

Chociaż będzie działał tylko wtedy, gdy PHP jest zainstalowany jako mod_php.

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

Może to pomoże niektórym osobom na wspólnych hostach bez dostępu do httpd, apachectl lub procesów:

Włączone moduły: ls /etc/apache2/mods-enabled/

Dostępne moduły: ls /etc/apache2/mods-available/

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

Możesz również użyć apachectl

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

Myślę, że są tu właściwie trzy pytania. Nie jestem pewien, o które pytasz.

  • Jakie moduły masz na dysku. Jakie są wszystkie moduły, których możesz użyć.

Byłoby to (zazwyczaj) w katalogu modules twojej dystrybucji apache, zazwyczaj /etc/httpd/modules/

  • Jakie moduły są konfigurowane dla konkretnej instancji.

Można to sprawdzić w /usr/sbin/httpd -M, przynajmniej dla bazowego apache'u systemowego. Jeśli chcesz sprawdzić konkretny plik konfiguracyjny /usr/sbin/httpd -M -f /path/to/config/file

  • What’s in a running apache

Aby uzyskać wiele informacji, możesz zobaczyć to za pomocą http://machinename/server-info/ Nie jest to domyślnie skonfigurowane, musisz skonfigurować to w. Jest to trochę przeciek informacji, więc skonfiguruj go tak, aby widzieli go tylko lokalni ludzie.

Jeśli jesteś na komputerze i masz dostęp, aby być uruchomionym użytkownikiem, możesz również zobaczyć, co jest załadowane poprzez sprawdzenie procesu. Możesz znaleźć proces nadrzędny z:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'

Następnie sprawdź

cat /proc/PID_FROM_ABOVE/maps
11
11
11
2014-03-11 18:41:39 +0000

Jeśli jesteś na Redhat/CentOS, httpd jest używane zamiast apache2ctl.

Oznacza to, że musisz użyć

httpd -M

Jednak httpd prawie nigdy nie jest na ścieżce, której oczekujesz.

Mogę potwierdzić na CentOS 5.8, że rzeczywista ścieżka to /usr/sbin/httpd.

/usr/sbin/httpd -M

Ale jeśli to nie jest ścieżka, możesz ją odkryć. Oto jak udało mi się to zrobić.

Po pierwsze, sprawdziłem demona używanego do kontrolowania go.

less /init.d/httpd

Wokół linii 40ish

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

Który powiedział mi dokładnie, gdzie go znaleźć. Mam nadzieję, że to pomoże.

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

Lista wszystkich włączonych modułów

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

Na moim gentoo, mogę wykonać apache2ctl modules i zobaczyć moduły wymienione na liście.

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

Sprawdzanie od wewnątrz skryptu php (dla mod_xsendfile):

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

Sprawdzanie PHP_SAPI ma na celu wykluczenie, gdy php działa jako CGI, ponieważ apache_get__moduły() nie działa w tym kontekście. Dodatkowo, jeśli jest to uruchamiane na php < 5.0.0, tylko kontekst apache2handler da oczekiwany wynik.

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

Stworzyłem mały skrypt Pythona, żeby ci z tym pomóc. Proszę spojrzeć na https://github.com/zioalex/unused\_apache_moduły

To jest to czego możesz się po nim spodziewać:

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