Как проверить, какие модули apache включены/установлены?
Какой самый элегантный способ проверить, какие модули apache включены/установлены?
Какой самый элегантный способ проверить, какие модули apache включены/установлены?
Ты на Убунту, так что попробуй:
apache2ctl -M
```.
httpd -M
подскажет вам, какие модули встроены или совместно используются.
Ничто из вышеперечисленных ответов не работает, если вы не можете выполнять команды на удаленном сервере. Если вы имеете только “пользовательские” привилегии или вообще их не имеете, попробуйте создать 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/modules/
Это можно проверить с помощью /usr/sbin/httpd -M, по крайней мере, для базовой системы apache. Если вы хотите проверить конкретный конфигурационный файл /usr/sbin/httpd -M -f /path/to/config/file
Что в работающем apache
Чтобы получить много информации, вы можете посмотреть его с помощью http://machinename/server-info/ Это не настроено по умолчанию, вам нужно будет настроить это в. Это немного утечка информации, так что настройте ее так, чтобы только локальные пользователи могли ее видеть.
Если вы находитесь на машине и у вас есть доступ, чтобы быть запущенным пользователем, вы также можете увидеть, что загружено, проверив процесс. Вы можете найти родительский процесс с помощью:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Тогда проверьте
&00001
Если вы находитесь на Redhat/CentOS, httpd
используется вместо apache2ctl
.
Это означает, что вам нужно использовать
httpd -M
Тем не менее, httpd
почти никогда не находится на пути, который вы ожидаете.
Я могу подтвердить на CentOS 5.8, что реальный путь это /usr/sbin/httpd
.
/usr/sbin/httpd -M
Но если это не тот путь, вы можете обнаружить его. Вот как я смог это сделать.
Сначала я проверил даемона, который используется для управления им.
less /init.d/httpd
Around line 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
контекст будет выдавать ожидаемый результат.
Я создал небольшой питоновый сценарий, чтобы помочь тебе с ним. Пожалуйста, взгляните на _COPY13_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']
```.