nginx+tomcat重复请求

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

最近网站压力突然增大,把带宽都占满了,访问网页发现非常的慢,打开页面的速度也奇慢大概要十几秒。这种情况还是第一次遇到,感觉不是被攻击了就是被攻击了!下面是网站的流量截图,一共1M的带宽在15点左右的时候瞬间慢了,然后就是持续的在峰值左右徘徊。

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

SSH连上服务器查看日志,居然连SSH都特别慢,这让我更加坚定自己的判断,妈蛋绝对被攻击了!但是后台日志没有什么明显的错误信息。可是网站还是特别卡,一直持续了两个小时。一定是自己忽略了什么东西。既然是变慢,首先看CPU,内存啥的。于是查看了一下服务器的CPU和内存,没有啥问题,就是带宽变满了。看来是大量的访问造成的,又一次认真的查看了日志,这次看的是tomcat的access日志,这下发现了问题。很多页面在同一时间,或者说基本上在同一时间被访问了多次。

如果说整个日志中有那么几条是这种重复的倒还可以理解,可能是用户打不开页面触发了浏览器的刷新操作,但是大面积的都是这种重复的访问请求肯定就不正常了。检查了一下自己的前台代码看看是否是自己的JS写错了,导致客户端同一时间发起多次请求。检查了半天未果。

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

想到自己在配置网站的时候用到了Nginx做反向代理,突然就感觉会不会是Nginx的配置有什么问题呢?检查了一遍Nginx的配置,没发现啥问题,简单的转向再写错就不活了。莫非重复的请求本身不是服务器配置的问题?于是检查了Nginx的accesslog,令人惊讶的是在Nginx的log当中同样的是重复的访问情况。这就证明了不是我配置的问题,因为Access log足以证明在请求到达服务器之前就是多次请求。难道真的有人攻击?于是开始查找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的配置,网站一切恢复如初。

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

时间: 2024-11-02 21:43:59

nginx+tomcat重复请求的相关文章

nginx+tomcat+memcached网页动态请求分配的安装与配置

 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选. Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memc

nginx+tomcat 对于action请求返回404页面

今天给客户做需求,基本的nginx+tomcat,tomcat之前就有,8081端口的,现在客户有了域名,希望可以用域名直接访问,那就只有两种方法:改tomcat端口,8081改为80,要么就是用第三方web转发,比如使用nginx,这次我就给客户使用nginx,结果客户在访问一个注册页面tMallUser!toRegistPage.action报错404 我有单独用tomcat测试了页面,可以打开,没问题,那问题一定就是nginx配置转发有问题. server {     listen    

nginx + tomcat集群和动静资源分离

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的apache.Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx.apache是基于http反向代理方式,位于ISO模型的第七层应用层.直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提

nginx+tomcat集群配置(3)---获取真实客户端IP

前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数据挖掘和分析带来了麻烦. 不过不用担心, 本文将简单介绍其背后的原因和原理, 以及具体的解决方案, ^_^. 原因分析: webserver在获取客户端ip时, 默认的方式是通过request.getRemoteAddr(), 这种方式本质是从直连的socket中获取到的. 因此客户端直连web s

微信页面注册时重复请求的问题

以下转载于同事空间日志,做个记录: 最近在微信端的开发当中发现微信浏览器会重复请求后台,搞的我是寝食难安,业务逻辑就是一用户注册逻辑,本地测试没问题,放生产上有时就会报"用户已存在"异常,开始以为是代码逻辑里有重复插入的逻辑,在我来来回回反反复复的看了n遍依然没有发现有重复插入的逻辑时,我又把注意力移到了jquery的ajax上,以为是jquery里ajax重复提交的,于是我改变ajax提交为普通的href连接,结果错误依然.这时我感觉很可能是尼玛微信的套路,最后用了一很勉强的办法暂时

使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境).Nginx 1.9.8.Redis 3.2.1 一.背景 在使用Nginx+Tomcat实现负载均衡的时候,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因为会出现session不同步或者丢失的问题. 二.Nginx安装与配置 1.Nginx安装 网上的资源对于安装Nginx的介绍比较多,例如最简单的为: (1) 获取nginx,在http://nginx.org/download/上可以获取当前最新的

Nginx+Tomcat的服务器端环境配置详解

这篇文章主要介绍了Nginx+Tomcat的服务器端环境配置详解,包括Nginx与Tomcat的监控开启方法,需要的朋友可以参考下 Nginx+tomcat是目前主流的Javaweb架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.Java JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-Linux-x64.tar.gz ? 1 tar -xzf jdk-7u25-linux

Nginx+Tomcat负载平衡,Redis管理session存储

使用Nginx作为Tomcat的负载平衡器,Tomcat的会话Session数据存储在Redis,能够实现0当机的7x24运营效果.因为将会话存储在Redis中,因此Nginx就不必配置成stick粘粘某个Tomcat方式,这样才能真正实现后台多个Tomcat负载平衡,用户请求能够发往任何一个tomcat主机,当我们需要部署新应用代码时,只要停止任何一台tomcat,所有当前在线用户都会导向到运行中的tomcat实例,因为会话数据被序列化到Redis,在线用户不会受到影响,一旦停掉的tomcat

图文解说:Nginx+tomcat配置集群负载均衡

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的apache.Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx.apache是基于http反向代理方式,位于ISO模型的第七层应用层.直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提