Как заставить squid кешировать все страницы?
(например эту http://forum.ru-board.com/forum.cgi?forum=8)
hierarchy_stoplist
no_cache
>hierarchy_stoplist
>no_cacheсорри, сразу не сказал версию squid-а:
squid-2.6.STABLE14 (15 Jul 2007) for NTЯ не использую parent proxy по-этому hierarchy_stoplist в моем случае мало на что влияет (хотя на всякий случай попробовал закоментировать/установить regex "." - не помогло)
no_cache в STABLE14, насколько я понял, заменена на cache (хотя no_cache тоже поддерживаеться для совместимости) и по-умолчанию "cache allow all" и я не добавлял ограничений на тот урл который привел в качестве примера.
После долгих экспериментов удалось выяснить следующее:
Для всех некэшируемых страниц сервера выдают тег "Cache-control" примерно следующего содержания:
"Cache-control: no-cache, must-revalidate, no-store"
если перед squid-ом поставить Proxomitron и им вырезать данный тег то страницы начинают кэшироваться, но я не нашел команды конфига как заставить SQUID делать то-же что делал Proxomitron. ("header_access Cache-Control deny all" не помогает - на выходе squid-а данного тега уже нет но свое ченое дело он делает - страница не кешируеться)В связи с вышеизложенным у меня два вопроса:
1. можно ли вышеупомянутой цели добиться правкой конфига (и чего править)
2. если нельзя исправить в конфиге то где править в исходниках.
а если это?
refresh_pattern options: ignore-no-cache
>а если это?
>refresh_pattern options: ignore-no-cacheНе не то. Это игнорирует только запрос клиента.
На всякий случай привожу свой конфиг:###hierarchy_stoplist cgi-bin ?
##cache deny QUERY
acl URLS_CACHE_ALLOW urlpath_regex "c:/squid/etc/urls_cache_allow.conf"
acl URLS_CACHE_DENY urlpath_regex "c:/squid/etc/urls_cache_deny.conf"
cache allow URLS_CACHE_ALLOW
cache deny URLS_CACHE_DENYmaximum_object_size_in_memory 128 KB
cache_dir ufs e:/var/squid/cache 4096 16 256dns_nameservers 127.0.0.1
##refresh_pattern . 0 20% 4320
refresh_pattern . 100000000 80% 100000000 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private ignore-auth
quick_abort_max 128 KB
acl our_networks src 192.168.1.0/24 192.168.2.0/24
http_access allow our_networks
http_access allow localhost
visible_hostname Squid
reload_into_ims on
error_directory c:/squid/share/errors/Russian-1251
uri_whitespace allow
strip_query_terms off
coredump_dir e:/var/squid/cache
request_entities on
vary_ignore_expire on
sleep_after_fork 50
>а если это?
>refresh_pattern options: ignore-no-cacheВсетаки Вы правы. Сейчас прерчитал еще раз squid.conf действительно ignore-no-cache - это то, что мне нужно но _реально_ не влияет на результат.
to All
Ну что, похоже явный баг? Может кто-нибудь запостит разработчикам(а то я в английском не силен и никогда не писал в багрепорт)?
ps. Первый вопрос снимается остается только второй: где править исходники?
>Как заставить squid кешировать все страницы?
>(например эту http://forum.ru-board.com/forum.cgi?forum=8)to All
Все вопросы снимаю. Нашел/исправил баг, вот патч для squid-2.6.STABLE16:
diff -r ../squid-2.6.STABLE16/src/http.c ./src/http.c
244c244,246
< if (EBIT_TEST(cc_mask, CC_NO_STORE))
---
> // --== My edit 12.09.07
> //if (EBIT_TEST(cc_mask, CC_NO_STORE))
> if (EBIT_TEST(cc_mask, CC_NO_STORE) && !REFRESH_OVERRIDE(ignore_no_cache))Ps: Кстати в squid-3.0.PRE7 аналогичный баг.
PPs: Я так понял мало кто использует SQUID для просмотра страниц в оффлайне а зря.
я пытаюсь использовать =)
тоже заткнулся на этом параметре must-revalidate
сижу читаю комменты в конфиге, рою инет, пока ничего
>я пытаюсь использовать =)Ну хоть один нашелся!
>тоже заткнулся на этом параметре must-revalidate
Этот параметр в данном случае не при чем.
На сколько я разобрался в вопросе(и уже нашел решение) на данный момент имеется два
вида неправильных сайтов/страниц которые никакими ухищрениями с конфигами
не устраняться:1. Сайты выдающие HTTP команду
"Cache-Control: no-store"
пример страницы приведен выше
(там кстати выдается команда "Cache-Control: no-cache, must-revalidate, no-store").
2. Сайты выдающие HTTP команду
"Expires: -1"
пример "http://www.microsoft.com/technet/technetmag/issues/2007/03/H...По случаю 1. имеет место обычная ошибка: параметр squid-а "ignore-no-cache"
не действует на "Cache-Control: no-store" т.к. в исходниках (http.c)для "Cache-Control: no-store" в строке:
if (EBIT_TEST(cc_mask, CC_NO_STORE))пропущена часть которая присутствует в строке выше для "Cache-Control: no-cache":
if (EBIT_TEST(cc_mask, CC_NO_CACHE) && !REFRESH_OVERRIDE(ignore_no_cache))т.е. для "Cache-Control: no-store" строка должна выглядеть так:
if (EBIT_TEST(cc_mask, CC_NO_STORE) && !REFRESH_OVERRIDE(ignore_no_cache))Патч для данного случая описан в предидущем моем посте.
По случаю 2. Здесь сложнее (в смысле надо править несколько строк все того же http.c)по-этому привожу полный патч для случая 1 и 2:
diff -Nur squid-2.6.STABLE16/src/http.c squid-2.6.STABLE16-P1/src/http.c
--- squid-2.6.STABLE16/src/http.c Sun Jul 22 00:05:55 2007
+++ squid-2.6.STABLE16-P1/src/http.c Tue Sep 18 19:18:20 2007
@@ -241,7 +241,9 @@
return 0;
if (EBIT_TEST(cc_mask, CC_NO_CACHE) && !REFRESH_OVERRIDE(ignore_no_cache))
return 0;
- if (EBIT_TEST(cc_mask, CC_NO_STORE))
+ /* --== My Edit 18.09.07
+ if (EBIT_TEST(cc_mask, CC_NO_STORE)) */
+ if (EBIT_TEST(cc_mask, CC_NO_STORE) && !REFRESH_OVERRIDE(ignore_no_cache))
return 0;
if (httpState->request->flags.auth_sent) {
/*
@@ -266,6 +268,8 @@
* continuous push replies. These are generally dynamic and
* probably should not be cachable
*/
+ /*--==My_Add==--*/
+ if ( !REFRESH_OVERRIDE(ignore_no_cache) )
if ((v = httpHeaderGetStr(hdr, HDR_CONTENT_TYPE)))
if (!strncasecmp(v, "multipart/x-mixed-replace", 25))
return 0;
@@ -280,10 +284,14 @@
* Don't cache objects that need to be refreshed on next request,
* unless we know how to refresh it.
*/
+ /*--==My_Add==--*/
+ if ( REFRESH_OVERRIDE(ignore_no_cache) )
+ return 1; /*--==My_Add==--*/
if (!refreshIsCachable(httpState->entry))
return 0;
/* don't cache objects from peers w/o LMT, Date, or Expires */
/* check that is it enough to check headers @?@ */
+ if ( !REFRESH_OVERRIDE(ignore_no_cache) )
if (rep->date > -1)
return 1;
else if (rep->last_modified > -1)Компилировать надо обязательно с включенной опцией
--enable-http-violationsвот и все. Все работает. На данный момент у меня все страницы кэшируються.
поставил squid-3.0_rc1 поглядим на его поведение, если аналогично будет, откачусь до 2.6, поставлю твой патч
для справки...
must-revalidate сообщает кэшу, что он должен соблюдать все требования в отношении новизны объекта, которые вы предъявляете.proxy-revalidate аналогичен must-reva-lidate, за тем исключением, что он применим только к кэширующим посредникам.
патчик не накладывается !?
>патчик не накладывается !?Скорее всего из-за замены табуляций на пробелы.
Выкладываю тот же патч в кодировке MIME Base64 (Total Commander):
MIME-Version: 1.0
Content-Type: application/octet-stream; name="squid-2.6.STABLE16-P1.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="squid-2.6.STABLE16-P1.patch"ZGlmZiAtTnVyIHNxdWlkLTIuNi5TVEFCTEUxNi9zcmMvaHR0cC5jIHNxdWlkLTIuNi5TVEFCTEUx
Ni1QMS9zcmMvaHR0cC5jCi0tLSBzcXVpZC0yLjYuU1RBQkxFMTYvc3JjL2h0dHAuYwlTdW4gSnVs
IDIyIDAwOjA1OjU1IDIwMDcKKysrIHNxdWlkLTIuNi5TVEFCTEUxNi1QMS9zcmMvaHR0cC5jCVR1
ZSBTZXAgMTggMTk6MTg6MjAgMjAwNwpAQCAtMjQxLDcgKzI0MSw5IEBACiAJcmV0dXJuIDA7CiAg
ICAgaWYgKEVCSVRfVEVTVChjY19tYXNrLCBDQ19OT19DQUNIRSkgJiYgIVJFRlJFU0hfT1ZFUlJJ
REUoaWdub3JlX25vX2NhY2hlKSkKIAlyZXR1cm4gMDsKLSAgICBpZiAoRUJJVF9URVNUKGNjX21h
c2ssIENDX05PX1NUT1JFKSkKKyAgICAvKgktLT09IE15IEVkaXQgMTguMDkuMDcKKyAgICBpZiAo
RUJJVF9URVNUKGNjX21hc2ssIENDX05PX1NUT1JFKSkgKi8KKyAgICBpZiAoRUJJVF9URVNUKGNj
X21hc2ssIENDX05PX1NUT1JFKSAmJiAhUkVGUkVTSF9PVkVSUklERShpZ25vcmVfbm9fY2FjaGUp
KQogCXJldHVybiAwOwogICAgIGlmIChodHRwU3RhdGUtPnJlcXVlc3QtPmZsYWdzLmF1dGhfc2Vu
dCkgewogCS8qCkBAIC0yNjYsNiArMjY4LDggQEAKICAgICAgKiBjb250aW51b3VzIHB1c2ggcmVw
bGllcy4gIFRoZXNlIGFyZSBnZW5lcmFsbHkgZHluYW1pYyBhbmQKICAgICAgKiBwcm9iYWJseSBz
aG91bGQgbm90IGJlIGNhY2hhYmxlCiAgICAgICovCisgICAgLyotLT09TXlfQWRkPT0tLSovCisg
ICAgaWYgKCAhUkVGUkVTSF9PVkVSUklERShpZ25vcmVfbm9fY2FjaGUpICkgCiAgICAgaWYgKCh2
ID0gaHR0cEhlYWRlckdldFN0cihoZHIsIEhEUl9DT05URU5UX1RZUEUpKSkKIAlpZiAoIXN0cm5j
YXNlY21wKHYsICJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIiwgMjUpKQogCSAgICByZXR1cm4g
MDsKQEAgLTI4MCwxMCArMjg0LDE0IEBACiAJICogRG9uJ3QgY2FjaGUgb2JqZWN0cyB0aGF0IG5l
ZWQgdG8gYmUgcmVmcmVzaGVkIG9uIG5leHQgcmVxdWVzdCwKIAkgKiB1bmxlc3Mgd2Uga25vdyBo
b3cgdG8gcmVmcmVzaCBpdC4KIAkgKi8KKyAgICAgICAgLyotLT09TXlfQWRkPT0tLSovCisgICAg
ICAgIGlmICggUkVGUkVTSF9PVkVSUklERShpZ25vcmVfbm9fY2FjaGUpICkgCisgICAgICAgICAg
IHJldHVybiAxOyAvKi0tPT1NeV9BZGQ9PS0tKi8KIAlpZiAoIXJlZnJlc2hJc0NhY2hhYmxlKGh0
dHBTdGF0ZS0+ZW50cnkpKQogCSAgICByZXR1cm4gMDsKIAkvKiBkb24ndCBjYWNoZSBvYmplY3Rz
IGZyb20gcGVlcnMgdy9vIExNVCwgRGF0ZSwgb3IgRXhwaXJlcyAqLwogCS8qIGNoZWNrIHRoYXQg
aXMgaXQgZW5vdWdoIHRvIGNoZWNrIGhlYWRlcnMgQD9AICovCisgICAgICAgIGlmICggIVJFRlJF
U0hfT1ZFUlJJREUoaWdub3JlX25vX2NhY2hlKSApIAogCWlmIChyZXAtPmRhdGUgPiAtMSkKIAkg
ICAgcmV0dXJuIDE7CiAJZWxzZSBpZiAocmVwLT5sYXN0X21vZGlmaWVkID4gLTEpCg==
Декодировать можно Total Commander-ом.
спасибо.
всё работает!
для 3.0.RC1
можешь патчик написать, буду признателен
>для 3.0.RC1
>можешь патчик написать, буду признателенСразу для 3.0.STABLE1. Но есть одно "НО": по крайней мере на XP некоторые страницы хотя на диске сохраняються нормально в индексном файле прописываються с ошибкой и пока не удалиш/создаш заново индексный файл в оффлайне такие страницы вызывают ошибку чтения.
MIME-Version: 1.0
Content-Type: application/octet-stream; name="squid-3.0.STABLE1-P1.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="squid-3.0.STABLE1-P1.patch"LS0tIHNxdWlkLTMuMC5TVEFCTEUxL3NyYy9odHRwLmNjCTIwMDctMTEtMTkgMDA6MDA6NTggKzAy
MDAKKysrIHNxdWlkLTMuMC5TVEFCTEUxLVAxL3NyYy9odHRwLmNjCTIwMDctMTItMTggMjA6NTU6
MjIgKzAyMDAKQEAgLTQzOCw2ICs0MzgsOCBAQAogICAgICAqIGNvbnRpbnVvdXMgcHVzaCByZXBs
aWVzLiAgVGhlc2UgYXJlIGdlbmVyYWxseSBkeW5hbWljIGFuZAogICAgICAqIHByb2JhYmx5IHNo
b3VsZCBub3QgYmUgY2FjaGFibGUKICAgICAgKi8KKyAgICAvKi0tPT1NeV9BZGQ9PS0tKi8KKyAg
ICBpZiAoICFSRUZSRVNIX09WRVJSSURFKGlnbm9yZV9ub19jYWNoZSkgKSAKICAgICBpZiAoKHYg
PSBoZHItPmdldFN0cihIRFJfQ09OVEVOVF9UWVBFKSkpCiAgICAgICAgIGlmICghc3RybmNhc2Vj
bXAodiwgIm11bHRpcGFydC94LW1peGVkLXJlcGxhY2UiLCAyNSkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKQEAgLTQ1OSw2ICs0NjEsOCBAQAogICAgICAgICAgKiB1bmxlc3Mgd2Uga25vdyBob3cg
dG8gcmVmcmVzaCBpdC4KICAgICAgICAgICovCiAKKyAgICAgICAgLyotLT09TXlfQWRkPT0tLSov
CisgICAgICAgIGlmICggIVJFRlJFU0hfT1ZFUlJJREUoaWdub3JlX25vX2NhY2hlKSApIAogICAg
ICAgICBpZiAoIXJlZnJlc2hJc0NhY2hhYmxlKGVudHJ5KSkgewogICAgICAgICAgICAgZGVidWdz
KDIyLCAzLCAicmVmcmVzaElzQ2FjaGFibGUoKSByZXR1cm5lZCBub24tY2FjaGVhYmxlLi4iKTsK
ICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtNDc0LDcgKzQ3OCw5IEBACiAgICAgICAgICAgICBy
ZXR1cm4gMTsKIAogICAgICAgICAvKiBAP0AgKGhlcmUgYW5kIDMwMik6IGludmFsaWQgZXhwaXJl
cyBoZWFkZXIgY29tcGlsZXMgdG8gc3F1aWRfY3VydGltZSAqLwotICAgICAgICBlbHNlIGlmIChy
ZXAtPmV4cGlyZXMgPiAtMSkKKyAgICAgICAgLyotLT09TXlfQ2hhbmdlPT0tLSovCisgICAgICAg
IC8qIGVsc2UgaWYgKHJlcC0+ZXhwaXJlcyA+IC0xKSAqLworICAgICAgICBlbHNlIGlmICggKHJl
cC0+ZXhwaXJlcyA+IC0xKSB8fCBSRUZSRVNIX09WRVJSSURFKGlnbm9yZV9ub19jYWNoZSkgKQog
ICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAw
OwpAQCAtNDg2LDcgKzQ5Miw5IEBACiAKICAgICBjYXNlIEhUVFBfTU9WRURfVEVNUE9SQVJJTFk6
CiAgICAgY2FzZSBIVFRQX1RFTVBPUkFSWV9SRURJUkVDVDoKLSAgICAgICAgaWYgKHJlcC0+ZXhw
aXJlcyA+IHJlcC0+ZGF0ZSAmJiByZXAtPmRhdGUgPiAwKQorICAgICAgICAvKi0tPT1NeV9DaGFu
Z2U9PS0tKi8KKyAgICAgICAgLyogaWYgKHJlcC0+ZXhwaXJlcyA+IHJlcC0+ZGF0ZSAmJiByZXAt
PmRhdGUgPiAwKSAqLworICAgICAgICBpZiAoIChyZXAtPmV4cGlyZXMgPiByZXAtPmRhdGUgJiYg
cmVwLT5kYXRlID4gMCkgfHwgUkVGUkVTSF9PVkVSUklERShpZ25vcmVfbm9fY2FjaGUpICkKICAg
ICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMDsK
>>для 3.0.RC1
>>можешь патчик написать, буду признателенКто-нибудь знает - на текущий момент вышеописанные баги так и не пофиксены в squid-3.0.STABLE10? Есть ли по ним багрепорт, на который можно подписаться?
А то я испытываю схожие проблемы, не хотят кешироваться html-странички, постоянно сквид лезет за новыми.