你在Ubuntu上,所以试试:
apache2ctl -M
httpd -M
会告诉你哪些模块是内置或共享的。
也许这对一些共享主机上的人来说会有帮助,httpd
,apachectl
或进程:
已启用模块:ls /etc/apache2/mods-enabled/
可用模块:ls /etc/apache2/mods-available/
我觉得这里其实有三个问题。我不确定你问的是哪一个。
你的磁盘上有哪些模块。
你可以使用的模块都有哪些。
这可以在你apache发行版的模块目录下,通常是/etc/httpd/modules/
任何特定的实例都配置了哪些模块。如果你想检查一个特定的配置文件 /usr/sbin/httpd -M -f /path/to/config/file
运行中的apache里有什么东西
要得到很多信息,你可以用http://machinename/server-info/ 查看,这不是默认配置的,你必须configure。如果你在机器上,并且你有权限成为运行中的用户,你也可以通过检查进程来查看加载的内容。你可以通过:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
找到父进程,然后查看
cat /proc/PID_FROM_ABOVE/maps
列出所有启用的模块
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.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']