Apache提供了广泛记录运行时各方面信息的工具。比如有条件性的记录日志,日志循环,确定IP地址等时普遍会遇到的问题。还讲解很多用于检测您的Apache服务器状态以及分析其日志的捆绑的第三方模块和工具。
默认的Apache日志文件
Apache提供很多检测和日志工具来追踪服务器的正确运行。默认的Apache配置提供两个日志文件,放置在安装目录下的日志目录里面。
access_log 这个文件(在windows下对应access.log文件)包含了服务器已经处理过的请求的信息,比如说请求的URL,客户端的IP地址,请求是否被成功完成等。error_log 这个文件(在windows下对应error.log文件)包含了与错误情况相关的信息,以及服务器生命周期中不同的大事件。
创建日志格式
|
LogFormat "%h %l %u %t \"%r\" %>s %b" \"%{Referer}i\" \"%{User-agent}i\"" combined |
|
+0500] "GET /example.png HTTP/1.0" 200 1234 |
|
+0500] "GET /example.png HTTP/1.0" 200 1234 http://www.example.com/index.html "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7)" |
# %h: 客户端(例如,浏览器)向服务器发出连接请求时自己的当时的IP地址或域名(需开启HostNameLookups)。
# %u: 使用HTTP方式认证用户时,记录下的用户的编号。
# %t: 服务器接受到连接请求的时间。
# %r: 客户端发出的原始连接请求中的文本信息,包含所使用的HTTP方法。
# %>s: 服务器应答浏览器后的返回状态代码,200表示请求成功。.
# %b: 服务器应答浏览器发出的单个请求的回传对象的内容大小(字节为单位),不统计数据包头部字节。
整合日志格式在普通日志格式的基础上扩展出了两个附加的域。定义为:
# %{Referer}i: 连接请求数据包包头,包含指向当前页面的文档关联信息。
# %{User-agent}i: 用户代理连接请求数据包包头,包含客户浏览器的信息。
创建一个自定义日志文件
|
TransferLog logs/sample.log |
重导向日志到一个外部的程序
|
86400" |
当有一个外部程序被使用,它将作为启动httpd的用户被运行。如果服务器是被超级管理员所启动,它就会是超级管理员,完全确保这个程序是安全的。并且,当进入一个非Unix平台上的一个文件路径时,需要小心确保只有正斜杠被使用,即使这个平台可能是允许使用反斜杠的。总的来说,在整个配置文件中总是使用正斜杠是个好主意。
有条件的日志请求
|
CustomLog logs/access_log common env=!image SetEnvIf Remote_Addr 192\.168\.200\.5 specialmachine CustomLog logs/special_access_log common env=specialmachine |
谁在连接你的网站
|
LogFormat "%{Referer}i -> %U" referer CustomLog logs/referer.log referer env=!internalreferral |
利用模块参数(mod_status)来监视Apache服务器
|
SetHandler server-status Order Deny,Allow Deny from all Allow from 192.168.0 </location> |
通过SNMP协议来监视Apache服务器
SNMP 是简单网管协议,支持SNMP的服务器或网络设备可以被OpenView、Tivoli等网管软件统一管理,目前有很多开源的SNMP模块可以加装到 Apache网站服务器之上,对于Apache 1.3版来讲,mod_snmp模块可以支持第1版和2版的SNMP协议;对于Apache 2版来讲,mod_apache_snmp模块可以编译成Apache的DSO直接支持第1版、第2版和第3版的SNMP协议。有了SNMP模块,外部网管软件就可以对Apache网站服务器的各种实时性能参数进行查看了,这些参数包含“服务器连续在线时间、平均负载、一段时间内的错误数、提供网站服务的字节数和连接请求数”。SNMP模块遇到突然激增的并发连接请求数时会向控制台报警。管理SNMP资源的开源工具软件有:“net-snmp, OpenNMS,Najios等”。
用开源工具分析日志
有很多开源和商业版的工具软件可以对产生的Apache日志文件做分析和处理,通常的步骤是:
|
2.分析日志文件内容。 3.生成包含不同类别内容的统计信息网页输出。 |
实时监视日志
使用apachetop命令行工具来显示apache服务器当前的运行状态,类似于Unix等系统下的top命令工具。对流量比较低的Unix- Apache网站也可以使用tail命令来记录实时日志信息,tail -f /logfile/。通过扫描错误日志文件中的记录,分析出恶意连接请求,常用的错误日志文件扫描工具有Logscan和ScanErrLog,可以分别从http://www.garand.net/security.php和http://www.librelogiciel.com/software/去下载这些工具。
将连接请求日志记录到数据库
Apache 本身没有将记录转发到数据库的功能,必须要第三方脚本和模块来支持。这里列举几个:mod_log_sql模块允许将连接请求直接记入MySQL数据库,然后用Apache LogView SQL工具来参看库中的记录;pglogd工具可以记录日志到PostgreSQL数据库中。
将日志文件转存和归档
|
86400" common |
IP地址和域名之间对应处理
将HostNameLookups 设置成on,那么日志记录中将显示来访者所在的域名,设置成on可降低服务器性能。为了解决这一问题,Apache提供了一个事后分析IP地址域名信息的工具logresolve,例如$ logresolve < access_log > resolved_log
如果用代理服务器或网关设备来完成的网站访问,Apache服务器将只能记录到代理服务器和网关的IP地址和域名。
如何自动启动Apache服务器
|
if [ 'ps -waux | grep -v grep | grep -c httpd' -lt 1 ]; then apachectl restart; fi |
日志文件的分割和合并
如果用户的网站环境是用服务器集群来搭建的,通常需要将所有服务器上的日志做合并成单个文件后,才可以进行分析和处理。相似的道理,如果在单台服务器上运行多个虚拟网站,则需要将单个日志文件分割成多个部分供不同的虚拟网站用户去分析。在Apache服务器源码的support/文件夹下可以找到相应的脚本工具split-logfile等。在http://www.coker.com.au/logtools/网页可以找到一些其他的日志工具。比如vlogger工具就可以替代cronologs来对单个服务器上的虚拟网站日志进行分别处理,该工具在http://n0rp.chemlab.org/vlogger/下载。
为虚拟网站保存独立的日志文件
|
ServerName vhost1.example.com CustomLog logs/vhost1.example.com_log combined ErrorLog logs/vhost2.example.com_log ....... </virtual host> |
|
CustomLog logs/access_log common_virtualhost |
日志文件中常见的条目
缺少favicon.ico文件,该文件可在浏览器的标题栏显示网站的个性图案;
缺少robots.txt文件,利于站点复制工具和搜索引擎使用;
覆写httpd.pid文件,网站服务器不正常退出后遗留的PID记录文件;
陌生的长记录条,
|
"GET /scripts/..%252f../winnt/system32/cmd.exe?/ c+dir HTTP/1.0..." "GET /default.ida?NNNNNNN NNNNNNNNNNNNNNNNNN ..." |
日志文件中的一些条目经常反映了那些自动探测网站服务器漏洞的动作,多数来源于针对IIS网站服务器的蠕虫和恶意程序。有时候也会发现一些针对Apache的漏洞,所以为了保证Apache的正常运行,用户应保持经常更新Apache软件。
![nixsky[www.nixsky.com]](/templets/images/toplogo.gif)

