之前我们公司有一个页面是处于内存缓存系统的保护的,缓存的规则就是根据请求的 uri 部分进行缓存,但是不关心参数部分。
突然有一天,缓存命中率下降的很厉害,而且后端页面的负载也飙高了。
查了好久,终于找到是因为一条不规范的nginx配置导致的:
location /xxx {
if ($http_user_agent ~ “spider”) {
rewrite ^/xxx(.)$ /yyy$1 break;
proxy_pass http://upstreamServer;
}
…
}
这段配置会导致,爬虫访问 /xxx/not_found 的任何目录,都直接重写成 /yyy/not_found 从而送到后端,导致缓存击穿