提醒:本文最后更新于 2806 天前,文中所描述的信息可能已发生改变,请仔细核实。
作为一个被D经历超过两年的博主(好悲催)。。。如何防D防C,一直是辛酸史。
博客目前配置:4G RAM、3核QEMU Virtual CPU。由PaulHost提供服务,已经使用Paulhost近3年了。
简单介绍个各应用内存占用情况:
1.MySQL是内存大户,最低1G,最高1.8G内存。目前1.09G。
2.Varnish内存使用是在150+M到1G。峰值是不到500M。
3.PHP静态进程50个,每个占用5~100M,含共享内存。按照内存统计,目前占用了4.16G。。。实际占用是1.1G左右。
4.Memcache最高是256M可被占用。目前一直在135.43M,一般就是20M~170M的范围波动。
5.Redis占用23.22 MB,相对固定。因为存储的数据原因,每月会固定增加0.5~4M。
6.Nginx占用也比较稳定,一直在100M左右,目前92.43M。
7.其他杂七杂八,几百M吧。
服务器一般我都是禁用Swap的。因为硬盘I/O不行,可能是因为服务器虚拟化是KVM有关。
当内存到一定值,会自动启用Swap(通过脚本)。一般也就被ddos或cc时,会出现各应用占用高峰,这时SWAP就会打开,来应付攻击。
同时自己写的流量清洗(其实就是连接数和并发量检测),就会起作用。各种ip被ban(通过iptables),可能会误伤,但这是必要的。
如果SWAP来不及打开,怎么办?这时可能会触发到OOM Killer。
PHP虽然占用多,但是极为分散,平均20+M,所以首当其冲的就是MySQL了。
而作为数据库,崩溃是不能容忍的。所以我把MySQL的OOM触发Killer等级降低了。
也就是内存占用突增时,Varnish会被杀掉。
为什么这样做呢,没有Varnish不是不能访问网站么?
没错,但却预留了至多1分钟的时间,来进行流量清洗。
1分钟后web_keepalived被触发,Varnish满血复活。
因为大部分流量的ip已经被ban,这时候就不怕攻击了。
web_keepalived详见上篇文章:《再说博客服务器的KeepAlive》。
上面一切都是在同一组脚本执行的,一定程度上减少减缓被攻击形势,也保证了服务器应用的稳定性。
文章结束,睡觉。
转载请注明转自:kn007的个人博客的《简单谈下怎么防御DDOS或CC攻击》
啥真相?要我去机房把防薇墙拆给你看?还是管理后台
@敏: 薇的相片啦,你们总是防薇墙,好歹我也要知道薇长啥样子。。不然怎么防。
最近在研究隐藏服务器的真实IP,IP隐藏了,能起到很好的防护作用
@World: 前面加层cdn或者其他的,或者在搞个vps反代?
@kn007: 差不多 我的想法是多级服务器 不过这样太烧钱
@World: 确实,话说隐藏还不如均衡负载。。
@kn007: 以后暴发户了再弄个 哈哈
@World: 哈,好吧
Redis是用来缓存前台的吗? 那不是和Varnish冲突了么
@Xider: Redis当数据库一样用的,在我这。比较大的数据和不经常改动的数据
@kn007: 把数据库主次分离开了吗。 redis+mysql效率会高一些吗?
@Xider: 也不是,wp还做不到那一步,mysql已经足够快了,我也不需要读写分离。
只是我有个页面单页面大小好几M,只能用redis来缓存起来。
@kn007: 下午特地去搜了一下,发现redis对缓存的效率高于内存级别的memcached,挺吃惊的,到时候研究一下
@Xider: 但是通过php module却无法快过。redis跟php不是一伙的。只能是redis配合nginx lua,然后php来访问nginx来调动redis