本文档主要分为3部分内容:
(1) 解决不同URL访问不同后端的nginxcache搭建cdn配置方法
(2) nginxcache搭建cdn cache和内存文件系统的配置方法
2 匹配不同URL访问不同后端
如果想通过访问不同类别URL分配到不同的後端通过nginxcache搭建cdn实现首先举个例子,将需求场景进行描述:
#缓存key拼接规则:域名:端口 获取浏览器请求的URL完整地址
#获取proxy的真实域名
#设置浏览器中的header可查看该页面的缓存状态
指令指定了包含在缓存中的缓存关键字
注意默认情况下服务器的主机名并没有包含到缓存关键字中,如果你为你的站点在不同的location中使用二级域你可能需要在缓存关键字中包换主机名:
GET/HEAD用来装饰语句,即你无法禁用GET/HEAD即使你只使用下列语句设置:
多少次请求后应答将被缓存默认1。
指令指定缓存的路径和一些其他参数缓存的数据存储在文件中,并且使用代理url的哈希值作为关鍵字与文件名levels参数指定缓存的子目录数,例如:
可以使用任意的1位或2位数字作为目录结构如 X, X:X,或X:X:X e.g.: “2”, “2:2”, “1:1:2”,但是最多只能是三级目錄
所有活动的key和元数据存储在共享的内存池中,这个区域用keys_zone参数指定
注意每一个定义的内存池必须是不重复的路径,例如:
如果在inactive参數指定的时间内缓存的数据没有被请求则被删除默认inactive为10分钟。
一个名为cache manager的进程控制磁盘的缓存大小它被用来删除不活动的缓存和控制緩存大小,这些都在max_size参数中定义当目前缓存的值超出max_size指定的值之后,超过其大小后最少使用数据(LRU替换算法)将被删除
内存池的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节
为不同的应答设置不同的缓存时间,例如:
为应答代码为200和302的设置缓存时间为10分钟404代码缓存1分钟。
那么只对代码为200, 301和302的应答进行缓存
同样可以使用any参数任何应答。
之所以修改代码主要是因为没囿考虑状态码的情况,会导致304之类的无centent-length header的响应会被缓存
PURGE的方式肯定是会失效的。因为cachekey已经变了如果真的要PURGE删除缓存(不是标记为过期)的话,可以手动根据slice大小和rewrite规则生成多个真实的推送url进行PURGE删除刷新。
如果采用的是regex_revalidate插件进行目录和url刷新的话(标记为过期而不是直接删除缓存),因为正则刷新插件的逻辑在rewrite之前并且使用的是pcre正则表达式规则rewrite前的url实际上能够匹配到所有rewrite后的url,所以正则刷新插件依然囿效
本文探讨了基于nginxcache搭建cdn ngx_http_slice_module模块和trafficserver cache_range_requests插件实现的分片缓存的一种方案。在线上业务中可以有效的降低大文件的回源压力和硬盘IO压力显著提升下载体验。尤其是对于mp4之类并且采用206进行拖放的多媒体文件,效果更加明显