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?
Jaki jest najbardziej elegancki sposób na sprawdzenie, które moduły apache są włączone?
You’re on Ubuntu so try:
apache2ctl -M
httpd -M
powie Ci, które moduły są wbudowane lub współdzielone.
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
.
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/
Myślę, że są tu właściwie trzy pytania. Nie jestem pewien, o które pytasz.
Byłoby to (zazwyczaj) w katalogu modules twojej dystrybucji apache, zazwyczaj /etc/httpd/modules/
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
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
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.
Lista wszystkich włączonych modułów
a2query -m
Na moim gentoo, mogę wykonać apache2ctl modules
i zobaczyć moduły wymienione na liście.
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.
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']