Какой самый элегантный способ проверить, какие модули apache включены?
Какой самый элегантный способ проверить, какие модули apache включены?
Ответы:
Вы на 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 / modules /
Это можно проверить с помощью / usr / sbin / httpd -M, по крайней мере, для базовой системы apache. Если вы хотите проверить определенный файл конфигурации / usr / sbin / httpd -M -f / path / to / config / file
Чтобы получить много информации, вы можете увидеть ее по адресу http: // machinename / server-info / Это не настроено по умолчанию, вам придется настроить его. Это немного утечки информации, поэтому настройте его так что только местные жители могут видеть это.
Если вы находитесь на машине и у вас есть доступ к работающему пользователю, вы также можете увидеть, что загружено, проверив процесс. Вы можете найти родительский процесс с помощью:
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
Вокруг линии 40иш
# 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']