出于测试目的,我想在本地运行Apache(最终作为非root用户)并将Apache配置文件保存在我的中央存储库中。根据Apache文档(http://httpd.apache.org/docs/2.2/configuring.html),我可以使用-f
开关设置配置文件,使用-d
开关设置ServerRoot(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目录,因为error_log
下创建了一个(空)$(pwd)/testApacheRootDir/logs/
文件。
我的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"
你有什么建议吗?
答案 0 :(得分:1)
我不知道为什么错误消息永远不会写入日志文件或控制台输出,但缺少的是User指令。添加后
User www-data
Group www-data
一切正常。
答案 1 :(得分:0)
在解析配置文件之后但在初始化日志记录之前,Apache偶尔会遇到错误。在这种情况下,错误消息将打印到stderr
,但在您执行时启动Apache会隐藏进程的任何输出。尝试像这样运行它:
apache2 -X -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf
-X
标志导致Apache在前台运行:
-X在调试模式下运行httpd。只启动一个工作程序,服务器不会从控制台分离。
这样可以让您看到打印到stderr
的任何错误消息。
如果这不起作用,这是一个很大的锤子:
在strace
的控制下运行Apache,然后检查跟踪文件以查看是否可以发现问题。像这样启动Apache:
strace -o trace -f -s 1024 apache2 -X -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf
这会将系统调用跟踪写入名为trace
的文件。对于包含错误消息的任何write
系统调用或系统调用中的错误(例如,ENOENT
,检查此文件(可能从底部开始),因为配置中指定的目录丢失或输入错误或某事)。
-f
标记要求strace
跟踪分叉,而-s 1024
表示在write
等调用中最多可记录1024个字符。