Как проверить, какие модули apache включены /установлены?
Какой самый элегантный способ проверить, какие модули apache включены?
11 ответов
httpd -M
расскажет вам, какие модули встроены или совместно используются.
Ничто из вышеприведенных ответов не работает, если вы не можете запускать команды на удаленном сервере. Если у вас есть только привилегии пользователя или нет, попробуйте создать сценарий test.php
:
& л; предварительно >
& Lt;? PHP
print_r (apache_get_modules ());
? >
& Lt; /предварительно >
Хотя он будет работать только в том случае, если 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 / Это не настроено по умолчанию, вам нужно настроить его in. Его немного утечки информации, поэтому настройте его так, чтобы его видели только местные люди.
Если вы находитесь на машине и у вас есть доступ к текущему пользователю, вы также можете увидеть, что загружено, проверив процесс. Вы можете найти родительский процесс с помощью:
ps -ef | gawk '/httpd /& & & & $ 3 == 1 {print $ 2} '
Затем проверьте
cat /proc /PID_FROM_ABOVE /maps
Если вы используете Redhat /CentOS, вместо apache2ctl
используется httpd
.
Это означает, что вам нужно использовать
httpd -M
Однако httpd
почти никогда не находится в ожидаемом вами пути.
Я могу подтвердить на CentOS 5.8 фактический путь /usr /sbin /httpd
.
/usr /sbin /httpd -M
Но если это не путь, вы можете его обнаружить. Вот как я смог это сделать.
Сначала я проверил демона, который используется для его управления.
less /init.d/httpd
Вокруг строки 40ish
# Путь к скрипту apachectl, двоичному файлу сервера и короткой форме для сообщений.
apachectl = /USR /SBIN /apachectl
HTTPD = $ {HTTPD- /USR /SBIN /HTTPD}
прог = HTTPD
Который рассказал мне, где именно его найти. Надеюсь, это поможет.
Список всех включенных модулей
a2query -m
В моем gentoo я могу выполнить apache2ctl modules
и увидеть перечисленные модули.
Проверка из php-скрипта (для файла mod_xsend):
if (in_array (PHP_SAPI, массив ('apache', 'apache2filter', 'apache2handler'))
& Amp; & Amp; in_array ('mod_xsendfile', apache_get_modules ()))
\\сделай что-нибудь();
Проверка на 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
Имя модуля mod_python.c
Участие в фазе конфигурации: 4
Запрос участия в фазе: 11
Текущая конфигурация: 3
2
Имя модуля mod_version.c
Участие в фазе конфигурации: 0
Запрос участия в фазе: 0
Текущая конфигурация: 1
3
Имя модуля mod_proxy_connect.c
Участие в фазе конфигурации: 0
Запрос участия в фазе: 0
Текущая конфигурация: 0
Чтобы безопасно удалить:
[ 'Mod_proxy_connect.c']
POPPED: mod_proxy_connect.c
Для KEEP: ['mod_python.c', 'mod_version.c', 'mod_proxy_connect.c']