Відповіді:
Ви на Ubuntu, тому спробуйте:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
але вони не вказані ні на сторінці вручну, ні в apache2ctl --help
. Це тому, що вони передаються httpd
. Вони вказані лише в документації httpd .
httpd -M
підкаже, які модулі вбудовані або спільні.
httpd
виконуваного файлу.
apache2
а ні httpd
, тому її не знайдено.
Нічого з наведених вище відповідей не працює, якщо ви не можете запускати команди на віддаленому сервері. Якщо у вас є лише привілеї "користувача" або взагалі відсутні, спробуйте створити test.php
сценарій:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Хоча це буде працювати лише в тому випадку, якщо PHP встановлено як mod_php
.
Може бути , це допоможе деяким людям на загальних хостах, що не має доступу до httpd
, apachectl
або процесів:
Увімкнуті модулі: ls /etc/apache2/mods-enabled/
Доступні модулі: ls /etc/apache2/mods-available/
Я думаю, що тут насправді три питання. Я не впевнений, про що ви питаєте.
Це зазвичай (як правило) в каталозі модулів вашого розповсюдження apache, як правило, / etc / httpd / module /
Це можна перевірити за допомогою / usr / sbin / httpd -M, принаймні для базової системи apache. Якщо ви хочете перевірити конкретний конфігураційний файл / usr / sbin / httpd -M -f / path / to / config / file
Щоб отримати багато інформації, ви можете побачити її за допомогою http: // ім'я машини / сервера-інформації / Це не налаштовано за замовчуванням, вам доведеться його налаштувати . Це трохи витоку інформації, тому налаштуйте її тож бачать його лише місцеві.
Якщо ви працюєте на машині і у вас є доступ до запущеного користувача, ви також можете побачити, що завантажено, перевіривши процес. Ви можете знайти батьківський процес за допомогою:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Тоді перевірте
cat /proc/PID_FROM_ABOVE/maps
Якщо ви перебуваєте на Redhat / CentOS, httpd
використовується замість apache2ctl
.
Це означає, що вам потрібно скористатися
httpd -M
Однак httpd
майже ніколи не йде на очікуваний шлях.
Я можу підтвердити на CentOS 5.8 фактичний шлях /usr/sbin/httpd
.
/usr/sbin/httpd -M
Але якщо це не шлях, ви можете його відкрити. Ось як мені вдалося це зробити.
Спочатку я перевірив демона, який використовується для його управління.
less /init.d/httpd
Приблизно лінія 40ish
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
Що точно сказало мені, де його знайти. Сподіваюся, це допомагає.
Список усіх включених модулів
a2query -m
На своєму gentoo я можу виконувати apache2ctl modules
та бачити перелічені модулі.
Перевірка в php-скрипті (для mod_xsendfile):
if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
&& in_array('mod_xsendfile', apache_get_modules()))
\\doSomething();
Перевірка на PHP_SAPI полягає у виключенні, коли php працює як CGI, оскільки apache_get_modules () не працює в цьому контексті. Крім того, якщо це запускається на php <5.0.0, apache2handler
очікуваний результат дасть лише контекст.
Я створив невеликий сценарій python, щоб допомогти вам у цьому. Перегляньте https://github.com/zioalex/unused_apache_modules
Це ви можете очікувати від цього:
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']