2013-07-29 75 views
1

我有一个已经使用codeiginter内置的高速缓存的codeiginter应用程序的工作,我申请上光油作为一个新的缓存层。但正如我从varnishstat中可以看到的那样,并没有改变这种差异。强制笨清漆

Hitrate ratio:  1  1  1 
Hitrate avg:  0.0480 0.0480 0.0480 

我想是因为Codeiginter cookies和HTTP头正在发回的多数民众赞成。

这是HTTP请求,从清漆到来。

Accept-Ranges:bytes 
Age:0 
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Length:1755 
Content-Type:text/html 
Date:Mon, 29 Jul 2013 07:25:59 GMT 
Expires:Thu, 19 Nov 1981 08:52:00 GMT 
Pragma:no-cache 
Server:Apache/2.2.22 (Ubuntu) 
Set-Cookie:ci=%2BEZFRauewyNnl3CXHE0cmz6F3G3moadilt5vXu5gghKXkWm4gg0JObnF2Etq6J5rl3XVigbF0je3funibpvEi4X%2BT3rS2VmazGG3T4Vm1%2B8YcbqRgL4xuMcxybndqJy%2BU9mNmsJjOgmYEZ8oPG8BKOtMaxNiMHmgmbBydxt3SzKfFfFUOydFx%2BeeJ7P1WE7V10m6GyfnFO5DrFYNsE%2F37WNAI%2Bpux%2Fwwch5B4DH1%2F6wssPm%2BNwsLQ1%2FBd44hgUXe3mMzzcqvxNjKqs0gjuwzwPT4nibEHirfaJ7TMVGObMjdrbREnoYS2gwoN15cCeKgXmTJQI2vvTuPcdtZVCjcAX6OvTy491HdIvQIdKRhX2BNi8d7ygo%2F7n5T6%2FN%2B0IohNN9iZ%2Fh959W%2Fz4azEJPfTrluucf6cLnlp2T2zb%2Fb3XroWuPqguk4wMpsAstfLsSfA%2F6yEi4Hph%2BPFxX%2BhyBazs11LJ38FA0flWtYY%2Bk%2B6yoF13sTaENN2pWj0bKDTtres9E4y3xMPr%2FZaO78WRA9CccDzcQfbZ3bZUqoXg4HmX%2BHDHiYPLD6uFpnC28LuDrCSbgXFIlhDrC8j65sxNSKhnzlUP7Konr%2FKRfKNzrgtWHBEzuXArW%2BlgIg1MzaW3GIkRy1gr16ZUjIiv7CCx7Y2twAfKOm4t00MvrTcFoxBPN1lzoasNyRLMIvshU8heWZHy17OPEapuO6N%2BuMl9L8LqU0%2FF%2BUeUDyFVwLG39LGkIVuF93VsIYEp6w2UwtccX4OO4P2uwJEoAJMMqUE%2FztELpCv%2BkfRAiub48n%2BRxK%2FhgUHw1LWsWIPv3xngq3MI8ypWCqkWLjPuu5dc%2FdOd3BSW2MYcBwacoB5CEOPBHGq3hw1QSZfY330hkLuyQPHxkh%2FDTija%2FN2Rz6z47JorsCqHGDBK6%2BPswBWvYZeMd0VMD%2F95j%2BFibi6rBqL3hoE%2BDgcfCdly%2FYH9py%2Fe%2Fa0AUiIINTK8EPtpuKdC8dLhKo2jI5J4e1ifZuWjVd3VnL2CvX; path=/ 
Vary:Accept-Encoding 
Via:1.1 varnish 
X-Powered-By:PHP/5.3.10-1ubuntu3.5 
X-Varnish:1353481467 

我注意到差异的东西:

  1. 不管我怎么努力codeiginter不会改变 Cache-ControlAgeExpires直到我手动设置
  2. Codeiginiter发送一个旧日期1981我一翻检查日期我 服务器上它是正确的
  3. Codeiginiter不断变化的饼干几乎每个请求。

在我的应用程序中,我有几个页面需要用户名/密码,但我试图首先关注获取公共页面进行缓存。之后我会检查帐户相关页面。

我对这个代码的测试:如果你的后端是发送Cache-control: max-age=XXX你可以约忘记

//$this->output->set_header("Cache-Control:public, max-age=9000"); 
//$this->output->set_header("Vary: Accept-Encoding,Cookie,User-Agent"); 
$this->output->cache(2400); 
$this->load->view("test"); 

回答

0

Expires头,因为它会在HTTP 1.1兼容的客户端被忽略& proxys [1](实际上,通常将其设置为过去以避免旧的HTTP 1.0客户端缓存项目)。

设置 Vary: User-Agent头时

要非常小心,因为它可能会损害您的缓存机会[2]

最后,光油不会缓存的请求,例如,由于Set-Cookie头的。清漆需要缓存会话初始化(参见[3])来缓存事物(或者相当复杂的VCL)

如果您修复了cookie并仍然存在问题,VCL文件和清漆版本将会真正起作用。

[1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

[2] https://www.varnish-cache.org/docs/3.0/tutorial/vary.html

[3] How should I implement lazy session creation in PHP?

0

你的cookie的问题是我目前摔跤。我是从你的样品猜你已经改变了cookie_name变量是C,而不是ci_session。

你的最简单的事情 - 为简单某些价值 - 可能是抛弃CI的会话处理的替代或切换到基于数据库的饼干,而不是基于cookie的。如果有一个Set-Cookie - 有始终是当你有初始化/会话自动加载 - 它不会缓存。如果数据全部存储在服务器端,您将不会遇到此问题。

就我个人而言,我不是为了使用会话而引入数据库,所以我将尝试设置缓存控制头来忽略cookie,并在我知道的视图顶部使用header_remove()绝不是用户特定的(比如我们的RSS提要)。