У меня есть 2 сервера Varnish 3.0.4 на границе кластера Apache (резервный директор). На одном из моих сайтов пользователи входят в систему, чтобы загрузить статический контент, такой как pdf, изображения (jpg, jpeg, png, gif), xls / xlsx и т. Д. Все файлы, кроме exel, должны быть кэшированы.
При загрузке файла Excel все работает как положено. При попытке загрузить кэшированный объект поведение отличается. Даже если сайт отображается правильно (отображаются все изображения), пользователь отключается и файл не может быть получен (404 из журнала varnishlog). Нет проблем с просмотром сайта при входе в систему.
Использование файла хоста для указания непосредственно на Apache, и файлы загружаются идеально.
В качестве временного решения было сказано Varnish не кешировать этот сайт и заблокирован весь контент для него.
Спасибо.
РЕДАКТИРОВАТЬ: полный журнал vcl и varnishlog.
Спасибо за вашу помощь. К сожалению, это все еще не работает. Вот мой полный vlc
backend srv1 {
.host = "srv1";
.port = "80";
.first_byte_timeout = 120s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
backend srv2 {
.host = "srv2";
.port = "80";
.first_byte_timeout = 120s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
backend srv3 {
.host = "srv3";
.port = "80";
.first_byte_timeout = 120s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
director cluster fallback {
{ .backend = srv1; }
{ .backend = srv2; }
{ .backend = srv3; }
}
sub vcl_recv {
set req.backend = cluster;
if (req.url ~ "\.(htm|html|xml|jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|pdf|flv|swf)$") {
return (lookup);
}
if (req.http.Authorization || req.http.Cookie) {
return (pass);
}
# Normalize encoding/compression
if (req.http.Accept-Encoding) {
if (req.http.Accept-Encoding ~ "gzip") { set req.http.Accept-Encoding = "gzip"; }
elsif (req.http.Accept-Encoding ~ "deflate") { set req.http.Accept-Encoding = "deflate"; }
else { remove req.http.Accept-Encoding; }
}
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
}
}
acl purge {
"localhost";
}
#
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
}
#
sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache.";
}
}
sub vcl_fetch {
if (req.url ~ "\.(htm|html|xml|jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|pdf|flv|swf)$") {
return (deliver);
}
}
sub vcl_deliver {
if (obj.hits > 0)
{ set resp.http.X-Cache = "HIT from Varnish"; }
else
{ set resp.http.X-Cache = "MISS from Varnish"; }
}
А вот полная трассировка varnishlog при попытке загрузить файл:
50 BackendOpen b srv1 10.24.1.11 40049 10.24.1.95 80
50 TxRequest b GET
50 TxURL b /de-ge/content/download/992186/17973237/version/1/file/PB_CAN_EDUC_Trockennahrung.pdf
50 TxProtocol b HTTP/1.1
50 TxHeader b Via: 1.1 ClientSiteProxy:3128 (squid/2.7.STABLE4), 1.0 proxy-1_5 (squid/3.1.19), 1.1 cache-3:80, 1.0 SPRX0008
50 TxHeader b Host: mysite.domain.com
50 TxHeader b Referer: http://mysite.domain.com/de-ge/website-material/vet_basic/produktdatenblaetter
50 TxHeader b User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
50 TxHeader b Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
50 TxHeader b Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
50 TxHeader b X-Teacup: eFDRDF7Vx0755xk=
50 TxHeader b X-Forwarded-For: CLIENT_IP, PUBLIC_IP
50 TxHeader b X-Varnish: 1630421623
50 TxHeader b Accept-Encoding: gzip
50 RxProtocol b HTTP/1.1
50 RxStatus b 404
50 RxResponse b Not Found
50 RxHeader b Date: Wed, 08 Jan 2014 10:02:24 GMT
50 RxHeader b Server: Apache
50 RxHeader b Expires: Thu, 19 Nov 1981 08:52:00 GMT
50 RxHeader b Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public, no-transform
50 RxHeader b Pragma: no-cache
50 RxHeader b X-Powered-By: eZ Publish
50 RxHeader b Served-by: mysite.domain.com
50 RxHeader b Content-language: de-DE
50 RxHeader b Set-Cookie: PHPSESSID=ob5a4jaic2ubpvala2qacksl17; path=/
50 RxHeader b Content-Length: 7030
50 RxHeader b Connection: close
50 RxHeader b Content-Type: text/html; charset=utf-8
50 Fetch_Body b 4(length) cls 0 mklen 1
50 Length b 7030
50 BackendClose b srv1
24 ReqStart c REVERSE_PROXY_IP(NOT VARNISH) 57364 1630421623
24 RxRequest c GET
24 RxURL c /de-ge/content/download/992186/17973237/version/1/file/PB_CAN_EDUC_Trockennahrung.pdf
24 RxProtocol c HTTP/1.1
24 RxHeader c Via: 1.1 ClientSiteProxy:3128 (squid/2.7.STABLE4), 1.0 proxy-1_5 (squid/3.1.19), 1.1 cache-3:80, 1.0 SPRX0008
24 RxHeader c Host: mysite.domain.com
24 RxHeader c Cookie: ISAWPLB{515B9AC4-0CEE-4B2B-B32F-DB0AD870EC2F}={DF5E7FFB-0F55-466C-9DDC-2983CFDF75AE}; PHPSESSID=nfcqe0tcq7gqiu253ef3o9svu4; is_logged_in=true
24 RxHeader c Referer: http://mysite.domain.com/de-ge/website-material/vet_basic/produktdatenblaetter
24 RxHeader c User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
24 RxHeader c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
24 RxHeader c Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
24 RxHeader c X-Teacup: eFDRDF7Vx0755xk=
24 RxHeader c X-Forwarded-For: CLIENT_IP, PUBLIC_IP
24 RxHeader c Cache-Control: max-age=259200
24 RxHeader c Connection: Keep-Alive
24 VCL_call c recv lookup
24 VCL_call c hash
24 Hash c /de-ge/content/download/992186/17973237/version/1/file/PB_CAN_EDUC_Trockennahrung.pdf
24 Hash c mysite.domain.com
24 VCL_return c hash
24 VCL_call c miss fetch
24 Backend c 50 cluster srv1
24 TTL c 1630421623 RFC 0 -1 -1 1389175345 0 1389175344 375007920 0
24 VCL_call c fetch deliver
24 ObjProtocol c HTTP/1.1
24 ObjResponse c Not Found
24 ObjHeader c Date: Wed, 08 Jan 2014 10:02:24 GMT
24 ObjHeader c Server: Apache
24 ObjHeader c Expires: Thu, 19 Nov 1981 08:52:00 GMT
24 ObjHeader c Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public, no-transform
24 ObjHeader c Pragma: no-cache
24 ObjHeader c X-Powered-By: eZ Publish
24 ObjHeader c Served-by: mysite.domain.com
24 ObjHeader c Content-language: de-DE
24 ObjHeader c Set-Cookie: PHPSESSID=ob5a4jaic2ubpvala2qacksl17; path=/
24 ObjHeader c Content-Type: text/html; charset=utf-8
24 VCL_call c deliver deliver
24 TxProtocol c HTTP/1.1
24 TxStatus c 404
24 TxResponse c Not Found
24 TxHeader c Server: Apache
24 TxHeader c Expires: Thu, 19 Nov 1981 08:52:00 GMT
24 TxHeader c Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public, no-transform
24 TxHeader c Pragma: no-cache
24 TxHeader c X-Powered-By: eZ Publish
24 TxHeader c Served-by: mysite.domain.com
24 TxHeader c Content-language: de-DE
24 TxHeader c Set-Cookie: PHPSESSID=ob5a4jaic2ubpvala2qacksl17; path=/
24 TxHeader c Content-Type: text/html; charset=utf-8
24 TxHeader c Content-Length: 7030
24 TxHeader c Accept-Ranges: bytes
24 TxHeader c Date: Wed, 08 Jan 2014 10:02:25 GMT
24 TxHeader c X-Varnish: 1630421623
24 TxHeader c Age: 0
24 TxHeader c Via: 1.1 varnish
24 TxHeader c Connection: keep-alive
24 TxHeader c X-Cache: MISS from Varnish
24 Length c 7030
24 ReqEnd c 1630421623 1389175344.435734510 1389175345.230693817 2.376755714 0.794904470 0.000054836
EDIT2: я не могу использовать curl, потому что мне нужно войти в приложение. Но я на 200% уверен, что ресурс доступен, поскольку, когда я использую свой хост-файл для обращения к веб-серверу, я могу загружать файлы.
Вот результат работы инструментов разработчика Chrome:
Request URL:http://mysite.domain.com/de-ge/content/download/1004658/18185577/version/2/file/RC_PB_CHN_Junior.pdf
Request Method:GET
Status Code:200 OK
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Cookie:__utma=65825073.183772452.1389198084.1389262355.1389265715.3; __utmc=65825073; __utmz=65825073.1389198084.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=3jr13d7cqmn0kv86iho4n030i0; is_logged_in=true
Host:mysite.domain.com
Referer:http://mysite.domain.com/de-ge/website-material/retail_basic/produktdatenblaetter
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Response Headers
Accept-Ranges:bytes
Cache-Control:public
Connection:close
Content-Disposition:attachment
Content-language:de-DE
Content-Transfer-Encoding:binary
Content-Type:application/pdf
Date:Thu, 09 Jan 2014 14:36:30 GMT
Expires:Thu, 09 Jan 2014 14:46:30 GMT
Pragma:
Served-by:mysite.domain.com
Server:Apache
Transfer-Encoding:chunked
X-Powered-By:eZ Publish
РЕДАКТИРОВАТЬ 3: Я не могу заставить его работать. Я и я действительно не понимаю, почему все изображения правильно отображаются в пользовательской зоне, когда загрузка (буквально, с запросом на загрузку) изображений или другого ресурса не удалась.
Спасибо.
Я подозреваю, что ваш бэкэнд перезаписывает файл cookie, поэтому я попробую изменить vcl_fetch
кому:
sub vcl_fetch {
if (req.url ~ "\.(htm|html|xml|jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|pdf|flv|swf)$") {
unset beresp.http.set-cookie;
return (deliver);
}
}
В любом случае это сложно сказать, не имея трассировки varnishlog и вашей полной конфигурации vcl.
После просмотра вашего полного VCL и трассировки varnishlog становится ясно, что серверная часть отвечает на статус 404.
Поэтому попробуйте выполнить вызов curl на бэкэнд, чтобы проверить ответ, например:
curl -I -H "Host: mysite.domain.com" srv1/de-ge/content/download/992186/17973237/version/1/file/PB_CAN_EDUC_Trockennahrung.pdf
Увидев ваш EDIT2:
Если вам нужно войти в систему, чтобы получить ресурс, а логины основаны на файлах cookie, это не удается, потому что вы удаляете файлы cookie:
if (req.url ~ "\.(htm|html|xml|jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|pdf|flv|swf)$") {
return (lookup);
}
Кстати: вы можете выполнять вызовы curl с помощью файлов cookie:
curl -I -b "PHPSESSID=3jr13d7cqmn0kv86iho4n030i0; is_logged_in=true" -H "Host: mysite.domain.com" srv1/de-ge/content/download/992186/17973237/version/1/file/PB_CAN_EDUC_Trockennahrung.pdf