做了几年PHP,老板、经理没说让我管过日志这东西。一般牵涉到日志运维这主要是运维的工作。但是这一章节主要是以拔高性质为主。分析日志的管理方式。PHP程序员不能光靠PHP成为高手,PHP不就if else那几样吗?光靠PHP是不行的。

说明该server(虚拟主机),它的访问日志的文件是  logs/host.access.log

remote_addr是远程地址。你去面试的时候经常会碰到一些问题:启动pid去获取来访者的远程ip信息,$remote_user [$time_local]远程的用户访问的时间,当然我访问的那一瞬间我的http头信息未必带了这个信息过去,没带过去那就没有空着。

请求分GET和POST,请求都是用GET来请求。remote_user远程用户,并没有用http头交互说我是谁的那个形式,就是405还有权限验证那个玩意。就是我remote_user为空,但是time_local记录下来了。你当时几点几分来访问,用什么样的请求头来访问的,或者说是请求形式来请求的,用的是GET方式来请求的,而且用的是HTTP1.1这个协议。Status是请求的状态,学过HTTP协议知道有:200(OK),304(Not Modified),404(Not Found),403(Forbidden)。刚才几次访问的状态是404,304和200全了。body_bytes_sent就是我给你的几个主体发送几个字节。有570个字节,168个字节,32个字节,0个字节和46个字节。http_referer,就是你上一个/上一次页面来自于哪里,上一个页面来自于哪里。为什么有时候我们登录别人的网站,尤其是统计类的网站,统计说,咱们这个会员、咱们这个用户登录都来自于哪里。它这个统计怎么知道咱们这个会员是从百度来的呢,是从360来的呢,是从搜狗来的呢,它是如何知道的呢?

这是因为你在百度上一搜,比如搜php培训,你一点某个词条,你当前停留在哪里?你当前停留在百度,你一点带了一个referer信息过去,所以咱们这个统计就知道你来自于哪里。百度,你从百度搜索过来的。以后咱们做文件的防盗链和图片的防盗链也是要靠referer信息。


user_agent,用户代理。你去请求的时候,浏览器帮我们发的请求,我们想读人家的网页,但是我们无法跑人家服务器上读人家的字节,0101这样去读取。我们得靠浏览器去帮忙。所以这个浏览器被称之为用户代理。一分析知道了,你是Mozilla/5.0 (Windows NT 6.1; WOW64),火狐浏览器,win 7机器,有时候见到签名那很炫,你来自于哪里哪里,什么欢迎你北京联通的用户。你使用的是火狐,就是从你referer头信息读取出来的。


x_forwarded_for。网易新闻的评论,来自朝鲜的网友说:,这个网友不是真的来自朝鲜(实际上朝鲜能不能上网还是个问题)。

163会拿最后一次的x-forwarded-for来做判断,一判断说哦,来自于朝鲜的用户。

以后你要想伪装自己的IP,你也可以用x_forwarded_for来伪装一下。但是有些机器不看你x_forwarded_for,就直接看你的remote_addr。这个时候主动权在服务器端,看它以哪一个为准了。


所以这就是日志的main格式。你要是看这个格式不爽,可以把main格式的变量自由组合,去掉几个也行。main格式只是一种拿着几个变量组合的一种形式而已。


刚才user_agent只说了一半,有时候一读你的日志发现不对劲,既不是火狐,也不是IE,也不是chrome,这个有可能是蜘蛛。蜘蛛爬到你的服务器上去了,你需要买一些bus消毒液和一些除蟑螂的药等等,把你的服务器彻底清理一下。网络上有一种机器叫做蜘蛛,其实就是搜索引擎的服务器。它们的服务器一天到晚没事就沿着网络上的链接到处走到处爬,把你的信息都给爬取出来。有一种协议叫做蜘蛛协议,有些人老是过来采集我的信息,你到底是谁,我把你封了。所以这个时候百度说:别封,我是百度蜘蛛。所以User-agent叫Baiduspider,谷歌叫Googlebot,MSN叫MSNBot。Disallow是不允许扫的地址。

/shifen/原来是百度竞价,怪不得不允许人家扫。

这个蜘蛛是要满足一定的协议的,这个协议不是强制的,只能靠道德去规范。淘宝三年前把百度的蜘蛛给屏蔽了,你在百度上搜淘宝它的链接信息就比较少。这个时候就不能去索引它的信息了。技术上耍赖肯定行,人家只是说不让你搜,你要硬搜别人也很难挡住,除非屏蔽你的IP地址。因为目前蜘蛛只是一个协议,所以有时候在自己的日志上看到Baiduspider,你就知道百度蜘蛛来光顾你了,说明你的网站质量还不错。


每个网站它访问的日志不一样啊,分开放是天经地义的,但是有的WEB服务器不支持。比如像lighttp它就不支持。

到底如何配置访问日志呢?

刚才我也没配置任何的访问日志,为神马logs下面还会有访问access.log。很简单,因为你系统一启动它默认就使的是main格式,而且是放在logs/access.log下面。那你要是自己配置了它就有自己独特的日志了。说了那么多其实一句话搞定,之前的都是铺垫。

软重启nginx服务出错

main格式被注释掉了,解开它的注释

然后刷多几次网站z.com的访问量

可以查看到网站z.com的访问日志了,都是来自于IP:192.168.118.1的访问。

