2013-07-29 44 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提要)。