我被分配了一项任务,以了解为什么运行 apache 2.2.3 的 2 个 CentOS Web 服务器在特定情况下会遇到非常高的负载。我首先检查的是,/var/log/messages
但后来我意识到 rsyslog 由于某种原因被关闭了,所以我启动了它并使用 将其打开chkconfig
。然后,我想检查 apache 错误和访问日志,因此我浏览到/var/log/httpd
但发现文件夹是空的。我检查/etc/httpd/conf/httpd.conf
后看到以下几行:
ErrorLog logs/error_log
CustomLog logs/access_log combined
据我所知,它指的是,/var/log/httpd/
但如前所述,文件夹是空的。在写这个问题时,我在服务器上查找了 httpd 版本并运行,httpd -v
这是我得到的响应:
[root@domU-IP httpd]# httpd -v
Server version: Apache/2.2.3
Server built: May 4 2011 06:51:15
Unable to open logs
我的问题是:
- 什么原因会导致日志消失?(有可能它们根本没有被创建过)
- 我如何重新创建日志并确保数据已写入其中?
- 应设置哪些权限
/var/log/httpd
?当前权限为:drwx------ 2 root root
提前致谢
答案1
当 Apache 配置中的路径引用不是绝对路径(即不以 开头/
)时,它们与指令中设置的目录相关ServerRoot
。 的常见默认设置ServerRoot
是 /etc/httpd
创建/etc/httpd/logs
日志目录。
/etc/httpd/logs
大多数打包的 Apache 版本都会创建从到 的符号链接/var/log/httpd
。 /etc/httpd 中的实际目录缺失(或根文件系统已满)或您的设置中可能缺少符号链接。
Apache 由 root 启动,并在放弃权限之前以 root 身份打开日志文件,因此 /var/log/httpd 上的目录权限看起来是正确的。
答案2
我的问题是没有用于访问日志的 Log 指令。我按照此处的说明进行操作https://ubuntuforums.org/showthread.php?t=1704686基本上是说:
在 ubuntu 上,您应该有一个名为/etc/apache2/conf.d/other-vhosts-access-log
以下内容的文件:
# Define an access log for VirtualHosts that don't define their own logfile
CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined
我忽略了这一点,这就是我没有收到日志的原因。