Hello!
2015-12-12 7:41 GMT-08:00 ukyang:
> 我有個比較不尋常的使用情境,希望在做反向代理時每次都向origin server檢查是否檔案有更動,
> 如果有變更的話,就update cache (即使還沒expire),目前的嘗試是一旦靜態檔案被cache後,
> 就不會理會origin server上的檔案是否有更動,直到expire為止。所以來請教一下是否可以透過
> lua的cache control module來完成這個要求,謝謝。
>
这里假设你说的 cache 是 nginx 自身的 proxy_cache 这样的东西。按你的描述,应该可以如此实现:
1. 在 access_by_lua 里面通过 cosocket API 或者类似的接口去 origin server
检查更动版本之类的信息(但不应请求整个资源的响应数据),然后根据此信息,比较共享内存字典中预存的资源版本号,如果有变化,则变置一个自定义的
nginx 变量,比如 $bypass,为 1 之类的真值。
2. 配置 proxy_cache_bypass 指令,使用 $bypass 这样的变量作为值,以便动态绕过 proxy_cache.
3. 在 log_by_lua 里面根据 $upstream_cache_status 变量的值,确定在 cache update
成功之后再更新当前的资源版本号到共享内存字典。
Regards,
-agentzh