На моем веб-сервере есть экземпляр varnish, который я хотел бы кэшировать на стороннем веб-сайте (по адресу blog.company.com/blog). У меня есть прокси-пароль для этого, поскольку остальная часть сайта размещена локально, и я хотел бы, чтобы браузер замаскировал это, чтобы он выглядел как часть нашего веб-сайта (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 показывает функцию «пройти», когда он получает запрос 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), оно правильно попадает в кеш-лак, но все равно перенаправляет URL-адрес в браузере. Свитки на правильный URL (www.company.com/blog) также попадают в кеш. Субдомены тоже не работают… что здесь происходит?
Причина 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
ответ, который перенаправляет браузер клиента - можете ли вы предоставить журналы для одного из этих обращений?