Hello! 2014-04-29 19:48 GMT-07:00 landequlan: > 您好!最近使用mem_srcache模块进行缓存文件时发现“Range: bytes=10-”这个字段一直没有起作用。 > 不知道是否是什么原因,求解答。谢谢! > > 请求命令:curl -H “Range: bytes=10-” https://192.168.3.204/test.txt > 第一次请求后文件缓存并且返回了整个文件 > 第二次请求直接从memcached中返回整个文件 > 请尝试使用 git 仓库里最新版本的 ngx_srcache 模块: https://github.com/openresty/srcache-nginx-module/tree/master 受制于 nginx 自身的 ngx_http_range_filter_module 的实现方式,你在这里有两种选择: 1. 不命中缓存的 range 请求不会存入缓存;但命中缓存的 range 请求可以得到期望的 206 Partial Content 响应。这是默认的行为。所以你需要普通的 GET 请求来预热你的缓存。 2. 在 nginx.conf 中配置 srcache_store_ranges on; 然后把 $http_range 加入到缓存用的 key 加中去。此时,你针对每一个 range 的响应进行缓存。只有 range 完全相同的请求才会命中对应的缓存条目。更多细节请参见 https://github.com/openresty/srcache-nginx-module#srcache_store_ranges Regards, -agentzh
Hello! 2014-05-04 2:46 GMT-07:00 landequlan: > 您好!我测试了您说的第二种解决方法,使用了新的mem_srcache模块,并且尝试了nginx1.4.5和nginx1.6.0都没有办法进行缓存, 你的描述过于笼统,无法帮你诊断问题。建议启用 nginx 调试日志并检查含有“srcache”字样的输出行。 一般地,应按下面文档中列举的项目进行检查: http://wiki.nginx.org/HttpSRCacheModule#Trouble_Shooting 常见的一个原因是你的远方服务器携带了禁止缓存的响应头(比如 Cache-Control: no-cache 或者 Cache-Control: private)。如果真是这样,你会在 ngx_srcache 模块产生的调试信息里看到。 另外,这个模块的名字叫做 ngx_srcache,并不叫 mem_srcache,请不要自造名字,以避免不必要的混乱。 > 但是无意中发现添加proxy_cache > cache_one;后可以缓存但是读取缓存不正常,不清楚是什么原因。 不建议混用 proxy_cache 和 ngx_srcache. 但此二者应当可以一起工作。同样建议检查 ngx_srcache 生成的调试日志,来进行诊断。 Regards, -agentzh