apache服务器:监视并记录Apache网站WebSite服务器的运行

  在Apache下日志介绍

  Apache提供了广泛记录运行时各方面信息工具比如有条件性记录日志日志循环确定IP地址等时普遍会遇到问题还讲解很多用于检测您Apache服务器状态以及分析其日志捆绑第 3方模块和工具

  默认Apache日志文件

  Apache提供很多检测和日志工具来追踪服务器正确运行默认Apache配置提供两个日志文件放置在安装目录下日志目录里面

  access_log 这个文件(在windows下对应access.log文件)包含了服务器已经处理过请求信息比如说请求URL客户端IP地址请求是否被成功完成等error_log 这个文件(在windows下对应error.log文件)包含了和情况相关信息以及服务器生命周期中区别大事件

  创建日志格式LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%h %l %u %t "%r" %>s %b"
  "%{Referer}i" "%{User-agent}i"" combined
LogFormat 指令允许你告诉Apache你想要记录请求哪些方面而你仍需附加指令来告诉Apache在哪里记录那些信息这在下章中将会介绍下面例子显示了两种最受欢迎格式配置:普通日志格式和整合日志格式当Apache收到个请求他将会用相应请求属性来替代以%为前缀个域如果您正在使用普通日志格式日志文件里项输入看起来都将是这样:192.168.200.4 - someuser [12/Jun/2005:08:33:34
  +0500] "GET /example.png HTTP/1.0" 200 1234
