ubuntu NGINX proxy_cache_key 过滤请求参数

原本的NGINX缓存被前端使用传随机数的方式过掉, 导致请求全MISS, 大量调用数据库请求最后服务器连接数保持65535, 网站访问速度受到影响, ping偶尔出现“ping: sendmsg: Operation not permitted”的错误提示

想直接看解决方案往下翻

起因

突然收到运营反馈, 所有后台都出现了请求缓慢的问题

排查

开始使用top排查, 发现服务器负载, CPU占用都属于正常水平, 没有占用过高的进程

使用shell cat /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)

发表评论

电子邮件地址不会被公开。