nginx反向代理,何时使用缓存与存储?


8

我正在将项目的Web堆栈重组为:nginx-> haproxy->许多(apache / passenger rails)实例

一些目标包括:

  • 用于页面缓存的单个位置(当前通过每台apache机器上的导轨完成)
  • 更快的静态内容
  • 从内部管道中删除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是否有意义?

另外,如果还有其他考虑因素或我应该考虑的软件,我很想听听它们。谢谢!


自发布此问题以来,我已经意识到我使用的初始配置根本不使用商店,并且(semi?)官方Wiki示例中的error_page和内部设置并非完全可选(自此处以来配置已更新)它似乎正在运行,并且可以正常工作的配置似乎是此问题的更好的遗产)。因此,使用商店缓慢创建(很少更新)完整页面,以及图像,javascript等的实际缓存对于我们来说似乎工作得很好。我会接受一个答案,因为它至少给了我寻找问题的线索,但是我仍然不知道我是否以预期的方式使用这两个指令还是不行(嗯,至少与存储无关,缓存似乎更为明显)。


出于遗留目的,此讨论对我处理这些问题非常有帮助。 ruby-forum.com/topic/140396
克里斯(Chris)

Answers:


3

如果内存可以正确地为我服务,则proxy_store会存储对项目请求的二进制表示,而proxy_cache会以其基本形式存储项目的缓存副本。

proxy_cache实际上是具有多个级别的适当缓存引擎,适用于使用相同密钥存储来自多个站点的内容。

我个人使用proxy_cache在我们的每台静态内容服务器上存储了超过20亿个产品图像。


1

proxy_store用于创建对象的“按需”镜像。它将项目放在与给定项目在后端存在的路径相同的路径中。

在动态内容速度较慢的情况下,proxy_cache更合适,因为它支持缓存过期。

其中proxy_store更有用的示例可能是rpm文件的镜像,其中一个文件名/版本将永远不需要过期

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.