自己踩坑的简单记录,在使用nginx中,有一些场景下,只需要对特定的url而不是某个应用(微服务)的全部内容进行缓存,这个时候可借助nginx自身的缓存功能实现。
(ps:如果为动静分离,不在本次的讨论范围内,实现方式网上的办法很多。)
这种方式也可用于实现热点内容的缓存,减少后端服务的压力。
- http节点添加:
proxy_cache_path 缓存目录 levels=1:2 keys_zone=cache_xxxx:1024m inactive=1d max_size=10g;
2. 在server节点添加:
location ~ ^/a/b/c/d/(.*)$ (要缓存的url地址,正则表达式) {
proxy_pass (内容未进行缓存时的请求路径);
proxy_cache cache_xxxx;
proxy_cache_valid 200 1d;
rewrite ^/a/b/c/d/(.*)$ /b/c/d/$1 break;
expires 1d;
}
ps: 如果针对对外的地址与内部转发的地址不一致的情况,可用rewrite指令实现,示例中将对外的/a/b/c/d为开头的请求转发到以/b/c/d为开头的后端服务器上。