今天服务器不知道是不是被攻击,还是什么,反正 Nginx 的日志里有一堆来访问 12306.cn 的记录。搞得整个服务器 500 了。然后我的守护脚本就傻乎乎的一直重启 Nginx,早上醒来手机上有上百条 Nginx 重启的通知,而且还在不停的增加。
登录服务器,看看连接数,有几百个 IP,每个 IP 也就一两个连接,然后 Nginx 的错误日志里充满了Too many open files
的错误。
第一反应,用 IPTables 封 IP。封完了 200 个,又来了 200 个新 IP。在 ipip.net 搜一下,都是腾讯和百度的 IP。好吧,此路不通,他们 IP 多,搞不过他们。
第二反应,IPTables 匹配域名自动 DROP。看看 Nginx,全 HTTPS,无法匹配。好吧,又不行。
怎么办?
仔细想想,为什么有那么多连接一直连着不断开呢。哦,原来是 Nginx 的keepalive_timeout
设置太大了。
遇上今天情况,一堆 IP 连上就跑,因为有了 keepalive 设置,所以 Nginx 就保持着一堆连接傻等着,然后就没有然后了。
所以把这种不匹配的域名都设置keepalive_timeout 0;
,而且直接return 444;
吧。
唉,网络安全。还是修炼不到家啊。