排查服务器异常流量保姆级教程

简介: 这篇文章将介绍当WEB服务器报警,提示磁盘使用率问题和带宽满载时的一些排查思路和解决方案。

磁盘使用率报警


原因分析


  1. 日志没有及时迁移或清理
  2. 程序异常输出了大量的垃圾文件
  3. 挂载的硬盘存储空间不足,不适应业务发展,需要挂载新的磁盘。


解决方案


1. 日志迁移或清理


我们需要Nginx日志和项目运行中的关键日志,方便定位问题、数据分析。

日志迁移的思路很简单,目前主流的云厂商都支持日志迁移和存储服务,且成本不高。

如果是自建的服务,可以挂载专门的存储硬盘,不和业务服务器耦合在一起,将日志进行单独存储。


2. 日志清理


  • 切换到根目录


cd /


  • 查找到大文件,比如找到大于100M的文件


find . size +100M


  • 没用的日志大文件置为空(不要直接删除,正在被使用的文件是无法直接删除的)


cat /dev/null > /data/logs/php-fpm/error.log


网站流量异常,一直在报警


当网站流量报警时喜忧参半,如果是因为搞活动或者网站内容命中了热点,被搜索引擎推荐,那真是像买彩票中奖一样高兴。

不过,大多数情况,网站在毫无预兆的情况下突然打满带宽,大概率是被恶意攻击了。

下面介绍一下我的排查思路

首先我登录了网站的统计服务平台,发现PV/UV等关键数据并没有太大变化,但是服务器的带宽却被打满了,说明异常流量不是通过刷网站页面导致的,可能是通过刷接口导致的。


通过分析日志排查异常流量


1. 首先切换到日志目录,比如我的目录是


cd /data/logs/nginx


查看访问最频繁的前10个IP


awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 10


分析结果:


  • 发现访问量最高的ip是自身服务器的外网ip
  • 发现有一组美国谷歌云的异常访问
  • 发现有一个北京xx网的异常访问
  • 其他基本是正常流量


解决异常流量


公网ip访问量最大:


这是一个N年前的老项目,开发时是有一些知识盲点的,没有考虑到内网传输要比外网传输的速度快很多。

通过下面的方式替换了外网传输为内网传输:

  • 项目中的外网ip替换为内网ip(发现项目代码并没有直接访问外网ip,而是访问了子项目的域名)
  • 配置Linux服务器的host


# 打开Linux的hosts配置文件
vim /etc/hosts
# 将项目中请求的多个域名解析到本地的ip地址
127.0.0.1 多个域名用空格分隔


优化完内网传输之后,就开始最重要的事情了:


封禁恶意ip


  1. 创建(打开)黑名单配置文件


vim /etc/nginx/blackip.conf


  1. 将black.conf添加到nginx.conf中 (代码段中的...代表省略的内容)


http{
.
.
.
    #ip黑名单
    include /etc/nginx/blackip.conf;
.
.
.
}


  1. 添加要封禁的黑名单


#屏蔽单个ip访问
deny IP; 
#允许单个ip访问
allow IP; 
#屏蔽所有ip访问
deny all; 
#允许所有ip访问
allow all; 
#屏蔽整个段:从127.0.0.1到127.255.255.254
deny 127.0.0.0/8;
#屏蔽IP段:从127.45.0.1到127.45.255.254
deny 127.45.0.0/16;
#屏蔽IP段:从127.45.6.1到127.45.6.254
deny 127.45.6.0/24;


  1. 重启Nginx服务


nginx -s reload


停掉不用的服务


在查询Nginx的log时,发现一些不再用的服务仍然有请求日志。

果断停掉这些服务。


统计访问最多的url 前10名


cat access.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -10 | more


封禁了不再使用url


  • 小程序接口封禁
  • 网站快报相关的接口封禁


优化结果



在进行上述操作后,收到了服务器报警恢复正常的短信通知。

今天早晨登录服务器监控后台,发现效果是灰常明显的:

红线左侧是处理异常流量前的带宽波动图,右侧是处理后的波动图,浅色波动线是昨天的流量情况。


微信图片_20221113151028.jpg


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
Linux
linux下搭建tftp服务器教程
在Linux中搭建TFTP服务器,需安装`tftp-server`(如`tftpd-hpa`)。步骤包括:更新软件包列表,安装`tftpd-hpa`,启动并设置开机自启,配置服务器(编辑`/etc/default/tftpd-hpa`),添加选项,然后重启服务。完成后,可用`tftp`命令进行文件传输。例如,从IP`192.168.1.100`下载`file.txt`: ``` tftp 192.168.1.100 <<EOF binary put file.txt quit EOF ```
28 4
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
1月前
|
存储 弹性计算 监控
ECS的基本操作教程
ECS的基本操作教程
137 7
|
1月前
|
弹性计算 安全 数据安全/隐私保护
2024年阿里云幻兽帕鲁Palworld联机服务器搭建部署指南,图文教程
近年来,幻兽帕鲁以其独特的游戏魅力,迅速成为玩家们的热门选择。对于许多想要与好友一起体验这款游戏的玩家来说,如何搭建一个稳定的联机服务器成为了他们关注的焦点。今天,我将为大家带来一篇简单易懂的图文教程,让你轻松搭建幻兽帕鲁的联机服务器,与好友们畅快游戏。
|
4天前
|
XML Java 数据格式
Servlet 教程 之 Servlet 服务器 HTTP 响应 3
`Servlet`教程示例展示了如何创建一个HTTP响应,使用`@WebServlet("/Refresh")`的`Refresh`类继承`HttpServlet`。在`doGet`方法中,设置了`Refresh`头以每5秒自动刷新,并用`setContentType("text/html;charset=UTF-8")`设定内容类型。还使用`Calendar`和`SimpleDateFormat`获取并格式化当前时间显示。相应的`web.xml`配置指定了Servlet路径。当访问此Servlet时,页面将每5秒更新一次显示的系统时间。
15 4
|
1月前
|
弹性计算 运维 安全
2024年阿里云上自建Palworld/幻兽帕鲁服务器教程
对于深爱《幻兽帕鲁》的玩家们,能够与好友共同联机探索游戏的奇幻世界,无疑是提升游戏体验的一大乐趣。但如何迅速且有效地搭建一个稳定且高效的联机服务器呢?今天,我们就来为大家分享一个详细的教程,让你轻松掌握自建《幻兽帕鲁》服务器的方法,让联机游戏之旅更加顺畅。
1416 4
|
5天前
|
安全 Unix Linux
Windows如何远程连接服务器?服务器远程连接图文教程
服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:Windows Server、Netware、Unix和Linux。今天驰网飞飞将和你分享Windows server远程连接图文教程,希望可以帮助到你
20 4
Windows如何远程连接服务器?服务器远程连接图文教程
|
8天前
|
安全 Java 网络安全
对象存储oss使用问题之使用oss上服务器后显示服务异常如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
12 0
|
22天前
|
弹性计算 关系型数据库 MySQL
阿里云数据库服务器价格表,数据库创建、连接和使用教程
阿里云数据库使用流程包括购买和管理。选择所需数据库类型如MySQL,完成实名认证后购买,配置CPU、内存和存储。确保数据库地域与ECS相同以允许内网连接。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码连接。同一VPC内的ECS需添加至白名单以进行内网通信。参考官方文档进行详细操作。
125 3
|
1月前
|
Shell Linux Apache
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
162 1