一、apache访问日志信息
当浏览器请求服务器时,如果在服务器上设置了访问日志,就会记录下用户的访问记录。
例如我访问本地apache所产生的一条默认的日志:
127.0.0.1 - - [03/Feb/2015:23:14:24 +0800] "GET / HTTP/1.1" 200 2
分为7个部分
1)第一项信息是远程主机的地址,即它表明访问网站的究竟是谁。(可以要求apache查出所有的主机名字,并在日志文件中用主机名字来替代IP地址,但这种做法会极大的影响服务器记录日志的速度,从而降低整个网站的效率,不值得推荐)。
然而,如果确实有必要让apache找出远程主机的名字,可以使用指令:
hostnameLookups on
如果HostNameLookups设置成double而不是on,日志记录程序将对它找到的主机名字进行反向查找,验证该主机名字确实指向了原来出现的IP地址。
2)上例日志记录的第二项是空白,用一个“-”占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的email地址或者其他唯一标识符。这个信息由identd返回,或者直接由浏览器返回。(为了避免用户的邮箱被垃圾邮件骚扰,第二项就用“-”取代了)。
3)日记记录的第三项也是空白。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息室不会空白的。但是,对于大多数网站来说,日志文件的大多数记录中这一项仍旧是空白的。
4)日志记录的第四项是请求的时间。这个信息用方括号包围,而且采用“公用日志格式”或者“标准英文格式”。因此,时间信息最后的“-0400”表示服务器所处时区位于UTC之前的4小时。
5)日志记录的第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器受到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”即“方法 资源 协议”(通常进行日志监控的时候,主要也是看这项内容)。
例子中METHOD是GET,还有POST、HEAD等其他类型,主要是这三种。
RESOURCE是指浏览者向服务器请求的文档或者URL。在这个例子中,浏览者请求的是“/”,即网站的根或者主页。
大多数情况下,“/”指向DocumentRoot目录的index.html文档,但根据服务器配置的不同也可能指向其他文件。
PROTOCOL通常是HTTP,然后再加上版本号。
6)日志的第六项信息室状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候这项是200,它表示服务器已经成功的响应浏览器的请求,一切正常。(以2开头的状态码表示成功,以3开头的状态码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误)。
7)日志记录的第七项表示发送客户端的总字节数。它告诉我们传输是否被打断(即该数值是否和文件的大小相同)
二、apache访问日志配置
在apache的配置文件httpd.conf中,有一行是这么配置的:
指定了日志的目录路径./logs/,指定了日志的格式,默认common。
common格式是通过:LogFormat "%h %l %u %t "%r" %>s %b" common定义的。
双引号里面的格式字符串代表特定的信息。
apache格式字符串及其含义:
【补充】"<"和">"修饰符可以用来指定对于已被内部重定向的请求是选择原始的请求还是选择最终的请求。默认情况下,%s, %U, %T, %D, %r 使用原始请求,而所有其他格式串则选择最终请求。例如,%>s可以用于记录请求的最终状态,而 %<u 则记录一个已经被内部重定向到非认证资源的请求的原始认证用户。
如果在“%”和变量之间放入了一个或者多个HTTP状态代码,则只有当请求返回的状态代码属于指定的状态代码之一时,变量所代表的内容才会被记录。
例如,如果要记录的是网站的所有无效链接,可以使用:
反之,如果要记录那些状态代码不等于指定值的请求,只需加入一个“!”符号即可:
自定义日志格式,例如:
定义了combine格式 其中"%{Referer}i" "%{User-Agent}i" 是发送到服务器的求情头和Referer链接。