好久不写技术文章了,越发的认为单纯的讲技术没啥意思。怪不得知乎越来越火。由于大家都喜欢看故事。不喜欢硬生生的技术文章。笔者今天就来就给大家讲故事:)

近期站点压力突然增大,把带宽都占满了,訪问网页发现非常的慢。打开页面的速度也奇慢大概要十几秒。

这样的情况还是第一次遇到。感觉不是被攻击了就是被攻击了!以下是站点的流量截图,一共1M的带宽在15点左右的时候瞬间慢了。然后就是持续的在峰值左右徘徊。

当时的想法是莫非站点的訪问量到达了一定程度要添加带宽了?可是通过看站点的统计数据,訪问的人数并没有明显的添加。这时自己更加坚定一定是被攻击了!

SSH连上server查看日志,竟然连SSH都特别慢。这让我更加坚定自己的推断,妈蛋绝对被攻击了。可是后台日志没有什么明显的错误信息。可是站点还是特别卡,一直持续了两个小时。一定是自己忽略了什么东西。既然是变慢。首先看CPU,内存啥的。于是查看了一下server的CPU和内存,没有啥问题,就是带宽变满了。

看来是大量的訪问造成的。重新认真的查看了日志,这次看的是tomcat的access日志,这下发现了问题。非常多页面在同一时间。或者说基本上在同一时间被訪问了多次。

假设说整个日志中有那么几条是这样的反复的倒还能够理解,可能是用户打不开页面触发了浏览器的刷新操作,可是大面积的都是这样的反复的訪问请求肯定就不正常了。

检查了一下自己的前台代码看看是否是自己的JS写错了,导致client同一时间发起多次请求。

检查了半天未果。

到这里问题算是找到了:多次请求导致带宽不够用。可是原因是什么呢?继续讲故事……

想到自己在配置站点的时候用到了Nginx做反向代理,突然就感觉会不会是Nginx的配置有什么问题呢?检查了一遍Nginx的配置,没发现啥问题。简单的转向再写错就不活了。莫非反复的请求本身不是server配置的问题?于是检查了Nginx的accesslog,令人吃惊的是在Nginx的log其中相同的是反复的訪问情况。

这就证明了不是我配置的问题,由于Access log足以证明在请求到达server之前就是多次请求。难道真的有人攻击?于是開始查找Nginx的log其中反复的IP。果然让我找到了一些反复的IP,这些IP都是72.21.217.*这个网段的。到这里我知道真相距离我越来越近了。去网上搜索的了一下这个网段的IP更是让我大吃一惊。

原来这些IP都是来自于亚马逊的爬虫,顿时恍然大悟,这一切都是由于前几天在网页上加上了亚马逊的广告。联系了亚马逊的客服人员,细致询问了亚马逊是否会索引广告所在的页面,得到的回答是肯定的。到此为止一切真相大白。

原来亚马逊为了提供更好的广告质量。索引了有广告的页面,造成的后果就是每当用户訪问一个带有广告的页面他的蜘蛛就会爬取这个页面,所以站点压力肯定增大喽。

知道了原因以下就是採取措施来避免了。改动Nginx配置非常轻松的屏蔽掉亚马逊的IP。

location /{
if ($http_x_forwarded_for ~ "72.21.217.*"){
return 503;
}
index index.jsp;
proxy_pass http://127.0.0.1:8080;
}

然后reload Nginx的配置,站点一切恢复如初。

总结:一切都有因果,不论什么事情绝不是凭空产生的,仅仅要追根溯源耐心寻找就一定能找出事实的真相。

nginx+tomcat反复请求的更多相关文章

  1. 通过Nginx+tomcat+redis实现反向代理 、负载均衡及session同步

    一直对于负载均衡比较陌生,今天尝试着去了解了一下,并做了一个小的实验,对于这个概念有一些认识,在此做一个简单的总结 什么是负载均衡 负载均衡,英文 名称为Load Balance,指由多台服务器以对称 ...

  2. 【转】Nginx+Tomcat+Memcached集群Session共享

    cookie是怎样工作的? 例 如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名 是“Michael J ...

  3. nginx之 nginx + tomcat + redis 负载均衡且session一致性

    说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...

  4. Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群

    Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选.由于Tomcat处理静态HTML的能力运不及Apache或者Nginx,所以Tomcat ...

  5. Nginx + Tomcat Windows下的负载均衡配置

     Nginx + Tomcat Windows下的负载均衡配置 一.为什么需要对Tomcat服务器做负载均衡?    Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果超过50 ...

  6. HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)

    这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...

  7. nginx + tomcat配置负载均衡

    目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...

  8. 搭建nginx+tomcat+Java的负载均衡环境

    转载  未测 供参考 另外这篇文章也不错.http://blog.csdn.net/wang379275614/article/details/47778201 一.简介: Tomcat在高并发环境下 ...

  9. Nginx+Tomcat构建动、静分离WEB架构

    一.简介 二.环境介绍 三.后端服务器安装配置 四.安装论坛 五.安装配置前端Nginx服务器 六.验证服务 一.Tomcat简介 Tomcat是Apache 软件基金会(Apache Softwar ...

随机推荐

  1. WinForms_ListView中获取选中项数据值

    string value = listList.SelectedItems[0].SubItems[1].Text;//获取首行listview的值 string va = listList.Sele ...

  2. Python随笔-函数

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. def GetMax(v1, v2):#注 ...

  3. JS高级——封装注册事件

    兼容性问题 1.ele.on事件类型 = function(){}一个元素ele注册一种事件多次,会被替换成最后一个,所以有局限性 2.addEventListener(事件类型,事件处理函数,use ...

  4. JS——思维拓展

    1.阶乘求和:4的阶乘是1*2*3*4 <script> function jiechen(value) { var n = 1; for (var i = 1; i <= valu ...

  5. Coding iOS客户端应用源码

    Coding是国内的一家提供Git托管服务的产品,它们的客户端提供了项目和任务管理.消息和用户中心,以及一个类似论坛的功能,已经在App Store上线: https://itunes.apple.c ...

  6. 我的 Windows 10 的基本配置

    Windows 10 的基本配置 功能性 开启 .Net Framework 3.5(包括 .NET 2.0 和 3.0) 旧版本 Windows 10 默认只安装了 .Net Framework 4 ...

  7. UICollectionViewFlowLayout & UICollectionViewDelegateFlowLayout

    A concrete layout object that organizes items into a grid with optional header and footer views for ...

  8. day07-列表类型/元组类型/字典类型/集合类型内置方法

    目录 列表类型内置方法 元组类型内置方法 字典类型内置方法 集合类型内置方法 列表类型内置方法 用来存多个元素,[]内用逗号隔开任意数据类型的元素 1. list()强制类型转换 print(list ...

  9. excel 类获取起始列和使用列

    m_excel.OpenWorkBook(sFileName, sSheetDrawingList); // Get drawing info int iStartRow = 0, iStartCol ...

  10. Java报表统计导出Word-xdocin方式

    官网:http://www.xdocin.com Controller层: //创建对象 XDocService xdocService = new XDocService(); //封装参数 Map ...