我已经把Nginx放在一个php应用服务器前面,作为一个反向代理来cachingdynamic内容并保存一些到php的命中。
我已经configuration了Nginx的下面的设置,希望我会实现以下行为。
1)在尝试从应用服务器重新获取之前,Nginx会caching200个状态码内容20m
2)caching将保留7天,以处理不经常访问的内容陈旧的请求。
3)内容最初caching后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;
更新:在运行一些更多的testing并观察服务器日志之后,看起来超过20米的内容不是从caching中提供的,而是在cache_file_system中build立起来的。
任何想法如何让Nginx服务陈旧的内容很长一段时间? 用例基本上caching了很less访问的内容,这些内容在我的应用程序服务器上生成的代价很高。 如果能够在caching中过期几天后能够投放陈旧的项目,那么最终将会有一个很好的性能提升。 如果Nginx无法实现这一点,我可以使用其他代理/caching选项(我只使用这个Nginx实例作为caching)。
事实certificate,这对于Nginx来说目前是不可能的 。 我结束了一个很长的TTL(7天)以及长时间的宽限(2天)设置清漆。 然后我每隔几天就会有一个脚本命中每个URL,并强制高速caching 。
考虑到我需要caching的内容的数量,以及每个项目访问的频率,我首先担心的是运行Varnish的代价会很高(所有内存!) – 这就是为什么我在看Nginx的文件基于caching。 但是,Varnish确实有一个文件支持的caching选项,对我来说工作得非常好。 到目前为止,我的caching大约80GB,performance非常好!
这些都很好看。 你试图问为什么这不起作用?
我要补充的一件事是你的proxy_use_stale应该可能有一些其他的HTTP错误代码。 我假设你想继续从caching服务陈旧,如果由于超容量问题的PHP返回503。