afox123 发表于 2015-8-2 07:09:06

Apache 日志管理,获取客户端端口号

  日志管理分类
  日志文件是用户管理和监控 Apache 安全的非常好的第一手资料,它清晰地记录了客户端访问 Apache 服务器资源的每一条记录,以及在访问中出现的错误信息,可以这样说,Apache 可以记录 Web 访问中感兴趣的几乎所有信息。
  当运行 Apache 服务器时生成 4 个标准的日志文件:


[*]错误日志
[*]访问日志
[*]传输日志
[*]Cookie 日志
  其中比较常见的是访问日志(access_log)和错误日志(error_log),其中传输日志和 cookie 日志被 Apache 2.0 以上的版本丢弃,所以本文不讨论这两种日志。当然,如果使用 SSL 服务的话,还可能存在 ssl_access_log、ssl_error_log 和 ssl_request_log 三种日志文件。
  另外,值得注意的是:上述几种日志文件如果长度过大,还可能生成注入 access_log.1,error_log.2 等的额外文件,其格式与含义与上述几种文件相同,只不过系统自动为其进行命名而已。
  日志相关的配置指令
  Apache 中提供如下 4 条与日志相关的配置指令:


[*]ErrorLog 指令:用于指定错误日志的存放路径,使用语法为:ErrorLog 文件名;
[*]LogLevel:用于指定错误日志的错误登记,使用语法为:Loglevel 等级;
[*]LogFormat:用于为日志记录格式命名,使用语法为:LogFormat 记录格式说明字符串 格式称谓;
[*]CustomLog:用于指定访问日志存放路径和记录格式,指定访问日志由指定的程序生成并指定日志的记录格式,使用语法为:CustomLog 日志文件名 格式称谓。
  在上述几个文件当中,除了 error_log 和 ssl_error_log 之外,所有日志文件以由 CustomLog 和 LogFormat 指令指定的格式生成。这些指令在 httpd.conf 文件中出现。使用 LogFormat 指令可以定义新的日志文件格式:





LogFormat “%h%l%u%t\ “%> %s %b “common




  
  假定使用的是 common 日志格式或者 combined 日志格式,这两种格式都在默认的配置文件中定义。表 1 列出了 LogFormat 语句可以使用的变量:
  表 1. LogFormat 语句的变量



变 量含 义

%b
发送字节,不包括 HTTP 标题


%f
文件名


%{VARIABLE}e
环境变量 VARIABLE 的内容


%h
远程主机


%a
远程 IP 地址


%{HEADER}i
HEADER 内容;发送到服务器的请求的标题行


%l
远程登录名(如果提供该值,则从 identd 获得)


%{NOTE}n
来自另一个模块的 NOTE 通知的内容


%{HEADER}o
HEADER 的内容,回复中的标题行


%p
服务器服务于请求的规范端口


%P
服务于请求的子进程的 ID


%r
请求的第一行


%s
状态。对于内部重定向的请求,该状态为初始请求—最后是 %>s


%t
时间,格式为 common 日志格式中的时间格式


%{format}t
时间,格式由 format 给出。可以是 strftime(3)格式


%T
服务请求花费的时间,以秒计


%u
来自 auth 的远程用户;如果返回的状态(%s)为 401 则可能是假的


%U
请求的 URL 路径


%v
服务于该请求的服务器的规范 ServerName


  
  在每个变量中,可以在前面设置一个条件,决定是否显示该变量。如果不显示,则显示 -。这些条件是数值返回值列表的形式。另外,还可以使用 CustomLog 指令指定日志文件的位置和格式。如果没有指定日志文件的绝对路径,则日志文件的位置假定为相对于 ServerRoot。下面是 httpd.conf 文件中指定日志文件的语句:





//
// The location and format of the access logfile(Common Logfile Format).
// If you do not define any access logfiles within a
// container, they will be logged here.Contrariwise, if you *do*
// define per- access logfiles, transactions will be
// logged therein and *not* in this file.
//
CustomLog logs/access_log common
ErrorLog logs/error_log




  
  日志记录等级和分类
  一般说来,Apache 中的错误日志记录等级有如表 2 所示的八类:
  表 2. 错误日志记录的等级



紧急性等级解释

1
Emerg
出现紧急状况使得系统不可用


2
Alert
需要立即引起注意的状况


3
Crit
危险情况的警告


4
Error
除上述 3 种情况之外的其他错误


5
Warn
警告信息


6
Notice
需要引起注意的情况,不如第 4 和第 5 类重要


7
Info
需要报告的一般消息


8
Debug
运行于 debug 模式的程序产生的消息


  
  另外,在 Apache 中,将访问日志分为如下 4 类:


[*]普通日志格式(common log format,CLF):大多数日志分析软件都支持这种格式,其在 LogFormat 指定中定义的昵称为 common;
[*]参考日志格式(referer log format):记录客户访问站点的用户身份,其在 LogFormat 指定中定义的昵称为 referer;
[*]代理日志格式(agent log format):记录请求的用户代理,其在 LogFormat 指定中定义的昵称为 agent;
[*]综合日志格式(combined log format):即结合上述三种格式的日志信息,其在 LogFormat 指定中定义的昵称为 combined。
  在实际的使用过程中,由于综合日志格式有效地结合了其他 3 种日志格式和信息,所以在配制访问日志时,可以有两种方式:
  (1)分别使用 3 个文件进行分别记录,相应配置示例如下:





LogFormat “%h %l %u %t \ “%r\” %>s %b” common
LogFormat “%{Referer}i->%U” referer
LogFormat “%{Apache User-agent}i” agent
CustomLog logs/access_log common
CustomLog logs/referer_log referer
CustomLog logs/agent_log agent




  
  (2)使用一个综合文件进行记录,相应配置示例如下:





LogFormat “%h %l %u %t \ “%r\” %>s %b \”%{Referer}i\” \
“%{Apache User-Agent}i\””combined
CustomLog logs/access_log combined



  这几天比较热门的记录访客的端口号,在日志文件格式中添加获取客户端端口号的环境变量: %{REMOTE_PORT}e
  
  环境器环境变量在mod_rewrite模块有如下的说明
页: [1]
查看完整版本: Apache 日志管理,获取客户端端口号