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


36

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

更新:我只是删除了httpd.conf和apache在重启后的行为相同,所以它绝对没有使用它!

Answers:


45

对于任何* 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
如果您通过Server.app使用Apache,则此方法将无法正常工作。在这种情况下,您需要@msanford serverfault.com/a/155114/187798中答案中的进程列表,该列表显示Server.app启动了httpd与我的安装(Mavericks)所示的配置文件不同/usr/sbin/httpd -D FOREGROUND -f /Library/Server/Web/Config/apache2/httpd_server_app.conf -D WEBSERVICE_ON
Jason S

当使用通过macports安装的apache时,也无法使用-msandord的回答对我有用!
pgee70,2014年


10

尝试

ps ax | grep httpd

并且您应该(可能)获得如下输出

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

此外,您究竟如何重新启动服务器?只是好奇,以防万一您没有真正重新读取配置文件。


嗯,它里面没有-f国旗
Claudiu 2010年

1
+1,因为这是适用于所有情况的唯一答案,也就是说,您是自己配置Apache还是通过Server.app使用Apache
Jason S

2

因为某些配置使用Server应用程序,brew或其他任何东西,并且因为其中一个FTW:

$(ps ax -o comm | grep -m 1 httpd) -V | grep SERVER_CONFIG_FILE

该命令执行以下操作:

  • 查找活动的httpd进程
  • 输出配置信息
  • Grep配置文件

在Sierra和El Capitan上测试


$很重要(在这种情况下,它不是命令行提示符)。如果将parens中的语句转换为命令,则将-V标志传递给该命令。忽略它会导致:“意外标记'-V'附近的语法错误”。
汤姆·奥格

0

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

您也可以使用dtruss调试正在运行的进程。您可以使用连接到正在运行的进程dtruss -p <pid>。然后,如果您对它进行了设置,则可能可以仔细查看输出以查看它从哪里获取其配置。或者,只需通过直接调用dtruss来启动Apache dtruss start_apache_command

您始终可以使用进行系统范围内的httpd.conf搜索find / -name httpd.conf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.