原本的NGINX缓存被前端使用传随机数的方式过掉, 导致请求全MISS, 大量调用数据库请求最后服务器连接数保持65535, 网站访问速度受到影响, ping偶尔出现“ping: sendmsg: Operation not permitted”的错误提示
想直接看解决方案往下翻
起因
突然收到运营反馈, 所有后台都出现了请求缓慢的问题
排查
开始使用top排查, 发现服务器负载, CPU占用都属于正常水平, 没有占用过高的进程
使用shellcat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
查看服务器连接数, 发现一直在65530左右(最大65535), 问题找到
怀疑遭到CC攻击, 开始逐个排查各个服务(这里我是手动tail -f日志文件, 不知道有没有别的什么方法), 最后发现一个网站出现了大量MISS请求(原本应该是HIT状态), 查看请求参数后发现有个t参数, 传递了一串随机数, 导致所有请求MISS
解决方案
先是“臭骂”一顿, 告知缓存的重要性。
原本的nginx配置
proxy_cache_key "$scheme$proxy_host$request_uri";
使用到了$request_uri作为缓存key, 但是现在这种方式已经不适用, 改为下面的方式
roxy_cache_key "$scheme$proxy_host$arg_sys$arg_appver$arg_appid";
$arg_sys及取参数中的sys(xxx.com?sys=123 这里就是取到的123)