使用不同的配置文件启动Apache失败,没有任何错误消息



出于测试目的,我想在本地运行Apache(最终作为非root用户),并将Apache配置文件保存在我的中央存储库中。根据Apache文档(http://httpd.apache.org/docs/2.2/configuring.html),我可以设置配置文件与-f交换机和ServerRoot与-d交换机(http://httpd.apache.org/docs/2.2/programs/httpd.html)。

现在我的问题是,当我试图启动Apache与

sudo apache2 -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf -k start

进程退出,没有实际启动Apache(没有任何)错误消息。

我知道配置文件被读取,因为如果文件中有错误,上面的命令将打印错误消息。Apache实际上也使用ServerRoot目录,因为在$(pwd)/testApacheRootDir/logs/下创建了一个(空的)error_log文件。

我的Apache配置文件是这样的:

Listen 80
NameVirtualHost localhost:80
<VirtualHost localhost:80>
DocumentRoot /var/www/cms
ServerName cms.testing
</VirtualHost>
<VirtualHost localhost:80>
DocumentRoot /var/www/vendor
ServerName vendor.testing
</VirtualHost>

apache2 -V打印:

Server version: Apache/2.2.22 (Ubuntu)
Server built:   Nov  6 2012 20:27:25
Server's Module Magic Number: 20051115:30
Server loaded:  APR 1.4.6, APR-Util 1.4.1
Compiled using: APR 1.4.6, APR-Util 1.4.1
Architecture:   64-bit
Server MPM:     Worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/worker"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

你有什么建议吗?

我不知道为什么错误消息从未写入日志文件或控制台输出,但缺少的是User指令。添加

User    www-data
Group   www-data

一切正常

Apache偶尔会在解析配置文件之后,但在初始化日志之前遇到错误。在这种情况下,错误消息被打印到stderr,但是在启动Apache时隐藏进程的任何输出。试着这样运行:

apache2 -X -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf

-X标志导致Apache在前台运行:

-X在调试模式下运行httpd。只有一个worker会被启动,并且服务器不会从控制台分离。

这应该允许您看到打印到stderr的任何错误消息。

如果这不起作用,这里有一个大锤子:

strace的控制下运行Apache,然后检查跟踪文件,看看是否可以发现问题。启动Apache:

strace -o trace -f -s 1024 apache2 -X -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf

这将向名为trace的文件写入一个系统调用跟踪。检查这个文件(可能从底部开始)是否有任何包含错误消息的write系统调用,或者系统调用中的错误(例如,ENOENT,因为在你的配置中指定的目录丢失或输入错误等)。

-f标志要求strace跟随fork, -s 1024意味着它将在对write的调用中记录最多1024个字符,等等

最新更新