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

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

这样的情况还是第一次遇到。感觉不是被攻击了就是被攻击了!以下是站点的流量截图,一共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. System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。) .

    今天使用sql server 2008 R2管理器,进行SQL查询时,频率非常高的报错: System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误. ...

  2. [ BZOJ 2134 ] 单选错位

    \(\\\) \(Description\) 一共\(N​\)道题目,第\(i​\)道题有\(A_i​\)个选项,现在有一个人做完了所有题目,但将每一道题的答案都写到了下一道题的位置\((​\)第\( ...

  3. 完整版本的停车场管理系统源代码带服务端+手机android客户端

    该源码是停车场管理软件附带源代码 J2EE服务端+android客户端,也是一套停车场管理车辆进出的管理软,喜欢的朋友可以看看吧. 应用的后台管理主要功能介绍:1  机构管理 ,机构有从属管理< ...

  4. CSS——float

    float:就是在于布局,首先要介绍的是文档流(标准流),之后是浮动布局. 文档流:元素自上而下,自左而右,块元素独占一行,行内元素在一行上显示,碰到父集元素的边框换行. 浮动布局: 1.float: ...

  5. Mongo优化笔记

    最近MongoDb服务器负载比较高,容易出问题,这里把优化的方式整理一下. 1.由于各个项目组共用一个mongo实例,所以一个项目组的问题会影响到别的项目组,所以需要把各个项目的数据从一个实例中剥离出 ...

  6. TensorFlow: Could not load requested Qt binding.

    使用Eclipse 引入tensorflow,出现 Could not load requested Qt binding.  问题 ImportError: Could not load reque ...

  7. 转录组入门(3):了解fastq测序数据

    sra文件转换为fastq格式 fastq-dump -h --split-3 也就是说如果SRA文件中只有一个文件,那么这个参数就会被忽略.如果原文件中有两个文件,那么它就会把成对的文件按*_1.f ...

  8. Python 之pdb调试

    # 调试方式一:python -m pdb test.py # 相关命令: # l 查看当前代码 # n 向下执行一行代码 # c continue继续执行代码 # b break + 行数 添加断点 ...

  9. ES6 基础学习

    ECMAScript 6 标准入门 一.let和const let命令 let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效:是块级作用域,且let不允许 ...

  10. bat 读取当前目录指定文件信息并拼接

    bat 读取指定文件的信息并拼接成指定格式