Apache无法重新加载...是否可以查看详细信息的日志?


12

我有一个要添加网站的Web服务器。

跑步后a2ensite,我跑了service apache2 reload,得到了:

[失败]重新加载Web服务器配置:apache2失败!

是否可以查看日志文件以获取更多详细信息?

Answers:


9

您可以httpd使用-V开关查看在何处配置以查找其配置文件:

$ httpd -V
Server version: Apache/2.2.15 (Unix)
Server built:   Feb 13 2012 22:31:42
Server's Module Magic Number: 20051115:24
Server loaded:  APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
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_SYSVSEM_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="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

您也可以使用该命令lsof查看Unix进程正在访问哪些文件。我的版本httpd使用的是股票端口80,因此请根据您的情况将80更改为8443!

$ netstat -tapn|grep ::80
tcp        0      0 :::80                       :::*                        LISTEN      5338/httpd     

现在,您可以运行lsof查找日志文件的写入位置:

$ lsof -p 5338|grep log
httpd   5338 root  mem    REG  253,0    10440   3141 /usr/lib64/httpd/modules/mod_logio.so
httpd   5338 root  mem    REG  253,0    27200   3139 /usr/lib64/httpd/modules/mod_log_config.so
httpd   5338 root    2w   REG  253,0     2014 395029 /var/log/httpd/error_log
httpd   5338 root    7w   REG  253,0     4140 394789 /var/log/httpd/access_log

您应该能够确定access_log以及配置文件的位置,并浏览它们以确定“ Directory”和“ Location”指令。它们指定了在告诉Apache要提供哪些文件时使用的本地目录。

怎么办?

然后,我将仔细检查access_log以确保其中存在与对服务器的访问相对应的条目。我的意思是,如果我浏览服务器,http://www.somedom.com/somefile应该看到此访问记录在access_log文件中,如下所示:

192.168.1.110 - - [17/Jul/2013:14:39:50 -0400] "GET /somefile HTTP/1.1" 200 4303 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5
37.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

文件在哪里?

您可以利用我们已经获得的上述知识,并开始将其应用如下:

这些信息httpd -V告诉我们Apache的根源:

-D HTTPD_ROOT="/etc/httpd"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

所以我们知道主要的配置文件在这里:/etc/httpd/conf/httpd.conf。因此,通过该文件查找以下行:

$ grep -E "DocumentRoot|Directory \"|^Include" /etc/httpd/conf/httpd.conf |grep -v "^#"
Include conf.d/*.conf
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
<Directory "/var/www/icons">
<Directory "/var/www/cgi-bin">
    <Directory "/var/www/error">

现在我知道这些目录是我们在中看到的文件的潜在来源access_log。在DocumentRootDirectories我期待通过的文件,somefile。如果它不在这些位置中,那么我接下来将重点关注输出Include中上述目录。grep/etc/httpd/conf.d/*.conf

这些文件是Apache使用的其他配置,因此您还需要重复使用的步骤来grep浏览这些文件。


14

如果找不到日志文件或日志文件为空,则可以运行apache配置测试,该测试将打印出配置文件的所有问题:

apachectl configtest

2

运行service apache2 restart。它将显示任何错误消息(通常该服务在停止和启动apache之前运行配置测试)

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.