apache、nginx、iis的日志内容
目录
- Apache日志
- Nginx日志
- IIS日志
- HTTP协议状态码的含义
Apache日志详解
1、Apache日志文件名称及路径介绍
当我们安装并启动Apache后,Apache会自动生成两个日志文件,这两个日志文件分别是访问日志access_log(在Windows上是access.log)和错误日志error_log(在Windows上是error.log)。如果使用 SSL 服务的话,还可能存在 ssl_access_log和ssl_error_log和 ssl_request_log 三种日志文件。
日志文件的路径根据安装方式不同位置也是不一样的,一般都是在Apache安装目录的logs子目录中,日志文件路径可根据实际安装情况在Apache的配置文件中进行查找。也可以用ssh远程连接到服务器,然后输入下面的命令,可以动态显示错误日志后几行内容,方便进行排错。
tail -f /usr/local/apache/logs/error_log
2、Apache访问日志格式详解
访问日志access_log记录了所有对Web服务器的访问活动,下面是访问日志access_log中的一个标准记录
192.168.115.5 - - [20/Apr/2020:10:37:19 +0800] "GET / HTTP/1.1" 200 45
日志字段所代表的内容如下:
- 远程主机IP:表明访问网站的是谁
- 空白(E-mail):为了避免用户的邮箱被垃圾邮件骚扰,第二项就用“-”取代了
- 空白(登录名):用于记录浏览者进行身份验证时提供的名字。
- 请求时间:用方括号包围,而且采用“公用日志格式”或者“标准英文格式”。 时间信息最后的“+0800”表示服务器所处时区位于UTC之后的8小时。
- 方法+资源+协议:服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。
METHOD: GET、POST、HEAD、……
RESOURCE: /、index.html、/default/index.php、……(请求的文件)
PROTOCOL: HTTP+版本号
- 状态代码:请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。
- 发送字节数:表示发送给客户端的总字节数。它告诉我们传输是否被打断(该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
3、Apache错误日志格式详解
错误日志的文件名字是error_log(Windows平台是error.log)。错误日志的位置可以通过ErrorLog指令设置:ErrorLog logs/error.log , 除非文件位置用根“/”开头,否则这个文件位置是相对于ServerRoot目录的相对路径。
我们在日志文件中见到的内容分属两类:文档错误和CGI错误。但是,错误日志中偶尔也会出现配置错误,另外还有前面提到的服务器启动和关闭信息。
文档错误
文档错误和服务器应答中的400系列代码相对应,最常见的就是404错误——Document Not Found(文档没有找到)。除了404错误以外,用户身份验证错误也是一种常见的错误。
1.当用户不能打开服务器上的文档时,错误日志中出现的记录如下所示:
[Fri Mar 30 14:45:09 2018] [error] [client 192.168.115.120]
File does not exist: /usr/local/apache/bugletdocs/Img/south-korea.gif
错误日志格式说明:
- 错误发生的日期和时间
- 错误的级别或严重性。error级别处于warn级别和crit级别之间。404属于error错误级别,这个级别表示确实遇到了问题,但服务器还可以运行。
- 导致错误的IP地址。表示用户发出请求时所用的IP地址
- 错误信息本身。
2.由于用户身份验证问题而出现的错误记录如下所示:
[Fri Apr 20 15:32:10 2020] [error] [client 192.168.115.120] user rbowen@rcbowen.com : authentication failure for "/cgi-bin/hirecareers/company.cgi" : password mismatch
注意:由于文档错误是用户请求的直接结果,因此它们在访问日志中也会有相应的记录。
CGI错误
错误日志最主要的用途或许是诊断行为异常的CGI程序。为了进一步分析和处理方便,CGI程序输出到STDERR(Standard Error,标准错误设备)的所有内容都将直接进入错误日志。这意味着,任何编写良好的CGI程序,如果出现了问题,错误日志就会告诉我们有关问题的详细信息。
然而,把CGI程序错误输出到错误日志也有它的缺点,错误日志中将出现许多没有标准格式的内容,这使得用错误日志自动分析程序从中分析出有用的信息变得相当困难。
下面是一个例子,它是调试Perl CGI代码时,错误日志中出现的一个错误记录:
[Web Apr 20 15:32:10 2020] [error] [client 192.168.115.120] Premature end of script headers: /usr/local/apache/cgi-bin/HyperCalPro/announcement.cgi Global symbol "$rv" requires explicit package name at /usr/local/apache/cgi-bin/HyperCalPro/announcement.cgi line 81. Global symbol "�tails" requires explicit package name at /usr/local/apache/cgi-bin/HyperCalPro/announcement.cgi line 84. Global symbol "$Config" requires explicit package name at /usr/local/apache/cgi-bin/HyperCalPro/announcement.cgi line 133. Execution of /usr/local/apache/cgi-bin/HyperCalPro/announcement.cgi aborted due to compilation errors.
可以看到,CGI错误和前面的404错误格式相同,包含日期/时间、错误级别以及客户地址、错误信息。但这个错误信息有好几行,这往往会干扰一些错误日志分析软件的工作。
当打开网页时服务器却返回错误,比如“Internal Server Error”,决多大多数情况下,错误日志能够精确地指出CGI错误的所在以及如何修正这个错误。
Nginx日志
nginx的log日志分为access log 和 error log 。其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息;error log 则是记录服务器错误日志
一、错误日志的形式如下:
10.1.1.1 - - [22/Aug/2014:16:48:14 +0800] "POST /ajax/MbpRequest.do HTTP/1.1" 200 367 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; ARMM7K Build/JRO03H)" "119.189.56.175" 127.0.0.1:8080 0.022 0.022
从上面我们可以看出几部分信息:
- 客户端(用户)IP地址。如:上例中的 10.1.1.1 (内网负载均衡地址
- 访问时间。如:上例中的 [22/Aug/2014:16:48:19 +0800]
- 访问端口。如:上例中的 127.0.0.1:8080
- 响应时间。如:上例中的 0.022
- 请求时间。如:上例中的 0.022
- 用户地理位置代码(国家代码)。
- 请求的url地址(目标url地址)的host。如:上例中的 /….
- 请求方式(GET或者POST等)。如:上例中的 GET
- 请求url地址(去除host部分)。如:上例中的 /html/test.html
- 请求状态(状态码,200表示成功,404表示页面不存在,301表示永久重定向等,具体状态码可以在网上找相关文章,不再赘述)。如:上例中的 “200”
- 请求页面大小,默认为B(byte)。如:上例中的 2426
- 来源页面,即从哪个页面转到本页,专业名称叫做“referer”。如:上例中的 “http://a.com”
- 用户浏览器语言。如:上例中的 “es-ES,es;q=0.8”
- 用户浏览器其他信息,浏览器版本、浏览器类型等。如:上例中的 “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11”
二、access日志格式
nginx access日志的格式不是一成不变的,是可以自定义的。在nginx的nginx.conf配置文件找到:log_format 这里就是日志的格式。
配置access log日志的存储位置及文件,注意:access.log文件是可以按日期进行分割的,方便查看及处理
文件路径: /usr/local/nginx/log/access.log main;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' '$upstream_addr $upstream_response_time $request_time '; access_log logs/access.log main;12345
相关说明解释
- $remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
- $remote_user :用来记录客户端用户名称;
- $time_local : 用来记录访问时间与时区;
- $request : 用来记录请求的url与http协议;
- $status : 用来记录请求状态;成功是200,
- $body_bytes_s ent :记录发送给客户端文件主体内容大小;
- $http_referer :用来记录从那个页面链接访问过来的;
- $http_user_agent :记录客户端浏览器的相关信息;
IIS服务器日志
一、文件路径
Windows2003环境中,IIS日志默认存储路径:C:\WINDOWS\system32\LogFiles\。IIS日志文件存储格式:IIS日志是后缀名为log的文本文件。
在LogFiles文件夹下,存在多个IIS日志文件夹,每个IIS日志文件夹对应一个站点日志。
当然IIS日志文件存储位置也可以根据自己的实际情况,在IIS管理器中重新设定。要查看对应站点的IIS日志,只需要打开对应IIS日志文件夹找到相对应日志文件即可。也可借助IIS日志分析工具提供查看IIS日志的效率!
查找路径步骤:
打开信息服务(IIS)管理器,选中要查看的网站,在网站栏目那里右键单击,
选择“属性”,在弹出的窗口里面,点击网-栏目,查看日志记录中的“属性”
通过日志记录属性栏目,即可看到日志文件目录了
二、IIS日志文件参数格式:
2020-04-16 07:16:19 W3SVC680016 192.168.27.156 GET /index.asp - 8081 - 192.168.27.156 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30) 200 0 0 #Software: Microsoft Internet Information Services 6.0 #Version: 1.0 #Date: 2020-04-16 08:08:32 #Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status 2020-04-16 08:08:32 W3SVC680016 192.168.27.156 GET /index.asp - 8081 - 192.168.27.156 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30) 200 0 0 2020-04-16 08:08:32 W3SVC680016 192.168.27.156 GET /skins/default.css - 8081 - 192.168.27.156 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30) 200 0 0
#Software:服务器程序
#Version:版本
#Date :时间。
#Fields列为日志内容各字段列说明(不同服务器配置略有差异)
- date:日期
- time:时间,这两个字段组成资源请求详细时间,改时间通常为服务器端时间,注意,服务器采用时区可能与本地时区不一致。
- s-ip:服务器IP,资源处理服务器IP,通常是服务器本机IP。
- cs-method:请求方式,常见有GET与POST请求。
- cs-uri-stem:请求资源路径,网站根目录下的绝对路径位置。
- cs-uri-query:请求参数。
- s-port:使用端口,通常HTTP协议端口是80,HTTPS协议端口是443。
- cs-username:客户端用户名,通常为空或-。
- c-ip:客户端IP,判断唯一用户的重要依据,也是判断搜索蜘蛛爬虫真伪的依据。如何判断百度蜘蛛谷歌爬虫真伪?
- cs(User-Agent):用户代理字符串,用户使用的设备与浏览器类型,以及是否是爬虫蜘蛛程序,但此数据可模拟,需结合上面客户端IP才能准确判断是否是蜘蛛程序。
- sc-status:请求资源返回状态码,HTTP状态码,通常200为正常,301为跳转,404为资源不存在,500为服务器错误,详细网站HTTP状态码。
- sc-substatus:协议子状态,通常为0。
- sc-win32-status:Win32状态,通常为0。
- time-taken:花费时间,单位为毫秒。
- cs-version:协议版本。
- cs(Referer):请求来路,从哪个页面点击链接进入的该资源。通常如果存在该字段,可判断出搜索引擎与搜索词。
- sc-bytes:发送文件的大小,单位为字节。一般为所请求资源文件的大小。
- s-sitename:服务器站点名称,用于区分同一服务器下的多个站点。
- s-computername:服务器计算机名称。
- cs(Cookie):客户端请求Cookie。
- cs-host:客户端请求主机名。
HTTP协议状态码的含义
协议状态sc-status,是服务器日记扩展属性的一项。下面是各状态码含义列表:
"100" : Continue 客户必须继续发出请求
"101" : witching Protocols 客户要求服务器根据请求转换HTTP协议版本 200交易成功
"200" : OK 交易成功
"201" : Created 提示知道新文件的URL
"202" : Accepted 接受和处理、但处理未完成
"203" : Non-Authoritative Information 返回信息不确定或不完整
"204" : No Content 请求收到,但返回信息为空
"205" : Reset Content 服务器完成了请求,用户代理必须复位当前已经浏览过的文件
"206" : Partial Content 服务器已经完成了部分用户的GET请求
"300" : Multiple Choices 请求的资源可在多处得到
"301" : Moved Permanently 删除请求数据
"302" : Found 在其他地址发现了请求数据
"303" : See Other 建议客户访问其他URL或访问方式
"304" : Not Modified 客户端已经执行了GET,但文件未变化
"305" : Use Proxy 请求的资源必须从服务器指定的地址得到
"306" 前一版本HTTP中使用的代码,现行版本中不再使用
"307" : Temporary Redirect 申明请求的资源临时性删除
"400" : Bad Request 错误请求,如语法错误
"401" : Unauthorized 请求授权失败
"402" : Payment Required 保留有效ChargeTo头响应
"403" : Forbidden 请求不答应
"404" : Not Found 没有发现文件、查询或URl
"405" : Method Not Allowed 用户在Request-Line字段定义的方法不答应
"406" : Not Acceptable 根据用户发送的Accept拖,请求资源不可访问
"407" : Proxy Authentication Required 类似401,用户必须首先在代理服务器上得到授权
"408" : Request Time-out 客户端没有在用户指定的饿时间内完成请求
"409" : Conflict 对当前资源状态,请求不能完成
"410" : Gone 服务器上不再有此资源且无进一步的参考地址
"411" : Length Required 服务器拒绝用户定义的Content-Length属性请求
"412" : Precondition Failed 一个或多个请求头字段在当前请求中错误
"413" : Request Entity Too Large 请求的资源大于服务器答应的大小
"414" : Request-URI Too Large 请求的资源URL长于服务器答应的长度
"415" : Unsupported Media Type 请求资源不支持请求项目格式
"416" : Requested range not satisfiable 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
"417" : Expectation Failed 服务器不满足请求Expect头字段指定的期望值,假如是代理服务器,
"500" : Internal Server Error 服务器产生内部错误
"501" : Not Implemented 服务器不支持请求的函数
"502" : Bad Gateway 服务器暂时不可用,有时是为了防止发生系统过载
"503" : Service Unavailable 服务器过载或暂停维修
"504" : Gateway Time-out 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
"505" : HTTP Version not supported 服务器不支持或拒绝支请求头中指定的HTTP版本