nginx配置不规范导致的缓存击穿

之前我们公司有一个页面是处于内存缓存系统的保护的,缓存的规则就是根据请求的 uri 部分进行缓存,但是不关心参数部分。

突然有一天,缓存命中率下降的很厉害,而且后端页面的负载也飙高了。

查了好久,终于找到是因为一条不规范的nginx配置导致的:

1
2
3
4
5
6
7
location /xxx {
if ($http_user_agent ~* "spider") {
rewrite ^/xxx(.*)$ /yyy$1 break;
proxy_pass http://upstreamServer;
}
...
}

这段配置会导致,爬虫访问 /xxx/not_found 的任何目录,都直接重写成 /yyy/not_found 从而送到后端,导致缓存击穿