如何检查启用/安装了哪些 apache 模块?

udo*_*udo 406 linux apache-http-server ubuntu

哪个是检查启用了哪些 apache 模块的最优雅的方法?

Lin*_*000 495

你在 Ubuntu 上,所以试试:

apache2ctl -M
Run Code Online (Sandbox Code Playgroud)

  • **apache2ctl -M** 很好用 (13认同)
  • `sudo apache2ctl -M | 排序` (9认同)
  • 很公平 - 这是因为您没有以 apache 配置中定义的 apache 运行时用户(可能是 www-data)运行命令。有一种方法可以解决此问题,但您最好还是坚持使用 apache2ctl。 (4认同)
  • 请注意,`apache2ctl` 有许多有用的选项(标志),但它们既未列在手册页中,也未列在 apache2ctl --help 中。那是因为它们被交给了 `httpd`。它们仅在 [httpd 文档](http://httpd.apache.org/docs/2.2/programs/httpd.html) 中列出。 (4认同)
  • **apache2 -M** 导致此错误 `apache2: bad user name ${APACHE_RUN_USER}` (3认同)

Ign*_*ams 124

httpd -M 会告诉你哪些模块是内置的或共享的。

  • @IgnacioVazquez-Abrams:在 Ubuntu(和其他基于 Debian 的发行版)上,名称是 `apache2` 而不是 `httpd`,这就是找不到它的原因。 (9认同)
  • CentOS 也使用 httpd 而不是 apache2 (4认同)
  • Apache 是 redhat 上的 httpd。如果这个答案不适合您,请尝试其他答案之一。 (3认同)

yat*_*sek 42

如果您无法在远程服务器上运行命令,则上述答案中的任何内容都不起作用。如果您只有“用户”权限或根本没有权限,请尝试创建一个test.php脚本:

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
    
Run Code Online (Sandbox Code Playgroud)

不过,它只有在 PHP 安装为mod_php.

  • 此外,您不希望此公开可见。可能希望将该结果限制为具有管理员 IP 的客户端。并且您会希望在完成后立即删除该脚本。因为纵深防御;不要让它变得比它需要的更容易。 (4认同)

Cod*_*uer 32

也许这将有助于共享主机上的某些人无法访问httpd,apachectl或进程:

启用的模块: ls /etc/apache2/mods-enabled/

可用模块: ls /etc/apache2/mods-available/


Edw*_*ett 19

你也可以使用apachectl

apachectl -t -D DUMP_MODULES
Run Code Online (Sandbox Code Playgroud)


Ric*_*lka 14

我认为这里实际上有三个问题。我不确定你问的是哪个。

  • 磁盘上有哪些模块。您可以使用的所有模块是什么。

这将(通常)在您的 apache 发行版的模块目录中,通常是 /etc/httpd/modules/

  • 什么模块是配置为运行的任何特定实例。

这可以通过 /usr/sbin/httpd -M 检查,至少对于基本系统 apache。如果要检查特定的配置文件 /usr/sbin/httpd -M -f /path/to/config/file

  • 正在运行的 apache 中有什么

要获取大量信息,您可以通过http://machinename/server-info/看到它 默认情况下没有配置,您必须配置它。它有点信息泄漏,所以配置它所以只有当地人才能看到。

如果您在机器上并且有权成为正在运行的用户,您还可以通过检查进程来查看加载的内容。您可以通过以下方式找到父进程:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Run Code Online (Sandbox Code Playgroud)

然后退房

cat /proc/PID_FROM_ABOVE/maps
Run Code Online (Sandbox Code Playgroud)


小智 11

如果您使用的是 Redhat/CentOS,httpd则使用apache2ctl.

这意味着您需要使用

httpd -M
Run Code Online (Sandbox Code Playgroud)

然而,httpd几乎从来没有在你期望的道路上。

我可以在 CentOS 5.8 上确认实际路径是/usr/sbin/httpd.

/usr/sbin/httpd -M
Run Code Online (Sandbox Code Playgroud)

但如果那不是路径,你可以发现它。这是我如何做到的。

首先,我检查了用来控制它的守护进程。

less /init.d/httpd
Run Code Online (Sandbox Code Playgroud)

大约 40 行

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
Run Code Online (Sandbox Code Playgroud)

这告诉我在哪里可以找到它。希望这可以帮助。


小智 6

列出所有启用的模块

a2query -m
Run Code Online (Sandbox Code Playgroud)