Apache
Windows
日志文件名称路径、访问日志设置
- 当我们安装并启动Apache后,Apache会自动生成两个日志文件,这两个日志文件分别是访问日志access.log和错误日志error.log。
- Apache配置文件在httpd.conf中,配置Apache访问日志格式。日志记录格式主要有两种,普通型(common)和复合型(combined),安装时默认使用普通型(common)类型日志记录访问信息。
2.访问日志格式详解
举一个访问日志access.log中的一个标准记录:
192.168.35.132 - - [01/Apr/2020:12:35:13 +0800] "GET / HTTP/1.1" 200 49
日志字段所代表的内容如下:
1.远程主机IP:表明访问网站的是谁 ——192.168.35.132
2.空白(E-mail):为了避免用户的邮箱被垃圾邮件骚扰,第二项就用"-"取代了
3.空白(登录名):用于记录浏览者进行身份验证时提供的名字。
4.请求时间:用方括号包围,而且采用"公用日志格式"或者"标准英文格式"。 时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
5.方法+资源+协议:服务器收到的是一个什么样的请求。该项信息的典型格式是"METHOD RESOURCE PROTOCOL",即"方法 资源 协议"。
METHOD: GET、POST、HEAD、……
RESOURCE: /、index.html、/default/index.php、……(请求的文件)
PROTOCOL: HTTP+版本号
6.状态代码:请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。
7.发送字节数:表示发送给客户端的总字节数——49。它告诉我们传输是否被打断(该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
这里第6条说了,大多数时候这项值是200,那我们在列举一下别的值含义:
"100" : Continue 客户必须继续发出请求
"101" : witching Protocols 客户要求服务器根据请求转换HTTP协议版本
"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版本
3.错误格式详解
错误日志是最重要的日志文件,其文件名和位置取决于ErrorLog指令。Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误,由于这里经常包含了出错细节以及如何解决,如果服务器启动或运行中有问题,首先就应该查看这个错误日志。
错误日志的格式相对灵活,并可以附加文字描述。
错误日志中会包含类似上述例子的多种类型的信息。此外,CGI脚本中任何输出到stderr(标准错误)的信息会作为调试信息原封不动地记录到错误日志中。
用户可以增加或删除错误日志的项。但是对某些特殊请求,在访问日志(access.log)中也会有相应的记录,访问日志也可以定制,所以可以从访问日志中得到错误事件的更多信息。
在测试中,对任何问题持续监视错误日志是非常有用的。
下面是拿我自己的举个例子:
[Sun Apr 19 03:20:32.155938 2020] [autoindex:error] [pid 2493] [client 219.140.116.105:47164] AH01276: Cannot serve directory /export/home/live/ap/htdocs/test: No matching DirectoryIndex (index.html,index.php) found, and server-generated directory index forbidden by Options directive
错误日志格式说明:
1.错误发生的日期和时间
2.错误的级别或严重性
3.导致错误的IP地址
4.错误信息本身或者说是原因。
二、Linux——Centos 7
Linux和Windows日志区别只在于它们的位置不一样,其他的通过观察和Windows是一样的。
所以可以直接参考上面描述的内容。
日志位置
默认在/var/log/httpd/文件夹下,有两个日志文件分别是:访问日志access_log和错误日志error_log
Nginx
一、Windows
1.日志位置
我们可以在配置文件nginx.conf里查看和更改日志的存放位置。
nginx.conf的内容分为以下几段:
main配置段:全局配置段。其中main配置段中可能包含event配置段;
event{}:定义event模型工作特性;
http{}:定义http协议相关配置。
日志记录格式:
$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 :记录客户端浏览器的相关信息;
日志分析
下面是一段日志:
192.168.35.132 - - [18/Apr/2020:17:59:09 +0800] "GET /index.html HTTP/1.1" 200 718 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 chrome71.0" "-"
1.192.168.35.132:客户端(用户)的IP地址
2.- -:客户端的用户名,匿名访问为-
3.[18/Apr/2020:17:59:09 +0800]:访问时间
4."GET /index.html HTTP/1.1":请求方式以及请求的资源URI地址
5.200:状态码
6.718:请求的页面大小
7."-":来源页面,即从哪个页面转到本页
8."Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Chrome/71.0":浏览器信息,操作系统信息
9."-":获取到IP,获取不到则显示为 -
二、Linux
日志位置
访问日志access.log和错误日志error.log在/var/log/nginx目录下。
配置文件nginx.conf在/etc/nginx目录下。
日志分析
跟Windows是一样的,不再多说。
IIS
日志地址
打开IIS管理器,右击你要查看的网站,点击活动日志格式旁边的属性就可以设置日志中要记录的字段。
我们也可以知道我们日志文件目录的位置和日志文件名。
日志分析
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2020-04-18 12:16:25
#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
- date: 发出请求时候的日期。
- time: 发出请求时候的时间。注意:默认情况下这个时间是格林威治时间,比我们的北京时间晚8个小时。
- s-sitename:服务名,记录当记录事件运行于客户端上的Internet服务的名称和实例的编号。
- s-ip:服务器的IP地址。
- cs-method:请求中使用的HTTP方法,GET/POST。
- cs-uri-stem:URI资源,记录做为操作目标的统一资源标识符(URI),即访问的页面文件。
- cs-uri-query:URI查询,记录客户尝试执行的查询,只有动态页面需要URI查询,如果有则记录,没有则以连接符-表示。即访问网址的附带参数。
- s-port:为服务配置的服务器端口号。
- cs-username:用户名,访问服务器的已经过验证用户的名称,匿名用户用连接符-表示。
- c-ip:客户端IP地址。
- cs(User-Agent):用户代理,客户端浏览器、操作系统等情况。
- sc-status:协议状态,记录HTTP状态代码,200表示成功,403表示没有权限,404表示找不到该页面。
- sc-substatus:协议子状态,记录HTTP子状态代码
- sc-win32-status:Win32状态,记录Windows状态代码。
- sc-bytes:服务器发送的字节数。
- cs-bytes:服务器接受的字节数。
- time-taken:记录操作所花费的时间,单位是毫秒。
然后对数据进行筛选,去掉数据相同的列。主要观察用户ip ,用户代理,用户访问的页面以及http状态码。
通过用户代理的观察,可以知道是否有蜘蛛来过,蜘蛛看过那些页面,返回状态码是什么。如果返回404,那么马上对该页面进行检查是否存在或者是否设置了访问权限。也可以看是否有同一IP恶意浏览你网站。