Varnish удаляет PHPSESSID при удалении файла cookie

Я уже давно пытаюсь поставить рабочий лак (3.0.4) перед некоторыми своими сайтами. Я начал с чистого конфигурационного файла (тот, который поставляется с лаком, "/usr/share/doc/varnish/examples/default.vcl.gz").

Ну, это работает, но, похоже, ничего не кеширует (я добавил заголовки, чтобы увидеть это: https://www.varnish-cache.org/trac/wiki/VCLExampleHitMissHeader).

Поэтому я добавил эти строки в свой sub_recv :

if (req.url ~ "\.(png|gif|jpg|jpeg|js|css|ico|pdf)$") {     
unset req.http.Cookie;      
    }

Как только я помещаю эти строки, моя сессия сбрасывается после загрузки некоторых изображений, а лаклог показывает мне журнал различных PHPSESSID:

16 RxHeader     c Cookie: PHPSESSID=gkl02227ef1iq4joai0tsbi026
23 TxHeader     b Cookie: PHPSESSID=oomupd8tnvirpn8eamsertuih4
...

Полный файл default.vcl опубликован здесь: http://pastebin.com/gmdym1sr

Редактировать: возможно, это имеет какое-то значение, но изображения вызываются со ссылкой типа «http:///domain.com/?t=Thb&f=picture.jpg» (галерея PhotoShow)

У вас есть идея? Заранее спасибо!


person Patator    schedule 16.08.2013    source источник


Ответы (1)


Вы должны отфильтровать файлы cookie на пути изображений к вашему клиенту:

sub vcl_fetch {
  // ... Line .82 in your pastebin
  if (req.url ~ "\.(png|gif|jpg|jpeg|js|css|ico|pdf)$") {     
    unset beresp.http.set-cookie;      
  }
  // ...
}

Сейчас происходит вот что (с пустым кешем браузера для кеша изображений):

  1. Запрос приходит в Varnish, Varnish удаляет cookie.
  2. Varnish передает запрос серверной части без cookie.
  3. Серверная часть полностью заполняет запрос и предоставляет заголовок Set-Cookie (поскольку он поступает без файлов cookie) с новым значением.
  4. Varnish не может кэшировать объект, так как он имеет заголовок Set-Cookie (строка 102 в вашем pastebin).
  5. Varnish передает изображение вместе с новым файлом cookie в ваш браузер.
  6. Ваш браузер перезаписывает файл cookie PHPSESSID в соответствии с полученным заголовком Set-Cookie.
person NITEMAN    schedule 17.08.2013
comment
Оно работало завораживающе! И спасибо за ваши объяснения, я понял разницу между моим PHPSESSID (Tx и Rx). Большое спасибо! - person Patator; 18.08.2013