如何使用高速caching反向代理(如Squid,Varnish或Nginx)来caching具有个性化标题的网页

几乎每个网页都是dynamic生成的。 但是,他们不经常改变(有点类似于论坛页面)。 所以我想使用caching反向代理(如Squid,varnish或Nginx)来caching它们。

问题是,对于我login的用户,他们每个人都会在页面右上angular看到一个名为“Welcome John Doe。Logout”的个性化页眉(就像serverfault一样)。 而没有login的用户会看到一个标题“Login”。

所以基本上,即使每个用户都会看到相同的页面,但是由于该个性化页眉的不同,它们的版本也略有不同。

有没有什么办法可以caching页面的“主要”部分,并从caching中提供服务,同时为每个用户dynamic生成个性化头文件?

这一定是一个非常普遍的问题。 一般如何解决?

  • 哪些反向代理支持HTTP / 1.1 ETag和If-None-Match头文件?
  • nginxredirect到另一个不忘记子域名的域名
  • Nginx和Lua:黑客,优化和观察
  • Nginx 1.6.3升级到1.8
  • 有没有一个表示旧IP的响应头?
  • Nginx - 当限制请求时,nodelay选项是做什么的?
  • 3 Solutions collect form web for “如何使用高速caching反向代理(如Squid,Varnish或Nginx)来caching具有个性化标题的网页”

    使用Varnish,您可以使用ESI,但ESI处理的页面不能被压缩,而不会增加一些复杂性。 http://varnish-cache.org/wiki/ESIfeatures

    我没有在生产中使用过,但是,Nginx也通过插件提供了ESIfunction, http://wiki.github.com/taf2/nginx-esi/

    Nginx通过http://wiki.nginx.org/NginxHttpProxyModule#proxy_cache提供caching,并与其他插件一起处理片段汇编和caching。

    http://www.trygve-lie.com/blog/entry/esi_explained_simple解释ESI。

    或者,你可以在应用程序端做你自己的片段caching。

    你可以做的一件事情(除了ESI,它不能解决带宽问题或者减less你必须服务的请求的数量)实际上是把页面分成多个实体。 例如,所有的公共资料都在一个caching页面上,然后通过AJAX / iFrame将个性化的项目拉入。 这是iGoogle工作的方式,除了相反的情况…在iGoogle的情况下,基本页面是自定义的,但是您select的RSS提要组件是公共的,可caching的,并通过AJAX带入主页面。

    是的,caching主页面,但个别组件进入AJAX调用,你需要把pipe道vcl_recv为这些urls。

    if(req.url〜“/ some-ajax-call”){return(pipe); }

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.