如何调试 Apache 404?

如何调试 Apache 404?

每次我设置新httpd安装时,我都会为初始  VirtualHost//mod_proxy_fcgi等配置而苦恼。

当我设置虚拟主机并收到 404 时,我总是转到日志,结果却发现:

  • access_log

    ::1 - - [13/Sep/2019:21:33:57 +0200] "GET /phpinfo.php HTTP/1.1" 404 196
    

    也就是说,只有404发生了那件事。

  • error_log

    ...
    [Fri Sep 13 21:33:55.009444 2019] [mpm_prefork:notice] [pid 73200] AH00163: Apache/2.4.41 (Unix) configured -- resuming normal operations
    [Fri Sep 13 21:33:55.011901 2019] [core:notice] [pid 73200] AH00094: Command line: '/usr/local/opt/httpd/bin/httpd -D FOREGROUND'
    

    也就是说,什么也没有。

所以我总是做同样的事情:反复试验

有什么方法可以指示 Apache 在得出 404 结论之前记录它尝试的每个步骤?

就像是:

  • 与 VirtualHost x 不匹配
  • 无法匹配 VirtualHost y
  • 与 VirtualHost z 匹配,未找到文件:/path/to/file

也就是说,有用

答案1

首先要检查的是 的输出apachectl -S。它显示哪个 IP 正在监听哪个端口以及哪个虚拟主机。它还显示配置它的文件和行号。

然后你可以添加全局日志为所有虚拟主机添加指令,并在调试时增加 LogLevel,同时仍保留标准 CustomLog 文件。

例如,创建文件/etc/apache2/conf-available/temp_debug.conf

LogLevel trace4
GlobalLog ${APACHE_LOG_DIR}/debug.log "%v:%p %h %l %u %t \"%r\" %>s %O file=%f"

# http://httpd.apache.org/docs/current/mod/mod_log_config.html#formats
# %v    The canonical ServerName of the server serving the request.
# %f    Filename.

使用启用它

sudo a2enconf temp_debug && sudo apachectl graceful

完成后,使用以下命令禁用额外日志记录

sudo a2disconf temp_debug && sudo apachectl graceful

跟踪信息将进入您的 ErrorLog,同时指示需要哪个级别的跟踪才能将其写入日志。

答案2

是的。有几种方法可以解决您的问题。在我看来,最好的方法是针对每个虚拟主机配置不同的ErrorLog指令CustomLog,并保存到独立的文件中。另一种方法是自定义日志,使用 LogFormat 掩码插入虚拟主机(例如,%v,以记录相应的虚拟主机)。这种方法的问题是,如果您使用某种 Apache 日志分析器,您可能会遇到某种问题,或者必须对其进行配置以匹配新模式。

此致。

相关内容