Я пытаюсь настроить Varnish на хранение в кеш на 1 минуту третьей страницы (прокси из службы, не находящейся под моим контролем). К несчастью, эта услуга иногда может быть недоступна, и это переносит проблемы на мой сайт; для предотвращения этого я хочу также обслуживать локальный кеш, когда служба недоступна.Как правильно настроить изящество на Varnish 3.0
Я следовал советам от grace и saint mode.
Следуйте некоторым фрагментам из моего файла VCL.
Конфигурация Backend:
backend external {
.host = "external.acme.com";
.port = "80";
.probe = {
.url = "/page";
.interval = 5s;
.timeout = 5s;
.window = 1;
.threshold = 1;
}
}
vcl_recv:
sub vcl_recv {
set req.backend = my_backend;
...
# redirect onto 3rd part service
if (req.url ~ "www.acme.com:80/page$") {
set req.url = regsub(req.url, "(.*)", "http://external.acme.com/page");
set req.backend = external;
}
if (!req.backend.healthy) {
set req.grace = 2h;
} else {
set req.grace = 10s;
}
...
vcl_fetch:
sub vcl_fetch {
if (beresp.status == 503) {
set beresp.saintmode = 5s;
#set beresp.ttl = 1h;
return (restart);
}
set beresp.grace = 2h;
set beresp.ttl = 2h;
if (req.http.host == "external.acme.com") {
set beresp.http.X-Varnish-Action = "Caching external.acme.com";
set beresp.ttl = 1m;
return(deliver);
}
Я testin г вниз удаленного обслуживания с помощью IPTables и конфигурация работает:
- Proxy удаленной страницы OK
- опрос Здоровье страницы 3RP партии ОК
Моя единственная проблема заключается в том, что: когда я завершаю удаленную службу, сторонняя страница обслуживается кешем не более одной минуты (TTL настроен на vcl_fetch
), что является хорошим TTL, когда доступна удаленная страница ... но я хочу продолжать служить для этого намного дольше (2 часа).
Это, кажется, в отличие от того, что я прочитал там: http://book.varnish-software.com/3.0/Saving_a_request.html#req-grace-and-beresp-grace
Мой подозреваемый в том, что я не входя в режим льготного, но единственная причина, почему я нашел на документации на не настроен health check, но если я смотрю в varnishlog
Я вижу, что проверка работоспособности работает нормально («Все еще здорово», «Поехали больным», ...)
Что мне не хватает? Есть способ получить то, что мне нужно?
varnishlog следы
Этот журнал, когда все идет хорошо (удаленный сервер и работает):
0 Backend_health - external Still healthy 4--X-RH 1 1 1 0.010659 0.010557 HTTP/1.1 200 OK
12 BackendClose - external
12 BackendOpen b external ...
12 TxRequest b GET
12 TxURL b ...
12 TxProtocol b HTTP/1.1
12 TxHeader b Cache-Control: max-age=0
12 TxHeader b Upgrade-Insecure-Requests: 1
12 TxHeader b User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
12 TxHeader b Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
12 TxHeader b Accept-Encoding: gzip, deflate, sdch, br
12 TxHeader b Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2
12 TxHeader b Cookie:...
12 TxHeader b If-None-Match: "6338e-4c0f-54429328f4d3d"
12 TxHeader b If-Modified-Since: Wed, 21 Dec 2016 11:10:16 GMT
12 TxHeader b Via: 1.1 ...
12 TxHeader b X-Forwarded-For: ...
12 TxHeader b X-Forwarded-Host: ...
12 TxHeader b X-Forwarded-Server: ...
12 TxHeader b host: ...
12 TxHeader b X-Varnish: 1305584183
12 RxProtocol b HTTP/1.1
12 RxStatus b 304
12 RxResponse b Not Modified
12 RxHeader b Date: Thu, 22 Dec 2016 09:25:21 GMT
12 RxHeader b Server: Apache/2.2.22 (Debian)
12 RxHeader b ETag: "6338e-4c0f-54429328f4d3d"
12 RxHeader b Vary: Accept-Encoding
12 Fetch_Body b 0(none) cls 0 mklen 0
12 Length b 0
12 BackendReuse b external
3 SessionOpen c ::1 60278 :6081
3 ReqStart c ::1 60278 1305584183
3 RxRequest c GET
3 RxURL c /VirtualHostBase/...
3 RxProtocol c HTTP/1.1
3 RxHeader c Host: localhost:6081
3 RxHeader c Cache-Control: max-age=0
3 RxHeader c Upgrade-Insecure-Requests: 1
3 RxHeader c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
3 RxHeader c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
3 RxHeader c Accept-Encoding: gzip, deflate, sdch, br
3 RxHeader c Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2
3 RxHeader c Cookie:...
3 RxHeader c If-None-Match: "6338e-4c0f-54429328f4d3d"
3 RxHeader c If-Modified-Since: Wed, 21 Dec 2016 11:10:16 GMT
3 RxHeader c Via: 1.1 ...
3 RxHeader c X-Forwarded-For: ...
3 RxHeader c X-Forwarded-Host: ...
3 RxHeader c X-Forwarded-Server: ...
3 RxHeader c Connection: Keep-Alive
3 VCL_call c recv pass
3 VCL_call c hash
3 Hash c http://...
3 Hash c ...
3 VCL_return c hash
3 VCL_call c pass pass
3 Backend c 12 external external
3 TTL c 1305584183 RFC -1 -1 -1 1482398514 0 1482398721 0 0
3 VCL_call c fetch
3 TTL c 1305584183 VCL -1 7200 -1 1482398514 -0
3 TTL c 1305584183 VCL 7200 7200 -1 1482398514 -0
3 TTL c 1305584183 VCL 60 7200 -1 1482398514 -0
3 VCL_return c deliver
3 ObjProtocol c HTTP/1.1
3 ObjResponse c Not Modified
3 ObjHeader c Date: Thu, 22 Dec 2016 09:25:21 GMT
3 ObjHeader c Server: Apache/2.2.22 (Debian)
3 ObjHeader c ETag: "6338e-4c0f-54429328f4d3d"
3 ObjHeader c Vary: Accept-Encoding
3 ObjHeader c X-Varnish-Action: Caching external.acme.com
3 VCL_call c deliver deliver
3 TxProtocol c HTTP/1.1
3 TxStatus c 304
3 TxResponse c Not Modified
3 TxHeader c Server: Apache/2.2.22 (Debian)
3 TxHeader c ETag: "6338e-4c0f-54429328f4d3d"
3 TxHeader c Vary: Accept-Encoding
3 TxHeader c X-Varnish-Action: Caching external.acme.com
3 TxHeader c Accept-Ranges: bytes
3 TxHeader c Date: Thu, 22 Dec 2016 09:21:53 GMT
3 TxHeader c X-Varnish: 1305584183
3 TxHeader c Age: 0
3 TxHeader c Via: 1.1 varnish
3 TxHeader c Connection: keep-alive
3 Length c 0
3 ReqEnd c 1305584183 1482398513.625868082 1482398513.630025387 0.000263691 0.004073620 0.000083685
3 SessionClose c EOF
3 StatSess c ::1 60278 0 1 1 0 1 1 290 0
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482398514 1.0
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482398517 1.0
0 Backend_health - external Still healthy 4--X-RH 1 1 1 0.010621 0.010573 HTTP/1.1 200 OK
Это то, что я вхожу, когда пульт идет вниз (но я до сих пор получить кэшированное содержание, TTL не была достигнута):
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482398997 1.0
0 Backend_health - external Went sick ------- 0 1 1 0.000000 0.010652
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482399000 1.0
3 SessionOpen c ::1 60382 :6081
3 ReqStart c ::1 60382 1305584190
3 RxRequest c GET
3 RxURL c /VirtualHostBase/https/...
3 RxProtocol c HTTP/1.1
3 RxHeader c Host: localhost:6081
3 RxHeader c Pragma: no-cache
3 RxHeader c Cache-Control: no-cache
3 RxHeader c Upgrade-Insecure-Requests: 1
3 RxHeader c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
3 RxHeader c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
3 RxHeader c Accept-Encoding: gzip, deflate, sdch, br
3 RxHeader c Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2
3 RxHeader c Cookie: ...
3 RxHeader c Via: 1.1 ...
3 RxHeader c X-Forwarded-For: ...
3 RxHeader c X-Forwarded-Host: ...
3 RxHeader c X-Forwarded-Server: ...
3 RxHeader c Connection: Keep-Alive
3 VCL_call c recv lookup
3 VCL_call c hash
3 Hash c http://...
3 Hash c ...
3 VCL_return c hash
3 Hit c 1305584185
3 VCL_call c hit deliver
3 VCL_call c deliver deliver
3 TxProtocol c HTTP/1.1
3 TxStatus c 200
3 TxResponse c OK
3 TxHeader c Server: Apache/2.2.22 (Debian)
3 TxHeader c Access-Control-Allow-Origin: *
3 TxHeader c Last-Modified: Wed, 21 Dec 2016 11:10:16 GMT
3 TxHeader c ETag: "6338e-4c0f-54429328f4d3d"
3 TxHeader c Vary: Accept-Encoding
3 TxHeader c Content-Encoding: gzip
3 TxHeader c Content-Type: text/html
3 TxHeader c X-Varnish-Action: Caching external.acme.com
3 TxHeader c Content-Length: 4367
3 TxHeader c Accept-Ranges: bytes
3 TxHeader c Date: Thu, 22 Dec 2016 09:30:03 GMT
3 TxHeader c X-Varnish: 1305584190 1305584185
3 TxHeader c Age: 39
3 TxHeader c Via: 1.1 varnish
3 TxHeader c Connection: keep-alive
3 Length c 4367
3 ReqEnd c 1305584190 1482399003.173985004 1482399003.174190044 0.000112534 0.000087976 0.000117064
3 SessionClose c EOF
3 StatSess c ::1 60382 0 1 1 0 0 0 441 4367
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482399003 1.0
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482399006 1.0
И, наконец, это ошибка я получаю после TTL в течение (после более чем минута)
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482399282 1.0
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482399285 1.0
12 SessionOpen c ::1 60412 :6081
12 ReqStart c ::1 60412 1305584191
12 RxRequest c GET
12 RxURL c /VirtualHostBase/https/...
12 RxProtocol c HTTP/1.1
12 RxHeader c Host: localhost:6081
12 RxHeader c Cache-Control: max-age=0
12 RxHeader c Upgrade-Insecure-Requests: 1
12 RxHeader c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
12 RxHeader c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
12 RxHeader c Accept-Encoding: gzip, deflate, sdch, br
12 RxHeader c Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2
12 RxHeader c Cookie: ...
12 RxHeader c If-None-Match: "6338e-4c0f-54429328f4d3d"
12 RxHeader c If-Modified-Since: Wed, 21 Dec 2016 11:10:16 GMT
12 RxHeader c Via: 1.1 ...
12 RxHeader c X-Forwarded-For: ...
12 RxHeader c X-Forwarded-Host: ...
12 RxHeader c X-Forwarded-Server: ...
12 RxHeader c Connection: Keep-Alive
12 VCL_call c recv pass
12 VCL_call c hash
12 Hash c http://...
12 Hash c ...
12 VCL_return c hash
12 VCL_call c pass pass
12 FetchError c no backend connection
12 VCL_call c error deliver
12 VCL_call c deliver deliver
12 TxProtocol c HTTP/1.1
12 TxStatus c 503
12 TxResponse c Service Unavailable
12 TxHeader c Server: Varnish
12 TxHeader c Content-Type: text/html; charset=utf-8
12 TxHeader c Retry-After: 5
12 TxHeader c Content-Length: 419
12 TxHeader c Accept-Ranges: bytes
12 TxHeader c Date: Thu, 22 Dec 2016 09:34:48 GMT
12 TxHeader c X-Varnish: 1305584191
12 TxHeader c Age: 0
12 TxHeader c Via: 1.1 varnish
12 TxHeader c Connection: close
12 Length c 419
12 ReqEnd c 1305584191 1482399288.281390190 1482399288.281631470 0.000269890 0.000148058 0.000093222
12 SessionClose c error
12 StatSess c ::1 60412 0 1 1 0 1 0 257 419
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482399288 1.0
0 Backend_health - external Still sick ------- 0 1 1 0.000000 0.010652
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1482399291 1.0
Спасибо за ответ и объяснение перезапуска (я полностью пропустил). Неверное удаление 'return (restart)' ничего не изменило. Я до сих пор получаю кешированный контент в течение 1 минуты, затем ошибка лака с 503 –
Если вы могли бы опубликовать журнал для запроса об ошибке, было бы легче определить проблему. Попытайтесь на varnishlog и опубликуйте все данные о неудавшемся запросе, я был бы рад отредактировать мой ответ. Я также предлагаю вам обновить свой лак до версии 4. Он имеет некоторые большие улучшения в производительности и как обрабатываются запросы и выборки. – alejdg
Hi again @alejdg Я отредактировал вопрос, добавив информацию о varnishlog –