URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID12
Нить номер: 5098
[ Назад ]

Исходное сообщение
"squid: кешировать _ВСЕ_"

Отправлено Tst , 08-Сен-07 02:02 
Как заставить squid кешировать все страницы?
(например эту http://forum.ru-board.com/forum.cgi?forum=8)

Содержание

Сообщения в этом обсуждении
"squid: кешировать _ВСЕ_"
Отправлено reader , 08-Сен-07 14:07 
hierarchy_stoplist
no_cache

"squid: кешировать _ВСЕ_"
Отправлено Tst , 09-Сен-07 01:04 
>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. если нельзя исправить в конфиге то где править в исходниках.


"squid: кешировать _ВСЕ_"
Отправлено reader , 09-Сен-07 02:10 
а если это?
refresh_pattern  options: ignore-no-cache


"squid: кешировать _ВСЕ_"
Отправлено Tst , 09-Сен-07 04:43 
>а если это?
>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_DENY

maximum_object_size_in_memory 128 KB
cache_dir ufs e:/var/squid/cache 4096 16 256

dns_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



"squid: кешировать _ВСЕ_"
Отправлено Tst , 09-Сен-07 16:07 
>а если это?
>refresh_pattern  options: ignore-no-cache

Всетаки Вы правы. Сейчас прерчитал еще раз squid.conf действительно ignore-no-cache - это то, что мне нужно но _реально_ не влияет на результат.

to All

Ну что, похоже явный баг? Может кто-нибудь запостит разработчикам(а то я в английском не силен и никогда не писал в багрепорт)?

ps. Первый вопрос снимается остается только второй: где править исходники?


"squid: кешировать _ВСЕ_"
Отправлено Tst , 13-Сен-07 17:00 
>Как заставить 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 для просмотра страниц в оффлайне а зря.


"squid: кешировать _ВСЕ_"
Отправлено psychos , 25-Окт-07 18:15 
я пытаюсь использовать =)
тоже заткнулся на этом параметре must-revalidate
сижу читаю комменты в конфиге, рою инет, пока ничего

"squid: кешировать _ВСЕ_"
Отправлено Tst , 11-Ноя-07 04:28 
>я пытаюсь использовать =)

Ну хоть один нашелся!

>тоже заткнулся на этом параметре 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: кешировать _ВСЕ_"
Отправлено psychos , 17-Ноя-07 00:51 
поставил squid-3.0_rc1 поглядим на его поведение, если аналогично будет, откачусь до 2.6, поставлю твой патч

"squid: кешировать _ВСЕ_"
Отправлено psychos , 25-Окт-07 18:40 
для справки...
must-revalidate сообщает кэшу, что он должен соблюдать все требования в отношении новизны объекта, которые вы предъявляете.

proxy-revalidate аналогичен must-reva-lidate, за тем исключением, что он применим только к кэширующим посредникам.


"squid: кешировать _ВСЕ_"
Отправлено unknown , 21-Ноя-07 18:57 
патчик не накладывается !?


"squid: кешировать _ВСЕ_"
Отправлено Tst , 23-Ноя-07 20:54 
>патчик не накладывается !?

Скорее всего из-за замены табуляций на пробелы.
Выкладываю тот же патч в кодировке 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-ом.


"squid: кешировать _ВСЕ_"
Отправлено unknown , 26-Ноя-07 12:06 
спасибо.
всё работает!

"squid: кешировать _ВСЕ_"
Отправлено psychos , 05-Дек-07 23:28 
для 3.0.RC1
можешь патчик написать, буду признателен

"squid: кешировать _ВСЕ_"
Отправлено Tst , 19-Дек-07 18:28 
>для 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



"squid: кешировать _ВСЕ_"
Отправлено Murz , 30-Окт-08 13:46 
>>для 3.0.RC1
>>можешь патчик написать, буду признателен

Кто-нибудь знает - на текущий момент вышеописанные баги так и не пофиксены в squid-3.0.STABLE10? Есть ли по ним багрепорт, на который можно подписаться?

А то я испытываю схожие проблемы, не хотят кешироваться html-странички, постоянно сквид лезет за новыми.