如果您正在使用整合日志格式日志文件里项输入看起来则都将是这样:192.168.200.4 - someuser [12/Jun/2005:08:33:34
  +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: 用户代理连接请求数据包包头包含客户浏览器信息

  创建个自定义日志文件

CustomLog logs/access_log common
TransferLog logs/sample.log
您可能会想创建Apache自带以外日志文件下面例子将运用CustomLog来创建个新日志文件并保存由个的前定义好日志格式即前章提到common所定义信息您还可以用格式本身定义来替换昵称个附加更为简单指令是Transferlog它只接受最后个 LogFormat指令提供定义

  重导向日志到个外部

TransferLog "|bin/rotatelogs /var/logs/apachelog
86400"
你也可以用CustomLog或TransferLog将日志输出重导向(输出)到个外部而不是个文件要做到这首先您需要以输出 "|"开头跟着是接收日志标准输入信息的路经本例运用Apache自带rotatelogs在稍后章节中会对其有所介绍

  当有个外部被使用它将作为启动httpd用户被运行如果服务器是被超级管理员所启动它就会是超级管理员完全确保这个是安全并且当进入个非Unix平台上个文件路径时需要小心确保只有正斜杠被使用即使这个平台可能是允许使用反斜杠来说在整个配置文件中总是使用正斜杠是个好主意

  有条件日志请求

SetEnvIf Request_URI "(.g|.jpg)$" image
CustomLog logs/access_log common env=!image
SetEnvIf Remote_Addr 192.168.200.5 specialmachine
CustomLog logs/special_access_log common env=specialmachine
你可以根据可变环境决定是否记录个请求这种可变可以根据许多参数比如客户端IP地址或请求中某个头部存在事先设置好正如本例中所显示 CustomLog指令可以将可变环境作为第 3个参数来接受如果存在可变环境它就将被记录否则就不会如果这个可变环境被个"!"开头否定那么不存在可变环境将会被记录本例将告诉您如何避免在日志里以GIF和JPEG格式记录图像及如何从个特定IP地址记录请求道个单独日志文件个例子请参加下

  谁在连接你网站WebSite

SetEnvIfNoCase Referer www.example.com ernalreferral
LogFormat "%{Referer}i -> %U" referer
CustomLog logs/referer.log referer env=!ernalreferral
可以通过记录Referer值来检测哪些人连接了你网站WebSiteReferer变量位于用户发送连接请求数据包头部数据包头中还包含了用户访问网站WebSiteURL地址通过这种思路方法可以记录下绝大部分网站WebSite访问者也可以把来自特定网站WebSite(www.example.com)地址段来访者排除出日志记录文件

  利用模块参数(mod_status)来监视Apache服务器

<location /server-status>
 SetHandler server-status
 Order Deny,Allow
 Deny from all
 Allow from 192.168.0
</location>
Apache 服务器中可以使用功能模块很多有服务器内置也有外挂这些模块工作状态和性能就是通过mod_status参数来记录记录内容有“哪些模块参和了网站WebSite应答服务、哪些模块处于空闲状态、服务器开启/关闭时间正在处理连接请求数和访问者数量(需要指定ExtendedStatus记号) -该模块记录对高负荷网站WebSite服务器性能有很大影响”例子中记录模块状态统计结果可以用浏览器访问http://www.example.com/server-status页面来查看

  通过SNMP协议来监视Apache服务器

  SNMP 是简单网管协议支持SNMP服务器或网络设备可以被OpenView、Tivoli等网管软件Software统管理目前有很多开源SNMP模块可以加装到 Apache网站WebSite服务器的上对于Apache 1.3版来讲mod_snmp模块可以支持第1版和2版SNMP协议;对于Apache 2版来讲mod_apache_snmp模块可以编译成ApacheDSO直接支持第1版、第2版和第3版SNMP协议有了SNMP模块外部网管软件Software就可以对Apache网站WebSite服务器各种实时性能参数进行查看了这些参数包含“服务器连续在线时间、平均负载、段时间内数、提供网站WebSite服务字节数和连接请求数”SNMP模块遇到突然激增并发连接请求数时会向控制台报警管理SNMP资源开源工具软件Software有:“net-snmp, OpenNMS,Najios等”

  用开源工具分析日志

  有很多开源和商业版工具软件Software可以对产生Apache日志文件做分析和处理通常步骤是:

1.选取个日志文件
2.分析日志文件内容
3.生成包含区别类别内容统计信息网页输出
Webalizer(http://www.mrunix.net/webalizer/)和AWStats(http://awstats.sf.net)是较为流行日志文件分析工具;还有些工具可以记录来访者具体访问路线比如Vistors和Pathalizer工具可以分别从http://www.hping.org/visitors/和http://pathalizer.bzzt.net/下载

  实时监视日志

  使用apachetop命令行工具来显示apache服务器当前运行状态类似于Unix等系统下top命令工具对流量比较低Unix- Apache网站WebSite也可以使用tail命令来记录实时日志信息tail -f /logfile/通过扫描日志文件中记录分析出恶意连接请求常用日志文件扫描工具有Logscan和ScanErrLog可以分别从http://www.garand.net/security.php和http://www.librelogiciel.com/software/去下载这些工具

  将连接请求日志记录到数据库

  Apache 本身没有将记录转发到数据库功能必须要第 3方脚本和模块来支持这里列举几个:mod_log_sql模块允许将连接请求直接记入MySQL数据库然后用Apache LogView SQL工具来参看库中记录;pglogd工具可以记录日志到PostgreSQL数据库中

  将日志文件转存和归档

CustomLog "|bin/rotatelogs /var/logs/apachelog
86400" common
如果网站WebSite流量较高日志文件很容易就会变得很大需要进行转存和归档处理转存日志文件时需要压缩和保存在线进行这项工作可以使用Apache提供rotatelogs来完成类似工具还可以在http://cronolog.org/上找到例子中用rotatelogs工具将每天日志做了转存和归档处理天共有86400秒查看Apache帮助文件可以了解更多rotatelogs工具参数注意如果rotatelogs工具所在目录名含有空格则需要用跳转符号来指定

  IP地址和域名的间对应处理

  将HostNameLookups 设置成on那么日志记录中将显示来访者所在域名设置成on可降低服务器性能为了解决这问题Apache提供了个事后分析IP地址域名信息工具logresolve例如$ logresolve < access_log > resolved_log

  如果用代理服务器或网关设备来完成网站WebSite访问Apache服务器将只能记录到代理服务器和网关IP地址和域名

  如何自动启动Apache服务器

#!/bin/bash
[ 'ps -waux | grep -v grep | grep -c httpd' -lt 1
]; then apachectl restart; fi
在windows 平台下以服务方式启动Aapche遇到意外退出后可以由服务管理器自动自动Unix平台下需要借助watchdog脚本来实现自动启动功能 watchdog专门用来监视其他运行状态发现被监视退出或停止后可以重新将他们启动例子中简单linux脚本将监视系统进程表如果网站WebSite服务器httpd进程消失则负责将它重新启动使用该脚本条件有2个首先保证该脚本文件具备可执行权限第 2必须将该文件设置到 cron文件中使的可以在预定时间间隔内运行如果使用Solaris系统需要将例子中ps -waux改成ps -ef用户可以访问http://perl.apache.org/docs/general/control/control.html网页发现更多高级watchdog类脚本工具大多数linux发行版自带些用于Apache脚本工具

  日志文件分割和合并

  如果用户网站WebSite环境是用服务器集群来搭建通常需要将所有服务器上日志做合并成单个文件后才可以进行分析和处理相似道理如果在单台服务器上运行多个虚拟网站WebSite则需要将单个日志文件分割成多个部分供区别虚拟网站WebSite用户去分析在Apache服务器源码support/文件夹下可以找到相应脚本工具split-logfile等在http://www.coker.com.au/logtools/网页可以找到些其他日志工具比如vlogger工具就可以替代cronologs来对单个服务器上虚拟网站WebSite日志进行分别处理该工具在http://n0rp.chemlab.org/vlogger/下载

  为虚拟网站WebSite保存独立日志文件

<virtualhost>
 ServerName vhost1.example.com
 CustomLog logs/vhost1.example.com_log combined
 ErrorLog logs/vhost2.example.com_log
 .......
</virtual host>
使用CustomLog标志段在Apache配置文件<Virtualhost>区块内实现虚拟网站WebSite日志文件独立处理

LogFormat "%v %h %l %u %t "%r" %>s %b" common_virtualhost
CustomLog logs/access_log common_virtualhost
在Apache全局配置中配置思路方法其中v%负责把提供服务虚拟网站WebSite记录下来对于配置了很多虚拟网站WebSite单台服务器来说这种配置不错如果不想记录虚拟服务器日志只需要在配置文件中加入"CustomLog /dev/null"就可以了



  日志文件中常见条目

  缺少favicon.ico文件该文件可在浏览器标题栏显示网站WebSite个性图案;

  缺少robots.txt文件利于站点复制工具和搜索引擎使用;

  覆写httpd.pid文件网站WebSite服务器不正常退出后遗留PID记录文件;

  陌生长记录条

"SEARCH /x90x02xb1x02xb1x02xb1x02 ..."
"GET /scripts/..%252f../winnt/system32/cmd.exe?/
 c+dir HTTP/1.0..."
"GET /default.ida?NNNNNNN NNNNNNNNNNNNNNNNNN ..."
类似记录条表示访问者请求了网站WebSite上根本没有cmd.exeroot.exe或dir等文件

  日志文件中些条目经常反映了那些自动探测网站WebSite服务器漏洞动作多数来源于针对IIS网站WebSite服务器蠕虫和恶意有时候也会发现些针对Apache漏洞所以为了保证Apache正常运行用户应保持经常更新Apache软件Software  原文链接:http://loveher.blog.51cto.com/blog/48504/6828



Tags:  apache服务器的功能 apacheweb服务器 apache服务器

延伸阅读

最新评论

发表评论