Як перевірити, які модулі apache увімкнено / встановлено?


Відповіді:


464

Ви на Ubuntu, тому спробуйте:

apache2ctl -M

11
apache2ctl -M чудово працює
udo

3
apache2 -M призводить до цієї помилкиapache2: bad user name ${APACHE_RUN_USER}
udo

4
Досить справедливо - це пов’язано з тим, що ви не виконуєте команду, як користувач часу запуску apache (можливо, www-data), визначений у конфігурації apache. Існує спосіб виправити це, але ви також можете дотримуватися apache2ctl.
Linker3000

9
sudo apache2ctl -M | sort
mmdemirbas

4
Зауважте, що існує багато корисних варіантів (прапорів), apache2ctlале вони не вказані ні на сторінці вручну, ні в apache2ctl --help. Це тому, що вони передаються httpd. Вони вказані лише в документації httpd .
Lutz Prechelt

117

httpd -M підкаже, які модулі вбудовані або спільні.


хм ... я отримую "bash: httpd: команда не знайдена" під час запуску httpd -M як root
udo

Тож тоді вкажіть повний шлях до httpdвиконуваного файлу.
Ігнасіо Васкес-Абрамс

9
@ IgnacioVazquez-Abrams: У Ubuntu (та інших дистрибутивах на базі Debian) назва є, apache2а ні httpd, тому її не знайдено.
Даніель Андерссон

3
Apache є httpd на redhat. Спробуйте одну з інших відповідей, якщо ця не працює для вас.
Jacks_Depression

3
CentOS також використовує httpd замість apache2
pedromanoel

37

Нічого з наведених вище відповідей не працює, якщо ви не можете запускати команди на віддаленому сервері. Якщо у вас є лише привілеї "користувача" або взагалі відсутні, спробуйте створити test.phpсценарій:

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

Хоча це буде працювати лише в тому випадку, якщо PHP встановлено як mod_php.


4
Крім того, ви хочете, щоб це не було загальнодоступним. Можливо, ви хочете обмежити цей результат клієнтом із IP-адресою адміністратора. І ви захочете видалити цей сценарій, як тільки ви закінчите його. Тому що оборона в глибині; не робити це простіше, ніж потрібно.
Парфянський розстріл

28

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

Увімкнуті модулі: ls /etc/apache2/mods-enabled/

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


Ось повний список, apache2ctl фільтрує їх
jgpATs2w


13

Я думаю, що тут насправді три питання. Я не впевнений, про що ви питаєте.

  • Які модулі у вас на диску. Які всі модулі ви можете використовувати.

Це зазвичай (як правило) в каталозі модулів вашого розповсюдження 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

1
Корисна інформація, але оскільки ОП використовує Ubuntu, назви файлів та місця розташування різні - наприклад: / usr / sbin / apache2 замість httpd, та ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' Розташування модулів обробляється по-різному, з вкладеними модами та вбудованими модами підпапками
Linker3000

Дякуємо @ Linker3000 ... Ви праві, це для RedHat / Centos, я дозволю вашому коментарю викластись про те, як перейти на Ubuntu
Rich Homolka

11

Якщо ви перебуваєте на 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

Що точно сказало мені, де його знайти. Сподіваюся, це допомагає.




2

Перевірка в 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

Я створив невеликий сценарій 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']
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.