прокси-передача в Varnish не попадает в кэш

прокси-передача в Varnish не попадает в кэш

На моем веб-сервере есть экземпляр Varnish, который я хотел бы кэшировать на стороннем веб-сайте (на blog.company.com/blog). У меня есть proxypass для этого, так как остальная часть сайта размещена локально, и я хотел бы, чтобы браузер маскировал это, чтобы оно выглядело как часть нашего веб-сайта (company.com/blog)

(/etc/httpd/conf.d/proxy.conf) ProxyTimeout 300

# Blog
ProxyPass /blog http://localhost:8000
ProxyPassReverse /blog http://localhost:8000

А бэкэнд Varnish у меня направлен на blog.sugarsync.com:

backend default {
  .host = "70.40.204.127";
  .port = "80";
}

Страница разрешается, но по сути перенаправляется на blog.company.com/blog, и она никогда не попадает в кэш… varnishlog показывает функцию «pass», которая получает запрос GET, что означает, что она не принимается, что странно, поскольку я использую все поведения по умолчанию в /etc/varnish/default.vcl за пределами пользовательского бэкэнда, поэтому он не должен их передавать…

   11 SessionOpen  c 127.0.0.1 46485 0.0.0.0:8000
   11 ReqStart     c 127.0.0.1 46485 394102336
   11 RxRequest    c GET
   11 RxURL        c /
   11 RxProtocol   c HTTP/1.1
   11 RxHeader     c Host: localhost:8000
   11 RxHeader     c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
   11 RxHeader     c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
   11 RxHeader     c Accept-Encoding: gzip,deflate,sdch
   11 RxHeader     c Accept-Language: en-US,en;q=0.8
   11 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
   11 RxHeader     c Cookie: __utmx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351630608:15552000; __utmx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351791703:155
   11 RxHeader     c scns-hdr-ip: 50.76.54.11
   11 RxHeader     c X-Forwarded-For: 10.5.112.22
   11 RxHeader     c X-Forwarded-Host: www.s.company.com
   11 RxHeader     c X-Forwarded-Server: www.company.com
   11 RxHeader     c Connection: Keep-Alive
   11 VCL_call     c recv
   11 VCL_return   c pass
   11 VCL_call     c pass
   11 VCL_return   c pass

Странно, что когда я ввожу имя хоста напрямую (hostname.company.com:8000 или company.com/blog), он попадает в кэш Varnish правильно, но все равно перенаправляет URL в браузере. Curls на правильный URL (www.company.com/blog) также попадает в кэш. Поддомены тоже, похоже, не работают... что здесь происходит?

решение1

Причина passв том, что логика VCL по умолчанию отказывается кэшировать что-либо с Authorizationили Cookieв заголовках запроса, а ваш запрос имеет Cookie.

if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
}

Такое поведение по умолчанию является излишней осторожностью, так что серверы, на которых возвращается разный контент для страницы в ответ на сеанс пользователя; вы можете изменить это поведение в своем vcl_recv. Реализуйте свое поведение как копию по умолчанию, но удалите req.http.Cookieпроверку:

if (req.http.Authorization) {
    /* Not cacheable by default */
    return (pass);
}

Что касается поведения перенаправления, похоже 30x, что ответ приходит и браузер клиента перенаправляется. Можете ли вы предоставить логи для одного из таких обращений?

Связанный контент