2013-07-29 2 views
1

У меня есть приложение codeiginter, которое уже использует кэширование с помощью codeiginter, я применил Varnish в качестве нового слоя кеширования. Но, как я вижу из varnishstat, это не делает разницы.Принуждение Codeigniter к работе с лаком

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

Я думаю, это из-за куки-файлов Codeiginter и заголовков 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-Control, Age, Expires пока я не установить их вручную
  2. Codeiginiter Направлено старую дату 1981 года Я удвоил проверку даты на моем сервере правильно
  3. Codeiginiter постоянно меняет куки почти каждый запрос.

В моем приложении у меня есть несколько страниц, требующих имя пользователя/пароль, но я сначала пытаюсь сосредоточиться на том, чтобы кэшировать общедоступные страницы. после этого я проверю связанные с учетной записью страницы.

Я тестирую на этот код:

//$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

Если Бэкенд отправки Cache-control: max-age=XXX вы можете забыть о заголовок 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_name, чтобы быть ci, а не ci_session.

Простейшая вещь для вас - при определенных значениях простой - может заключаться в том, чтобы использовать обработку сеанса CI для альтернативы или переключиться на файлы cookie на основе db, а не на файлы cookie. Если есть set-cookie - и всегда есть, когда у вас есть инициализированные сеансы/автозагрузка - он не будет кэшироваться. Если данные все хранятся на стороне сервера, у вас не будет этой проблемы.

Лично я не gung-ho, чтобы представить базы данных для нашего использования сессий, поэтому я собираюсь экспериментировать с настройкой заголовка управления кешем, чтобы игнорировать файлы cookie и использовать header_remove() в верхней части представлений, которые, как я знаю, будут никогда не будьте пользовательскими (например, RSS-канал).

Смежные вопросы