在 Debian 上调试 Apache,错误日志在哪里?

AP2*_*257 7 debian apache-http-server logging

我使用的 Debian 服务器已经成功运行了 Apache、mod_wsgi 和一堆虚拟主机。

我安装了我的论坛应用程序(Django 的 OSQA)并按照OSQA 说明创建了一个指定ServerName为新子域的 Apache 配置文件。我还为应用程序创建了一个 .wsgi 文件,并指向WSGIScriptAlias它。然后我重新启动了Apache。

但是,当我转到新的子域时,收到 404 错误消息。

我错过了上面的一步吗?或者只是创建一个新的 Apache 配置文件sites-available足以告诉 Apache 一个新的子域?

如果还有其他问题,我该如何调试?配置文件中指定的ErrorLogCustomLog都为空。apache2.conf,我猜是 Apache 范围的配置,指定ErrorLog /var/log/apache2/error.log,但这是另一个空白文件。

Tom*_*Tom 6

有很多关于 Apache 的在线资源。您是否尝试过在 Google 上搜索自己找到答案?

几个月前我在谷歌搜索时,发现了以下信息:

ErrorLog     /var/log/apache2/error.log
AccessLog    /var/log/apache2/access.log

start/stop   /etc/init.d/apache2 (start|stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean) 
Run Code Online (Sandbox Code Playgroud)


Jar*_*man 6

对于 Debian 上的所有情况,第一篇文章并不正确。这取决于您如何安装软件包,无论是通过 apt 还是从源代码编译。

要找出日志的位置,根据 Apache 的指示,它被指示生成日志,您需要运行以下命令:

/usr/sbin/apachectl -V
Run Code Online (Sandbox Code Playgroud)

某些 Linux 发行版创建了一个名为 /usr/sbin/apacheVERctl 的符号链接,其中 VER 为 2 或 1.3 或其他。Debian 将实际文件放在 /usr/sbin/ 中,所以尝试上面的命令,你会看到类似的内容:

/usr/sbin/apachectl -V
Server version: Apache/2.2.3

<removed for brevity>

 -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" <<=== default log files stored in "logs/" which is relative to /usr/local/apache<VER>/logs on this server==>
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
Run Code Online (Sandbox Code Playgroud)

如您所见,我的日志在 /usr/local/apache2/error_log 中。根据服务器的编译方式, --prefix 标志可能已指向其他地方。最好的办法是运行该命令并使用 find 查找 error_log。

find / -iname name_of_error_log_file_that_apachectl_spit_out
Run Code Online (Sandbox Code Playgroud)

您可能需要执行 find / -iname apachectl 或其各种排列才能找到二进制文件的位置。有时它被称为 /usr/sbin/httpd。只要确保你知道 find 命令,你就会搞清楚。

谷歌搜索不会总是给你正确的答案,所以阅读你的服务的文档至关重要。

此外,在查看文档后,如果您浏览了整个文档,则您已经为 /nimda 路径配置了日志记录,因此 nimda 的日志记录在此处:

    <cut above config lines>

        CustomLog /var/log/httpd/OSQA/access_log common
        ErrorLog /var/log/httpd/OSQA/error_log
    </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

对于 SSL,日志似乎会转到同一个地方:

(可选)运行管理界面 https ServerAdmin forum@example.com DocumentRoot /path/to/osqa-site ServerName example.com SSLEngine on SSLCertificateFile /path/to/ssl-certificate/server.crt SSLCertificateKeyFile /path/to/ssl- certificate/server.key WSGIScriptAlias / /path/to/osqa-site/osqa.wsgi CustomLog /var/log/httpd/OSQA/access_log common ErrorLog /var/log/httpd/OSQA/error_log DirectoryIndex index.html

请检查

/usr/local/apache<VER>/logs 
Run Code Online (Sandbox Code Playgroud)

在服务器上甚至

/usr/local/httpd/*, /var/log/httpd or /var/log/apache<ver>. 
Run Code Online (Sandbox Code Playgroud)

不同的 Linux 发行版存储日志的位置不同。

日志并不总是在 /var/log/apache/* 或 /var/log/httpd

有时它们在 /var/log/httpd/ 中,有时人们从源代码编译 Apache 并且 apache 变量 DEFAULT_ERRORLOG 设置不同,因此错误日志在一个地方而 access_log 在另一个地方。有时文件也有不同的名称。有时人们配置不同的虚拟主机以将日志存储在不同的地方,因为他们有一堆域,而且他们不希望机器上的所有其他客户都看到其他域的日志,因为这可能会暴露关键信息。第一个帖子不会在所有情况下都有效。

谷歌无法回答每一个问题,用这么多词告诉某人“谷歌”并不总是最好的答案。

一个人可能会使用 Redhat,当从 Redhat 分布式 RPM 安装时,它会将日志放在不同的位置。