一访问日志的格式
Apache内建了记录服务器活动的功能这就是它的日志功能这个《Apache日志》系列文章介绍的就是Apache的访问日志错误日志以及如何分析日志数据如何定制Apache日志如何从日志数据生成统计报表等内容
如果Apache的安装方式是默认安装服务器一运行就会有两个日志文件生成这两个文件是access_log(在Windows上是accesslog)和error_log(在Windows上是errorlog)采用默认安装方式时这些文件可以在/usr/local/apache/logs下找到对于Windows系统这些日志文件将保存在Apache安装目录的logs子目录不同的包管理器会把日志文件放到各种不同的位置所以你可能需要找找其他的地方或者通过配置文件查看这些日志文件配置到了什么地方
正如其名字所示访问日志access_log记录了所有对Web服务器的访问活动下面是访问日志中一个典型的记录
[/Aug/:::] GET / HTTP/
这行内容由项构成上面的例子中有两项空白但整行内容仍旧分成了项
第一项信息是远程主机的地址即它表明访问网站的究竟是谁在上面的例子中访问网站的主机是随便说一句这个地址属于一台名为的机器(要找出这个信息可以使用nslookup工具查找DNS)是一家制作Web搜索软件的公司可以看出仅仅从日志记录的第一项出发我们就可以得到有关访问者的不少信息
默认情况下第一项信息只是远程主机的IP地址但我们可以要求Apache查出所有的主机名字并在日志文件中用主机名字来替代IP地址然而这种做法通常不值得推荐因为它将极大地影响服务器记录日志的速度从而也就减低了整个网站的效率另外有许多工具能够将日志文件中的IP地址转换成主机名字因此要求Apache记录主机名字替代IP地址是得不偿失的
然而如果确实有必要让Apache找出远程主机的名字那么我们可以使用如下指令
HostNameLookups on
如果HostNameLookups设置成double而不是on日志记录程序将对它找到的主机名字进行反向查找验证该主机名字确实指向了原来出现的IP地址默认情况下HostNameLookups设置为off
上例日志记录中的第二项是空白用一个占位符替代实际上绝大多数时候这一项都是如此这个位置用于记录浏览者的标识这不只是浏览者的登录名字而是浏览者的email地址或者其他唯一标识符这个信息由identd返回或者直接由浏览器返回很早的时候那时Netscape 还占据着统治地位这个位置往往记录着浏览者的email地址然而由于有人用它来收集邮件地址和发送垃圾邮件所以它未能保留多久很久之前市场上几乎所有的浏览器就取消了这项功能因此到了今天我们在日志记录的第二项看到email地址的机会已经微乎其微了
日志记录的第三项也是空白这个位置用于记录浏览者进行身份验证时提供的名字当然如果网站的某些内容要求用户进行身份验证那么这项信息是不会空白的但是对于大多数网站来说日志文件的大多数记录中这一项仍旧是空白的
日志记录的第四项是请求的时间这个信息用方括号包围而且采用所谓的公共日志格式或标准英文格式因此上例日志记录表示请求的时间是年月日星期三::时间信息最后的表示服务器所处时区位于UTC之前的小时
日志记录的第五项信息或许是整个日志记录中最有用的信息它告诉我们服务器收到的是一个什么样的请求该项信息的典型格式是METHOD RESOURCE PROTOCOL即方法 资源 协议
在上例中METHOD是GET其他经常可能出现的METHOD还有POST和HEAD此外还有不少可能出现的合法METHOD但主要就是这三种
RESOURCE是指浏览者向服务器请求的文档或URL在这个例子中浏览者请求的是/即网站的主页或根大多数情况下/指向DocumentRoot目录的l文档但根据服务器配置的不同它也可能指向其他文件
PROTOCOL通常是HTTP后面再加上版本号版本号或者是或者是但出现的时候比较多我们知道HTTP协议是Web得以工作的基础HTTP/是HTTP协议的早期版本而是最近的版本当前大多数Web客户程序仍使用版本的HTTP协议
日志记录的第六项信息是状态代码它告诉我们请求是否成功或者遇到了什么样的错误大多数时候这项值是它表示服务器已经成功地响应浏览器的请求一切正常此处不准备给出状态代码的完整清单以及解释它们的含义请参考相关资料了解这方面的信息但一般地说以开头的状态代码表示成功以开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置以开头的状态代码表示客户端存在某种错误以开头的状态代码表示服务器遇到了某个错误
日志记录的第七项表示发送给客户端的总字节数它告诉我们传输是否被打断(即该数值是否和文件的大小相同)把日志记录中的这些值加起来就可以得知服务器在一天一周或者一月内发送了多少数据
二配置访问日志
访问日志文件的位置实际上是一个配置选项如果我们检查配置文件可以看到该文件中有如下这行内容
CustomLog /usr/local/apache/logs/access_log common
注意对于版本较早的Apache服务器这行内容可能略有不同它使用的可能不是CustomLog指令而是TransferLog指令如果你的服务器属于这类情况建议你尽可能地早日升级服务器
CustomLog指令指定了保存日志文件的具体位置以及日志的格式至于如何定制日志文件的格式以及内容我们将在这个《Apache日志》系列文章的后面几篇讨论上面这行指令指定的是common日志格式自从有了Web服务器开始common格式就是它的标准格式由此我们也可以理解虽然几乎不再有任何客户程序向服务器提供用户的标识信息但访问日志却还保留着第二项内容
CustomLog指令中的路径是日志文件的路径注意由于日志文件是由HTTP用户打开的(用User指令指定)因此必须注意这个路径要有安全保证防止该文件被随意改写
《Apache日志》系列文章的后面几篇将继续介绍Apache错误日志定制日志的格式和内容如何将日志内容写入指定的程序而不是文件如何从日志文件获得一些非常有用的统计信息等等
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。