李子

关于nginx缓存hash key值计算方式
最近给公司项目部署了两台cache用于缓解源站压力,由于域名太多就拿openresty实现了方便配置,要是能开发成...
扫描右侧二维码阅读全文
18
2018/09

关于nginx缓存hash key值计算方式

最近给公司项目部署了两台cache用于缓解源站压力,由于域名太多就拿openresty实现了方便配置,要是能开发成一套完整的系统就好了,博主还在往开发路线爬(苦逼)争取转行做码农,再忍忍说不定明天就猝死了。

nginx本身做cache存在部分缺陷,还好博主动手能力强,基本可以当个小cache了。XD
已实现功能:
支持http2.0
支持gzip/brotli双压缩算法
支持全站缓存、首页缓存、静态资源缓存
自定义错误页
回源合并
多源站回源cookie粘滞
支持图片有损压缩、锐化、裁剪
删除网页空白和多余注释
支持js/css文件合并
缓存按目录/url方式purge
js、验证码方式的cc攻击防御
自动webp转换

我这里拿10G内存做了一个内存盘,以让nginx可以提供内存命中。

tmpfs /disk1 tmpfs size=10240m 0 0
uuid /disk2 ext4 defaults 0 0
uuid /disk3 ext4 defaults 0 0

多磁盘负载均衡,多硬盘没raid可提升性能,当然那块内存盘可以拿出来单独做小文件缓存。

proxy_cache_path /disk1 levels=1:2 keys_zone=cache_disk1:50m inactive=365d max_size=10g use_temp_path=off;
proxy_cache_path /disk2 levels=1:2 keys_zone=cache_disk2:50m inactive=365d max_size=2000g use_temp_path=off;
proxy_cache_path /disk3 levels=1:2 keys_zone=cache_disk3:50m inactive=365d max_size=2000g use_temp_path=off;

split_clients $request_uri $disk {
        33% disk1;
        33% disk2;
        * disk3;
}

我们来简单了解下nginx cache的hash key计算方法:
以如下设定key为例:

proxy_cache_key $host$uri$is_args$args;

那么解析出的结果应该就是:

www.lijian.me/logo/1.png

hash key值就为:

echo -n "www.lijian.me/logo/1.png" |md5sum
b7c88a62092d5af6c17682a151607bf2

那么根据目录层级,就可以找到该图片对应存储的目录:

/disk1/2/bf/b7c88a62092d5af6c17682a151607bf2
Last modification:August 17th, 2019 at 03:02 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment