Потратив несколько часов на настройку squid 3.2.5, я получил только TCP_MISS. Чтобы сузить проблему, я сосредоточусь на одном файле PNG, который я хочу кэшировать, но обратите внимание, что я получаю TCP_MISS для каждого отдельного запроса, а не только для файлов PNG. Файл PNG доступен по адресу этот адрес. Обновление не помогает.
Когда я пытаюсь загрузить его через squid, в access.log появляется такая строка:
1357671721.566 127 127.0.0.1 TCP_MISS / 200618 ПОЛУЧИТЬ http://flags.tatoeba.org/img/flags/epo.png - HIER_DIRECT / 86.65.39.22 изображение / png
И те, что в cache.log:
2013/01/08 20:02:59.768 kid1| client_side.cc(2298) parseHttpRequest: HTTP Client local=127.0.0.1:3303 remote=127.0.0.1:42816 FD 19 flags=1
2013/01/08 20:02:59.769 kid1| client_side.cc(2299) parseHttpRequest: HTTP Client REQUEST:
---------
GET http://flags.tatoeba.org/img/flags/epo.png HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: flags.tatoeba.org
Connection: Close
Proxy-Connection: Keep-Alive
----------
2013/01/08 20:02:59.856 kid1| http.cc(2221) httpStart: httpStart: "GET http://flags.tatoeba.org/img/flags/epo.png"
2013/01/08 20:02:59.856 kid1| http.cc(2177) sendRequest: HTTP Server local=192.168.1.13:56866 remote=86.65.39.22:80 FD 22 flags=1
2013/01/08 20:02:59.856 kid1| http.cc(2178) sendRequest: HTTP Server REQUEST:
---------
GET /img/flags/epo.png HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: flags.tatoeba.org
Via: 1.1 nomada (squid/3.2.5)
Cache-Control: max-age=15600540
Connection: keep-alive
----------
2013/01/08 20:02:59.898 kid1| ctx: enter level 0: 'http://flags.tatoeba.org/img/flags/epo.png'
2013/01/08 20:02:59.898 kid1| http.cc(689) processReplyHeader: processReplyHeader: key 'EA06B401749A4C13ED95E8B5788A3010'
2013/01/08 20:02:59.898 kid1| http.cc(732) processReplyHeader: HTTP Server local=192.168.1.13:56866 remote=86.65.39.22:80 FD 22 flags=1
2013/01/08 20:02:59.898 kid1| http.cc(733) processReplyHeader: HTTP Server REPLY:
---------
HTTP/1.1 200 OK
Date: Tue, 08 Jan 2013 19:03:18 GMT
Server: Apache/2.2.16 (Debian)
Accept-Ranges: bytes
Content-Length: 219
Vary: User-Agent
Expires: Fri, 21 Dec 2012 00:00:00 GMT
Cache-Control: public, no-transform
Content-Type: image/png
Via: 1.1 tatoeba.fsffrance.org
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
�PNG
----------
2013/01/08 20:02:59.898 kid1| ctx: exit level 0
2013/01/08 20:02:59.898 kid1| ctx: enter level 0: 'http://flags.tatoeba.org/img/flags/epo.png'
2013/01/08 20:02:59.898 kid1| http.cc(910) haveParsedReplyHeaders: haveParsedReplyHeaders: HTTP CODE: 200
2013/01/08 20:02:59.898 kid1| http.cc(640) httpMakeVaryMark: httpMakeVaryMark: user-agent="Wget%2F1.14%20(linux-gnu)"
2013/01/08 20:02:59.898 kid1| ctx: exit level 0
2013/01/08 20:02:59.899 kid1| client_side.cc(1362) sendStartOfMessage: HTTP Client local=127.0.0.1:3303 remote=127.0.0.1:42816 FD 19 flags=1
2013/01/08 20:02:59.899 kid1| client_side.cc(1363) sendStartOfMessage: HTTP Client REPLY:
---------
HTTP/1.1 200 OK
Date: Tue, 08 Jan 2013 19:03:18 GMT
Server: Apache/2.2.16 (Debian)
Accept-Ranges: bytes
Content-Length: 219
Vary: User-Agent
Expires: Fri, 21 Dec 2012 00:00:00 GMT
Cache-Control: public, no-transform
Content-Type: image/png
X-Cache: MISS from nomada
X-Cache-Lookup: MISS from nomada:3303
Via: 1.1 tatoeba.fsffrance.org, 1.1 nomada (squid/3.2.5)
Connection: keep-alive
----------
2013/01/08 20:02:59.899 kid1| http.cc(1044) persistentConnStatus: local=192.168.1.13:56866 remote=86.65.39.22:80 FD 22 flags=1 eof=0
Мой файл конфигурации очень похож на файл по умолчанию, за исключением нескольких изменений:
cache_effective_user squid
cache_effective_group squid
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
acl CONNECT method CONNECT
http_access allow localhost manager
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
debug_options ALL,1 11,3 31,3 65,3
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3303
cache_dir ufs /var/cache/squid 600 16 256
cache_mem 256 MB
coredump_dir /var/cache/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern -i \.(gif|png|jpg|jpeg|ico|bmp)$ 260000 90% 260009 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Мой каталог кеша принадлежит squid: squid, так что и с этой стороны проблем нет. И я в тупике для ответа.
Вот часть моего журнала access.log:
1357671487.203 212 127.0.0.1 TCP_MISS/200 8263 GET http://i2.ytimg.com/vi/mwKa-gjx14k/mqdefault.jpg - HIER_DIRECT/74.125.230.238 image/jpeg
1357671487.235 134 127.0.0.1 TCP_MISS/200 10762 GET http://i4.ytimg.com/vi/O0bftzEOt9c/mqdefault.jpg - HIER_DIRECT/74.125.230.224 image/jpeg
1357671487.296 253 127.0.0.1 TCP_MISS/200 7415 GET http://i4.ytimg.com/vi/GPUnq0JSqRk/mqdefault.jpg - HIER_DIRECT/74.125.230.224 image/jpeg
1357671488.188 474 127.0.0.1 TCP_MISS/200 294 POST http://serverfault.com/posts/0/editor-heartbeat/ask - HIER_DIRECT/69.59.197.21 application/json
1357671505.309 255 127.0.0.1 TCP_MISS/204 533 GET http://s.youtube.com/s? - HIER_DIRECT/74.125.230.224 text/html
1357671516.404 0 127.0.0.1 TCP_MISS/503 6350 GET http://s.youtube.com/s? - HIER_NONE/- text/html
1357671533.221 0 127.0.0.1 TCP_MISS/503 4106 POST http://serverfault.com/posts/0/editor-heartbeat/ask - HIER_NONE/- text/html
1357671582.022 481 127.0.0.1 TCP_MISS/200 439 POST http://serverfault.com/posts/0/editor-heartbeat/ask - HIER_DIRECT/69.59.197.21 application/json
1357671597.029 1543 127.0.0.1 TCP_MISS/200 9700 GET http://tatoeba.org/eng/sentences/show/673940 - HIER_DIRECT/86.65.39.22 text/html
1357671597.166 47 127.0.0.1 TCP_MISS/200 1426 GET http://tatoeba.org/js/sentences.random.js? - HIER_DIRECT/86.65.39.22 application/javascript
1357671597.205 86 127.0.0.1 TCP_MISS/200 2174 GET http://tatoeba.org/js/sentences_lists.menu.js? - HIER_DIRECT/86.65.39.22 application/javascript
1357671597.254 136 127.0.0.1 TCP_MISS/200 1522 GET http://css.tatoeba.org/css/sentences/show.css? - HIER_DIRECT/86.65.39.22 text/css
1357671597.254 136 127.0.0.1 TCP_MISS/200 1324 GET http://css.tatoeba.org/css/elements/furigana.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.254 48 127.0.0.1 TCP_MISS/200 1809 GET http://tatoeba.org/favicon.ico - HIER_DIRECT/86.65.39.22 image/x-icon
1357671597.258 137 127.0.0.1 TCP_MISS/200 1150 GET http://js.tatoeba.org/js/furigana.js - HIER_DIRECT/86.65.39.22 application/javascript
1357671597.258 139 127.0.0.1 TCP_MISS/200 1339 GET http://js.tatoeba.org/js/generic_functions.js? - HIER_DIRECT/86.65.39.22 application/javascript
1357671597.258 91 127.0.0.1 TCP_MISS/200 2471 GET http://js.tatoeba.org/js/autocompletion.js - HIER_DIRECT/86.65.39.22 application/javascript
1357671597.295 179 127.0.0.1 TCP_MISS/200 3232 GET http://css.tatoeba.org/css/layouts/default.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.332 39 127.0.0.1 TCP_MISS/200 1234 GET http://css.tatoeba.org/css/elements/navigation.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.339 43 127.0.0.1 TCP_MISS/200 1809 GET http://tatoeba.org/favicon.ico - HIER_DIRECT/86.65.39.22 image/x-icon
1357671597.342 49 127.0.0.1 TCP_MISS/200 1774 GET http://css.tatoeba.org/css/elements/sentences_group.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.377 82 127.0.0.1 TCP_MISS/200 1032 GET http://css.tatoeba.org/css/elements/logs_colors.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.384 90 127.0.0.1 TCP_MISS/200 1014 GET http://css.tatoeba.org/css/elements/comment.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.384 89 127.0.0.1 TCP_MISS/200 1124 GET http://css.tatoeba.org/css/elements/autocompletion.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.384 89 127.0.0.1 TCP_MISS/200 1023 GET http://css.tatoeba.org/css/elements/logs_annexe.css - HIER_DIRECT/86.65.39.22 text/css
1357671597.410 292 127.0.0.1 TCP_MISS/200 21703 GET http://js.tatoeba.org/js/jquery-mini.js - HIER_DIRECT/86.65.39.22 application/javascript
1357671597.794 131 127.0.0.1 TCP_MISS/200 1284 GET http://flags.tatoeba.org/img/valid_16x16.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.795 133 127.0.0.1 TCP_MISS/200 595 GET http://flags.tatoeba.org/img/arrow_down.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.800 137 127.0.0.1 TCP_MISS/200 1256 GET http://flags.tatoeba.org/img/add_to_list.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.801 137 127.0.0.1 TCP_MISS/200 618 GET http://flags.tatoeba.org/img/flags/epo.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.846 50 127.0.0.1 TCP_MISS/200 1180 GET http://flags.tatoeba.org/img/direct_translation.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.846 51 127.0.0.1 TCP_MISS/200 3008 GET http://flags.tatoeba.org/img/loading.gif - HIER_DIRECT/86.65.39.22 image/gif
1357671597.846 45 127.0.0.1 TCP_MISS/200 1539 GET http://flags.tatoeba.org/img/flags/eng.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.847 45 127.0.0.1 TCP_MISS/200 532 GET http://flags.tatoeba.org/img/flags/nld.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.860 197 127.0.0.1 TCP_MISS/200 1072 GET http://flags.tatoeba.org/img/loading-small.gif - HIER_DIRECT/86.65.39.22 image/gif
1357671597.887 224 127.0.0.1 TCP_MISS/200 16497 GET http://flags.tatoeba.org/img/TatoebaProjectBeta.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.892 45 127.0.0.1 TCP_MISS/200 1031 GET http://flags.tatoeba.org/img/indirect_translation.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.892 45 127.0.0.1 TCP_MISS/200 520 GET http://flags.tatoeba.org/img/flags/ita.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.892 45 127.0.0.1 TCP_MISS/200 525 GET http://flags.tatoeba.org/img/flags/deu.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.892 44 127.0.0.1 TCP_MISS/200 718 GET http://flags.tatoeba.org/img/flags/jpn.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.908 47 127.0.0.1 TCP_MISS/200 541 GET http://css.tatoeba.org/img/bg_main.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.930 43 127.0.0.1 TCP_MISS/200 694 GET http://css.tatoeba.org/img/search_bar_body.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.933 39 127.0.0.1 TCP_MISS/200 584 GET http://css.tatoeba.org/img/module_background.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.935 42 127.0.0.1 TCP_MISS/200 1572 GET http://css.tatoeba.org/img/search_bar_right.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.936 43 127.0.0.1 TCP_MISS/200 1574 GET http://css.tatoeba.org/img/search_bar_left.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.936 42 127.0.0.1 TCP_MISS/200 1378 GET http://css.tatoeba.org/img/title.png - HIER_DIRECT/86.65.39.22 image/png
1357671597.954 45 127.0.0.1 TCP_MISS/200 1026 GET http://css.tatoeba.org/img/audio_unavailable.png - HIER_DIRECT/86.65.39.22 image/png
Вышестоящий веб-сервер возвращает время истечения срока в прошлом, что заставит Squid немедленно считать объект устаревшим.
Expires: Fri, 21 Dec 2012 00:00:00 GMT
Это похоже на жестко запрограммированную временную метку, вы, вероятно, хотите, чтобы веб-сервер возвращал относительную временную метку истечения срока (например, сейчас плюс 1 месяц).
Если вы нашли этот ответ, потому что Squid не кэширует ожидаемые объекты, попробуйте установить debug_options = ALL,2
в /etc/squid3/squid.conf
.
Обратите внимание на такие строки после регистрации заголовков ответов:
store.cc(1003) checkCachable: StoreEntry::checkCachable: NO: too big
Это может быть вызвано maximum_object_size
установлен слишком низким (по умолчанию 4 МБ) или Баг Squid описан здесь (также подано на панели запуска Ubuntu) что приводит к maximum_object_size
игнорировать, если это происходит после cache_dir
в squid.conf
, что он делает в стандартном шаблоне файла распределенной конфигурации.
store.cc(994) checkCachable: StoreEntry::checkCachable: NO: not cachable
Отсутствие кеширования также может быть вызвано тем, что удаленный сервер пытается отключить кэширование клиента или прокси, отправляя различные заголовки вместе с ответом (как описано в Стандарт HTTP), например:
Expires
с датой в прошлом (с немедленным истечением срока действия), илиCache-control: no-cache
или Cache-control: private
.Клиент (например, веб-браузер) также может явно отключить кеширование. Например, если вы используете опцию Reload или force-reload, которая зависит от браузера, но обычно:
Затем браузер явно отключит кеширование, возможно, используя один из следующих механизмов (см. Также RFC 2616 раздел 14.9.4):
Иногда пользовательский агент может захотеть или должен настоять на том, чтобы кэш повторно подтвердил свою запись кэша с исходным сервером (а не только со следующим кешем по пути к исходному серверу) или перезагрузить свою запись кеша с исходного сервера. Сквозная повторная проверка может потребоваться, если либо кэш, либо исходный сервер переоценили время истечения кэшированного ответа. Сквозная перезагрузка может потребоваться, если запись кэша по какой-либо причине была повреждена.
Клиент может указать эти три вида действий с помощью директив запроса Cache-Control: ...
Запрос включает директиву управления кешем «no-cache» или, для совместимости с клиентами HTTP / 1.0, «Pragma: no-cache».
Если вы хотите убедиться, что клиент не делает что-то для преднамеренного отключения кеширования, вы можете протестировать его, загрузив тот же файл с помощью wget
, используя прокси-сервер Squid / HTTP:
http_proxy=http://yourproxy:3128 wget -O /dev/null http://yourhost/yourfile
И проверьте журналы Squid, чтобы узнать, что произошло с запросом, и решил ли Squid кэшировать ответ и почему (см. Выше).