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

Как проверить, какие модули apache включены/установлены?

Какой самый элегантный способ проверить, какие модули apache включены/установлены?

Ответы (11)

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

Ты на Убунту, так что попробуй:

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

httpd -M подскажет вам, какие модули встроены или совместно используются.

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

Ничто из вышеперечисленных ответов не работает, если вы не можете выполнять команды на удаленном сервере. Если вы имеете только “пользовательские” привилегии или вообще их не имеете, попробуйте создать test.php скрипт:

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

Хотя он будет работать только в том случае, если PHP установлен как mod_php.

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

Может быть, это поможет некоторым людям на общих хостах без доступа к httpd, apachectl или процессам:

Доступные модули: ls /etc/apache2/mods-enabled/

Доступные модули: ls /etc/apache2/mods-available/

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

Вы также можете использовать кнопки apachectl

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

Думаю, здесь на самом деле три вопроса. Я не уверен, что вы спрашиваете.

  • Какие модули у вас есть на диске. Какие модули вы можете использовать.

Это будет (обычно) в каталоге модулей вашего дистрибутива 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

11
11
11
2014-03-11 18:41:39 +0000

Если вы находитесь на 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

Который подсказал мне, где именно его искать. Надеюсь, это поможет.

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

Перечислите все включенные модули

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

На моем gentoo, я могу выполнить apache2ctl modules и посмотреть модули, перечисленные в списке.

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

Проверка из 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 контекст будет выдавать ожидаемый результат.

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

Я создал небольшой питоновый сценарий, чтобы помочь тебе с ним. Пожалуйста, взгляните на _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']
```.

Похожие вопросы

6
10
5
37
4