最近对单位网站进行了改版,在本机和测试服务器测试了很久都没有问题,于是今天就部署到服务器上线了。同时.net framework版本由2.0升级到4.0。部署完测试了一下,没问题,就放出来了。一公布,大家纷纷点击。不一会儿,有人报告说访问不了了。一试,果然。大家赶紧到服务器查看,没发现什么异常。过了一会又好了。正当大家莫名奇妙时,又访问不了了,大家首先判断是不是程序池满了,但是很快发现同一个服务器上的其他网站也打不开,这些网站并不是同一个程序池。然后在服务器上访问了一下,可以打开。又利用其他ip的电脑试了一下,也可以打开。
看来是只有我们一个ip的访问不了,于是怀疑是防火墙把我们这个ip给禁止了。一查防火墙,还真是,原因是有网络攻击。ip被禁止5分钟。
那是什么地方问题呢?一开始是可以打开的,过一会就打不开了。应该不是黑客问题,因为只有我们一个ip的电脑访问不了,我们内网肯定没有黑客。这时有人无意刷新页面,发现不停刷新的话,很快又出现同样的问题。看来是同一个ip访问量过频繁才会出的问题。
此时知道只会影响我们一个ip,大家也松了一口气,开始放心测试。开始不停刷新不同页面,发现除了简单的搜索页面外都有问题。
大家开始怀疑是不是.net程序问题,我怀疑是不是使用的模板引擎的问题,于是我用模板引擎只生成一个简单的网页,没有问题。那肯定是程序的错了,有人怀疑是不是连接数据库次数太多,但是我想连接数据库应该不会被认定为攻击。又把出问题的页面生成静态页面,竟然也会出现问题。
静态页面唯一的危险就是js文件了。果然我把js全删,问题不出现了。确定是JS了。但是引用了好多JS,开始一个个排除,但是感觉大部分都有问题。于是又开始检查JS内部是不是有危险代码,或者非法字符,由于JS大都是找的别人的,看了一会头都大了。大家开始换一种思路,往JS里面加东西,谁知刚开始文件是空的时候也会出问题,于是排除JS文件本身的问题。
到这里,大家快没辙了。我又想到现在的JS里面有两个以前用的JS文件。那如果是JS文件有问题,那原来的页面会不会出问题呢,测试了一下,不会。
那用现在的页面引用原来的JS会不会出现问题?经测试,不会!干脆把所有的JS挪到原来放JS的文件夹,又疯狂测试了一下,竟然也不会出问题。看来就是这个放JS文件的文件夹的问题了,因为我给他起了个javascript的名字!看来这个名字被防火墙误会了。于是改了文件夹名字,问题终于解决了。这真是阴差阳错,我本来没用这个名字的,是部署到服务器才改成这个名字,真是手贱,不过压根没想到是这个文件夹名字的问题。虽然没有测试,但是如果JS文件名包含javascript的话也会出问题。
本来是微不足道的问题,解决起来却颇费周折。解决问题很简单,找出问题才是最难的。当个破程序员真不容易,永远有意想不到的问题,而且一个小问题解决起来却要浪费大半天。