我把Nginx放在PHP app服务器前作为反向代理来缓存动态内容并保存一些点击到PHP.
我已经使用下面的设置配置了Nginx,希望我能实现以下行为.
1)在尝试从应用服务器重新提取之前,Nginx将缓存200个状态代码内容20米
2)缓存将保留最多7天,以处理对不常访问的内容的陈旧请求.
3)在最初缓存内容后20分钟内发出的请求将向后端发出请求以进行全新更新,但将提供过时版本,以便客户端获得即时响应.
proxy_cache_path /var/lib/Nginx/cache levels=1:2 keys_zone=staticfilecache:512m inactive=7d max_size=15000m;
proxy_cache_use_stale timeout updating error invalid_header;
proxy_cache_valid 200 20m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 15m;
更新:
在运行了一些更多的测试并观察服务器日志之后,看起来超过20米的内容不是从缓存中提供的,而是在缓存中,而是在cache_file_system中构建.
有任何想法如何让Nginx长时间提供陈旧内容?用例基本上是缓存不常访问的内容,这些内容在我的应用服务器上生成成本很高.能够在缓存到期后的几天内提供陈旧项目,当一个热门终于进入时将是一个很大的性能提升.如果使用Nginx无法做到这一点,我会对其他代理/缓存选项开放(我只使用这个Nginx实例作为缓存).
最佳答案
事实证明,这与Nginx不是currently possible.我最终设置了Varnish长TTL(7天)以及长期优雅设置(2天).然后我每隔几天和force a warming of the cache就有一个脚本命中每个URL.
鉴于我需要缓存的内容量以及每个项目的访问频率,我首先担心运行Varnish的成本会高得令人沮丧(所有RAM!) – 这就是我查看Nginx文件的原因基于缓存.但是,Varnish确实有一个文件支持的缓存选项,对我来说效果非常好.到目前为止,我的缓存大约是80GB,表现非常好!