Apache HTTP Server 版本 2.4
当使用大量虚拟主机时,如果每个虚拟主机都指定了不同的日志文件,Apache 可能会耗尽可用文件描述符(有时称为 文件句柄)。Apache 使用的文件描述符总数为每个不同的错误日志文件一个,每个其他日志文件指令一个,再加上 10-20 个用于内部使用。Unix 操作系统限制了进程可以使用文件描述符的数量;该限制通常为 64,并且通常可以增加到一个较大的硬限制。
虽然 Apache 尝试根据需要增加限制,但这可能不起作用,如果
setrlimit()
系统调用。setrlimit(RLIMIT_NOFILE)
调用在您的系统上不起作用(例如 Solaris 2.3)如果出现问题,您可以
<VirtualHost>
部分中指定日志文件,而只记录到主日志文件。(有关如何执行此操作的更多信息,请参见下面的 拆分日志文件。)
#!/bin/sh
ulimit -S -n 100
exec httpd
如果您想将多个虚拟主机记录到同一个日志文件中,您可能希望事后拆分日志文件以便对各个虚拟主机进行统计分析。这可以通过以下方式实现。
首先,您需要将虚拟主机信息添加到日志条目中。这可以使用 LogFormat
指令以及 %v
变量来完成。将此添加到您的日志格式字符串的开头
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost CustomLog logs/multiple_vhost_log vhost
这将在通用日志格式中创建一个日志文件,但每个行前面都带有规范的虚拟主机(出现在 ServerName
指令中的内容)。(有关自定义日志文件的更多信息,请参见 mod_log_config
。)
当您希望将日志文件拆分为其组成部分(每个虚拟主机一个文件)时,您可以使用程序 split-logfile
来完成此操作。您将在 Apache 发行版的 support
目录中找到此程序。
使用以下命令运行此程序
split-logfile < /logs/multiple_vhost_log
此程序在使用您的 vhost 日志文件名运行时,将为您的日志文件中出现的每个虚拟主机生成一个文件。每个文件将被称为 hostname.log
。