我正在将项目的 Web 堆栈重组为:nginx -> haproxy -> 许多(apache/passenger rails)实例
部分目标包括:
- 页面缓存的单一位置(目前通过每台 Apache 机器上的 Rails 完成)
- 更快的静态内容
- 从内部管道中删除 SSL
- ip 日志记录(之前由于在 tcp 模式下运行 haproxy 而丢失)
图片/样式表/javascript 资源已缓存,并带有适当的标头。我们的页面缓存基于内部参数,不应响应典型的缓存控件。为了实现这些目的,我们的配置如下所示
server {
...
location /really_slow_dynamic_content/ {
root /var/www/tmp;
error_page 404 = @fetch;
}
location @fetch {
internal;
proxy_pass haproxy_ip;
proxy_store /var/www/tmp${uri}_cache.html;
proxy_store_access user:rw group:rw all:r;
}
location /assets/ {
proxy_pass haproxy_ip;
proxy_cache assets;
}
location / {
proxy_pass haproxy_ip;
}
}
我其实不太擅长系统管理员,我知道有很多替代方案/调整/添加可能会有帮助。我也不太明白 proxy_cache 和 proxy_store 之间的区别。所以我的实际问题是...
在我们将资产移至 nginx 机器之前,对资产使用 proxy_cache 而对缓慢的动态内容使用 proxy_store 是否有意义?
此外,如果我还有其他需要考虑的事项或软件,我很乐意听听。谢谢!
自从发布这个问题以来,我意识到我使用的初始配置根本不使用商店,并且来自(半?)的 error_page 和内部设置官方 wiki 示例并不是完全可选的(配置在此处更新,因为它似乎可以正常工作,而正常工作的配置似乎是这个问题的更好遗产)。因此,使用商店来创建缓慢(并且很少更新)的完整页面,以及使用实际缓存来存储图像、javascript 等似乎对我们来说效果很好。我接受一个答案,因为它至少给了我一个线索来追踪我的问题,但我仍然不知道我是否以它们预期的方式使用这两个指令(好吧,至少不是关于商店,缓存似乎更明显一点)。
答案1
如果我没记错的话,proxy_store 存储了对某个项目请求的二进制表示,而 proxy_cache 则以基本形式存储了该项目的缓存副本。
proxy_cache 实际上是一个具有多个级别的适当的缓存引擎,适合使用相同的键存储来自多个站点的内容。
我个人使用 proxy_cache 在我们的每个静态内容服务器上存储超过 20 亿张产品图像。
答案2
proxy_store 用于创建对象的“按需”镜像。它将项目放在与后端给定项目所在的路径相同的路径中。
对于动态内容较慢的情况,proxy_cache 更为合适,因为它支持缓存过期。
举个例子,proxy_store 更有用的可能是 rpm 文件的镜像,其中一个文件名/版本永远不需要已到期。