有时候会发现网站的访问量急剧上升,心中一阵暗喜,但后来发现所有的访问量都来自于IP某某某某,这个时候你不要高兴。要不就是蜘蛛疯狂地爬你的网站,有时候蜘蛛疯狂地爬也能把一个网站爬崩溃的,蜘蛛很强大。还有一种情况就是来自于你的竞争对手的攻击,看你的网站很火,用两台机器不断地朝你的服务器/网站发送请求,就好比说这个人买了三部电话轮流拨你的手机,那你的手机疲于应付了,这不就是攻击你吗?要想分析谁攻击我,怎么防范,这个时候就得从日志着手,分析它的来源,以及它的请求的页面,看看是先把它的IP给封住,或者把它的请求、把特别敏感的页面给暂停啊等等。所以这就是关于它的日志的配置。


日志还牵涉到运维的工作,那这个日志哪里体现出运维了呢?如果我的网站访问量比较大,那有可能一个小时两个小时都积累很多了,一天下来这个日志得一个GB,一天一个GB的访问量一点不夸张。这个日志要是一直都存在一个文件里面,那肯定是:第一你后期不好处理日志,个个日志都十几个GB这么大你怎么处理啊。不好读啊,技术员一打开就卡死了。另外不好管理不好归档,希望每天的日志能按照日期备份,每天产生一个新日志,思路是:

再加上Linux的定时任务,那么同学们先把这个任务研究一下。下节课讲定时任务和日志切割。

04-nginx日志管理的更多相关文章

  1. Nginx教程(三) Nginx日志管理

    Nginx教程(三) Nginx日志管理 1 日志管理 1.1 Nginx日志描述 通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某 ...

  2. nginx之旅(第二篇):nginx日志管理、nginx防盗链、nginx虚拟主机

    一.nginx日志管理 Nginx访问日志主要有两个参数控制 1) log_format #用来定义记录日志的格式(可以定义多种日志格式,取不不同名字即可) log_format log_name s ...

  3. Nginx教程(三) Nginx日志管理 (转)

    Nginx教程(三) Nginx日志管理 1 日志管理 1.1 Nginx日志描述 通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某 ...

  4. nginx 日志管理

    日志管理 我们观察nginx的server段,可以看到如下类似信息 #access_log  logs/host.access.log  main; 这说明 该server, 它的访问日志的文件是  ...

  5. nginx 日志管理配置详解

    nginx的日志管理 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$statu ...

  6. Nginx日志管理

    1 日志管理 1.1 Nginx日志描述 通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某个服务或server的性能瓶颈等.因此,将 ...

  7. nginx日志管理与限速

    1.日志简介nginx日志主要有两种:访问日志和错误日志.访问日志主要记录客户端访问nginx的每一个请求,格式可以自定义:错误日志主要记录客户端访问nginx出错时的日志,格式不支持自定义.两种日志 ...

  8. Nginx日志管理(四)

    Nginx日志对于统计.系统服务排错很有用.Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志).通过访问日志我们可以得到用户的IP地址.浏览器的信息,请求的处 ...

  9. Nginx日志管理配置

    1.创建日志目录 nginx 的默认日志目录所在硬盘空间可能比较小,所以根据硬盘的空间状况创建日志目录 例如:mkdir /backup/nginx_logs 2.修改nginx配置文件 配置 ngi ...

  10. Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存

    Nginx地址重写 Nginx rewrite rewrite语法规则1).变量名可以使用 "=" 或 "!=" 运算符~ 区分大小写~* 不区分大小写^~ 禁 ...

随机推荐

  1. echarts.js:1136 Uncaught Error: Initialize failed: invalid dom.

    一:错误描述:echarts.js:1136 Uncaught Error: Initialize failed: invalid dom. 二:错误原因:echarts在用json数据请求时未调用 ...

  2. Linux下更改oracle客户端字符集和服务端字符集

    from:http://blog.csdn.net/chid/article/details/6166506 Linux 下更改 oracle 客户端字符集和服务端字符集 1.Linux 下更改 or ...

  3. Java实现三种常用的查找算法(顺序查查找,折半查找,二叉排序树查找)

    public class Search { public class BiTreeNode{ int m_nValue; BiTreeNode m_pLeft; BiTreeNode m_pRight ...

  4. 【LeetCode】汇总

    此贴为汇总贴 673. Number of Longest Increasing Subsequence 075. Sort Colors 009. Palindrome Number 008. St ...

  5. fn project 试用之后的几个问题的解答

    今天试用fnproject  之后自己有些思考,后面继续解决   1. 目前测试是强依赖 dockerhub 的,实际可能不是很方便 2. 如何与k8s .mesos.docker swarm  集成 ...

  6. 也谈TDD,以及三层架构、设计模式、ORM……没有免费的午餐,选择了,必付出代价

    想在园子里写点东西已经很久了,但一直没有落笔,忙着做 一起帮 的开发直播,还有些软文做推广,还要做奶爸带孩子,还要……好吧,我承认,真正的原因是: 太特么的难写了! 但再难写也要写啊,要等到“能写好了 ...

  7. window下TortoiseGit的安装和使用

    一.安装git for windows 首先下载git for windows客户端https://git-for-windows.github.io/安装过程没什么特别的,下载完安装包之后,按照提示 ...

  8. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...

  9. 1108 Finding Average

    题意:根据条件判定哪些数是合法的,哪些是不合法的.求其中合法的数的平均值. 思路:字符串处理函数,考虑到最后输出的时候需要控制格式,因此选用scanf()和printf().另外需要了解atof()函 ...

  10. 微信小程序之if操作

    .wxss控制样式 .price-agent{ font-size: 25rpx; color:#ababab; float: left; position: absolute; bottom: 0; ...