Odpowiedzi:
Jesteś na Ubuntu, więc spróbuj:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
ale nie są one wymienione ani na stronie podręcznika, ani w apache2ctl --help
. To dlatego, że są przekazywane do httpd
. Są one wymienione tylko w dokumentacji httpd .
httpd -M
powie ci, które moduły są wbudowane lub współdzielone.
httpd
pliku wykonywalnego.
apache2
i nie httpd
, dlatego go nie znaleziono.
Nic z powyższych odpowiedzi nie działa, jeśli nie można uruchamiać poleceń na zdalnym serwerze. Jeśli masz tylko uprawnienia „użytkownika” lub nie ma go wcale, spróbuj utworzyć test.php
skrypt:
<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 dla niektórych ludzi na wspólnych gospodarzy 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ą tutaj właściwie trzy pytania. Nie jestem pewien, o co pytasz.
Byłoby to (zwykle) w katalogu modułów twojej dystrybucji apache, zwykle / etc / httpd / modules /
Można to sprawdzić za pomocą / usr / sbin / httpd -M, przynajmniej dla podstawowego systemu apache. Jeśli chcesz sprawdzić konkretny plik konfiguracyjny / usr / sbin / httpd -M -f / path / to / config / file
Aby uzyskać dużo informacji, możesz je zobaczyć za pomocą http: // nazwa_mechanizmu / server-info / To nie jest domyślnie skonfigurowane, musisz go skonfigurować . To trochę wycieku informacji, więc skonfiguruj to więc tylko miejscowi mogą to zobaczyć.
Jeśli korzystasz z komputera i masz dostęp do działającego użytkownika, możesz także sprawdzić, co jest załadowane, sprawdzając proces. Możesz znaleźć proces nadrzędny za pomocą:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Następnie sprawdź
cat /proc/PID_FROM_ABOVE/maps
Jeśli korzystasz z Redhat / CentOS, httpd
jest używany zamiast apache2ctl
.
Oznacza to, że musisz użyć
httpd -M
Jednak httpd
prawie nigdy nie znajduje się na oczekiwanej ścieżce.
Mogę potwierdzić na CentOS 5.8 faktyczną ścieżkę /usr/sbin/httpd
.
/usr/sbin/httpd -M
Ale jeśli to nie jest ścieżka, możesz ją odkryć. Oto jak mogłem to zrobić.
Najpierw sprawdziłem demona używanego do sterowania nim.
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.
Wyświetl wszystkie włączone moduły
a2query -m
Na moim Gentoo mogę wykonać apache2ctl modules
i zobaczyć wymienione moduły.
Sprawdzanie z poziomu skryptu php (dla pliku mod_xsendfile):
if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
&& in_array('mod_xsendfile', apache_get_modules()))
\\doSomething();
Sprawdzanie PHP_SAPI polega na wykluczeniu, gdy php działa jako CGI, ponieważ apache_get_modules () nie działa w tym kontekście. Dodatkowo, jeśli jest uruchamiany na php <5.0.0, tylko apache2handler
kontekst da oczekiwany wynik.
Stworzyłem mały skrypt Pythona, aby ci w tym pomóc. Proszę spojrzeć na https://github.com/zioalex/unused_apache_modules
Oto, czego możesz się po tym 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']