web-dev-qa-db-ja.com

どののApacheモジュールが有効/インストールされているかを確認するにはどうすればいいですか?

どのApacheモジュールが有効になっているかをチェックするための最もエレガントな方法はどれですか。

373
udo

あなたはUbuntuにいるので試してみてください。

Apache2ctl -M
451
Linker3000

httpd -Mはどのモジュールが組み込まれているか共有されているかを教えてくれます。

116

リモートサーバーでコマンドを実行できない場合、上記の回答から何もうまくいきません。あなたが「ユーザー」特権しか持っていないか、まったく持っていない場合はtest.phpスクリプトを作成してみてください。

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

ただし、PHPがmod_phpとしてインストールされている場合にのみ機能します。

36
yatsa

たぶんこれはhttpdapachectlまたはプロセスにアクセスできない共用ホスト上の何人かの人々に役立つでしょう:

有効なモジュール:ls /etc/Apache2/mods-enabled/

利用可能なモジュール:ls /etc/Apache2/mods-available/

26
CodeBrauer

apachectl も使えます。

apachectl -t -D DUMP_MODULES
18
Eddie B

ここには3つの質問があると思います。どちらがあなたが求めているのかよくわかりません。

  • どのモジュールをディスクに持っていますか。あなたが使用できるすべてのモジュールは何ですか。

これは(通常)Apacheディストリビューションのmodulesディレクトリにあります。通常は/ etc/httpd/modules /です。

  • 実行するように構成されている特定のインスタンスはどのモジュールです。

これは、少なくとも基本システムがApacheの場合は、/ usr/sbin/httpd -Mで確認できます。特定の設定ファイル/ usr/sbin/httpd -M -f/path/to/config/fileをチェックしたい場合

  • 稼働中のApacheの内容

たくさんの情報を得るためには、 http:// machinename/server-info / で見ることができます。これはデフォルトでは設定されていません。 d = 設定する必要があります それはちょっとした情報漏えいなので、地元の人だけが見ることができるように設定します。

マシン上にいて、実行中のユーザーになるためのアクセス権がある場合は、プロセスをチェックすることによって何がロードされているかも確認できます。あなたは親プロセスを見つけることができます:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'

それからチェックアウト

cat /proc/PID_FROM_ABOVE/maps
13
Rich Homolka

Redhat/CentOSを使用している場合は、Apache2ctlの代わりにhttpdが使用されます。

これはあなたが使用する必要があることを意味します

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

それはそれを見つける場所を正確に私に言った。お役に立てれば。

11
geedew

すべての有効なモジュールを一覧表示する

a2query -m
5
MetalGodwin

私のgentooでは、Apache2ctl modulesを実行してモジュールの一覧を見ることができます。

3
Grzegorz Golec

Phpスクリプト内からチェックする(mod_xsendfile用):

if (in_array(PHP_SAPI, array('Apache','Apache2filter','Apache2handler'))
  && in_array('mod_xsendfile', Apache_get_modules()))
  \\doSomething();

Apache_get_modules() はそのコンテキストでは動作しないため、PHP_SAPIのチェックはphpがCGIとして実行されている場合は除外することです。さらに、これがphp <5.0.0で実行された場合、Apache2handlerコンテキストのみが期待される結果を生成します。

2
noobish

私はそれを手助けするために小さな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']
1
Alex