我如何知道 Apache 正在使用哪个配置文件?

我如何知道 Apache 正在使用哪个配置文件?

我正在尝试在 Mac OS X 上设置虚拟主机。我一直在修改 httpd.conf 并重新启动服务器,但一直无法让它正常工作。此外,我注意到它没有提供 httpd.conf 中提到的 DocumentRoot 中的文件(Libraries/WebServer/Documents),而是在另一个目录(/usr/local/apache2/htdocs)中。我在 httpd.conf 中的任何地方都没有看到这个文件夹。此外,PHP 可以运行,但“LoadModule php5_module”行被注释掉了。这让我认为它正在使用另一个 .conf 文件。我如何才能确定实际加载的是哪个配置?

更新:我刚刚删除了 httpd.conf,并且 apache 在重启后表现相同,所以它肯定没有使用它!

答案1

对于任何 *nix 应用程序,最简单的方法是查询二进制文件本身。对于 httpd,我想象这个过程应该是这样的:

$ whereis httpd
/usr/sbin/httpd
$ /usr/sbin/httpd -V
Server version: Apache/2.2.11 (Unix)
Server built:   Jun 17 2009 14:55:13
Server's Module Magic Number: 20051115:21
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/private/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

正如你所看到的 - 我的 OS X 说二进制文件,如果没有其他指示,将使用配置文件:/private/etc/apache2/httpd.conf

如果这没有帮助,也许克里斯托弗的建议寻找是下一步。

答案2

还有另一个关于 serverfault 的问题。如果您使用的是基于 Debian 的服务器,您可以使用它apache2ctl来确定正在使用哪个配置文件:

apache2ctl -V

更多内容:

如何找出 apache 在运行时正在使用哪个 httpd.conf

答案3

尝试

ps ax | grep httpd

你应该(可能)得到如下输出

1633   ??  Ss     0:00.21 /usr/sbin/httpd -f /etc/httpd.conf

此外,你到底是如何重启服务器的?我只是好奇,以防你没有实际上重新读取配置文件。

答案4

首先,检查哪个是 Apache 的启动脚本。对于 macOS,它应该是 /Library/LaunchDaemons。它可能包含工作目录或类似信息。

您还可以使用 dtruss 调试正在运行的进程本身。您可以使用 连接到正在运行的进程dtruss -p <pid>。然后,如果您将其 HUP,您可能可以仔细查看输出以查看它从哪里获取其配置。或者,只需使用 直接调用 dtruss 即可启动 Apache dtruss start_apache_command

您可以随时使用 在系统范围内搜索 httpd.conf find / -name httpd.conf

相关内容