Busqueda sobre Linux y software libre

Noticias sobre linux y software libre - Google 

Cache para un Proxy transparente con Squid 3 parece no funcionar

Pregunta


Tengo un servidor en casa que me sirve para compartir música, archivos, Internet, DNS, etc ... todo lo usual para una red hogareña.

Tengo squid 3 configurado como un proxy transparente, la idea general es tener el cache funcionando para que pueda mejorar la velocidad mientras se navega, hay 5 computadoras compartiendo una conexión de 512 Kbps

Squid 3 funciona bien, esta configurado y comparte internet correctamente, pero en los registros de acceso, me acabo de dar cuenta que squid 3 no utiliza el cache, baja todos los contenidos una y otra ves esta es su configuración:

$ cat /etc/squid3/squid.conf | grep -v "^# *" | grep -v "^$"
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 127.0.0.1/32    # RFC1918 possible internal network
acl our_networks src 192.168.2.0/24
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 631        
acl Safe_ports port 873        
acl Safe_ports port 901        
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow our_networks
http_access deny all
http_port 3128 accel vhost vport=80
hierarchy_stoplist cgi-bin ?
cache_mem 300 MB
maximum_object_size_in_memory 10240 KB
cache_replacement_policy lru
cache_dir ufs /var/spool/squid3 7000 32 512
maximum_object_size 320010 KB
cache_store_log none
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:        1440    20%    10080
refresh_pattern ^gopher:    1440    0%    1440
refresh_pattern -i (/cgi-bin/|\?) 0    0%    0
refresh_pattern deb$   129600 100% 129600
refresh_pattern udeb$   129600 100% 129600
refresh_pattern tar.gz$  129600 100% 129600
refresh_pattern changelogs.ubuntu.com/*  0  1% 1
acl ads_regex   url_regex -i    [./]banners*[./?]
acl ads_regex   url_regex -i    [./]bannerserver[./?]
acl ads_regex   url_regex -i    [./]bannerbank[./?]
acl ads_regex   url_regex -i    [./]bannerfarm[./?]
acl ads_regex   url_regex -i    \.linkexchange\.ru:*[0123456789]*/
acl ads_regex   url_regex -i    [./]adv[./?]
acl ads_regex   url_regex -i    /count.*\?
acl ads_regex   url_regex -i    /ping.*\?
acl ads_regex   url_regex -i    [./]adserver
acl ads_regex   url_regex -i    /phpAdsNew.*/ad.*\.php\?
acl ads_regex   url_regex -i    /adsystem.*/ad.*\.php\?
acl ads_regex   url_regex -i    ^http://ad\.doubleclick\.net:*[0123456789]*/ad./
acl ads_regex   url_regex -i    ^http://pagead2\.googlesyndication\.com:*[0123456789]*/pagead/ads\??
acl ads_regex   url_regex -i    ^http://pagead2\.googlesyndication\.com:*[0123456789]*/pagead/show_ads\.js
acl ads_regex   url_regex -i    ^http://www\.clx\.ru:*[0123456789]*/rot\.php?
acl ads_regex   url_regex -i    ^http://oz\.valueclick\.com:*[0123456789]*/cycle\?
http_access deny ads_regex
refresh_pattern -i [.]jpg$      2880    50%     2880000 override-lastmod ignore-reload
refresh_pattern -i [.]jpeg$     2880    50%     2880000 override-lastmod ignore-reload
refresh_pattern -i [.]gif$      2880    50%     2880000 override-lastmod ignore-reload
refresh_pattern -i [.]png$      2880    50%     2880000 override-lastmod ignore-reload
refresh_pattern -i [.]swf$      2880    50%     2880000 override-lastmod ignore-reload
refresh_pattern -i [.]mp[g123]$ 2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]mpeg$     2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]avi$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]gz$       2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]tgz$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]bz$       2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]bz2$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]zip$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]arj$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]rar$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]dat$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]php$      0       20%     28800
refresh_pattern -i /$           2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]htm$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]html$     2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]xml$      2880    50%     2880000 override-lastmod reload-into-ims
refresh_pattern -i [.]css$      2880    50%     2880000 override-lastmod ignore-reload
refresh_pattern -i [.]js$       2880    50%     2880000 override-lastmod ignore-reload
refresh_pattern .               0       50%     28800
visible_hostname s1.oficina.local
always_direct allow all
hosts_file /etc/hosts

Como ya notaron tengo un moton de reglas de patrones de refresco, todas para poder optimizar la descarga, ya saben no descargar dos veces el mismo archivo, poner en cache cosas como imagenes, música, video, etc...

Aquí esta el log del acceso de squid 3

$ sudo tail -f /var/log/squid3/access.log 
1291598367.169    306 192.168.2.90 TCP_MISS/200 1979 GET http://wikileaks.ch/static/css/reset-fonts-grids.css - DIRECT/213.251.145.96 text/css
1291598367.177    312 192.168.2.90 TCP_MISS/304 217 GET http://wikileaks.ch/img/ja-cg.jpg - DIRECT/213.251.145.96 -
1291598367.453    577 192.168.2.90 TCP_MISS/304 217 GEThttp://wikileaks.ch/static/gfx/WL_Hour_Glass_small.png - DIRECT/213.251.145.96 -
1291598370.473   3604 192.168.2.90 TCP_MISS/200 1849 GET http://wikileaks.ch/static/css/cables.css - DIRECT/213.251.145.96 text/css
1291598370.857   3948 192.168.2.90 TCP_MISS/200 15316 GET http://wikileaks.ch/static/gfx/graphic.png - DIRECT/213.251.145.96 image/png
1291598401.342    286 192.168.2.90 TCP_MISS/304 217 GET http://wikileaks.ch/reldate/2010-12-04_0.html - DIRECT/213.251.145.96 -
1291598410.391  56533 192.168.2.90 TCP_MISS/000 0 GET http://wikileaks.ch/media.html - DIRECT/213.251.145.96 -
1291598423.507   7137 192.168.2.90 TCP_MISS/200 10143 GET http://wikileaks.ch/reldate/2010-12-01_0.html - DIRECT/213.251.145.96 text/html
1291598433.848  30362 192.168.2.90 TCP_MISS/000 0 GET http://wikileaks.ch/reldate/2010-12-05_0.html - DIRECT/213.251.145.96 -
1291598445.552   3939 192.168.2.90 TCP_MISS/200 11445 GEThttp://wikileaks.ch/cable/2008/07/08LONDON1837.html - DIRECT/213.251.145.96 text/html
1291598445.941  12088 192.168.2.90 TCP_MISS/000 0 GET http://wikileaks.ch/reldate/2010-12-05_0.html - DIRECT/213.251.145.96 -
1291598446.161    213 192.168.2.90 TCP_MISS/000 0 GET http://wikileaks.ch/reldate/2010-12-05_0.html - DIRECT/wikileaks.ch -
1291598457.069  10905 192.168.2.90 TCP_MISS/200 10082 GET http://wikileaks.ch/reldate/2010-12-05_0.html - DIRECT/213.251.145.96 text/html
1291598469.289  52441 192.168.2.90 TCP_MISS/200 10017 GET http://wikileaks.ch/reldate/2010-12-02_0.html - DIRECT/213.251.145.96 text/html
No importa donde navegue, siempre recibo un TCP_MISS, osea squid 3 no encontro la página en el cache y descarga para que pueda verla. En todos los casos, no importa por la página que navegue siempre recibo TCP_MISS.

Creo que estoy perdiendo algo en la configuración, alguién puede ayudarme para poder habilitar el cache en mi configuraciónd de squid3?


Respuesta

Varias cosas que tal vez te ayuden a encontrar una solución:

1) Tal vez squid no devuelve del cache porque las peticiones son
diferentes. Una petición de HTTP de un browser moderno contiene muchas
cosas, y varias partes variadas. Si no es EXACTAMENTE la misma
petición, entonces no se podrá usar un cache. ¿no habrá algo (plugin,
extensión) que cambia la petición del browser y evita que el proxy
haga hit?

2) Tal vez la política del sitio consiste en no ser cacheado por
proxies. Yo creo que una buena parte de los servicios o bien no
entregan información de cache (imagino que en este caso no pueden ser
cacheados) o desactivan explícitamente el cache en proxies mediante
encabezados HTTP. ¿Será tu muestra suficientemente grande?

3) Voy a pecar de ingenuo, pero ¿No necesitas decirle a squid que
funcione como proxy transparente?, esto es ¿no debería aparecer la
palabra "transparent" en algún lugar de la configuración?.
Recuerdo vagamente de los tiempos en los que configuraba esas cosas.
Debo confesar, son muchos años. Lo más probable es que esté
equivocado.

4) Imagino que el override-lastmod cambiará el encabezado
Last-Modification de HTTP, pero ¿para qué?, y si respondieses a esa
pregunta, ¿no deberías también sobre-escribir también el e-tag de
algún modo?. De hecho, tienes 304s en tu log, ¿no es ése el objetivo?.

5) Esta es mi humilde opinión: En general, dudo de la competencia de
un proxy como cache, especialemte en la web 2.0, y para una red pequeña
como la tuya. Para mí, prueba de ésto es que no oigo hablar seguido de
la "competencia" de squid y que para configurarlo, sinceramente, hay
que ser un gurú del HTTP. Finalmente, los problemas que da squid
(compresión, urls largos, métodos HTTP extra, webdav, etc) hacen que
simplemente no valga la pena ponerlo.

se puede usar este programa para cache en cafes internet's


Otra respuesta


Según tu configuración, tienes un proxy común, no un proxy transparente.
Que yo no recomiendo usar. Es mejor un proxy común pues es más flexible.
El proxy transparente se usa en entornos de muchos usuarios y peticiones
http simples. El principal problema suele ser el https y los
certificados.



Bueno, yo lo tenía funcionando bien, y recién acabo de ver que recarga
páginas a cada petición, como dices. Me puse a curiosear, y veo que
squid está bien configurado. El problema es que antes usaba firefox y
hoy chrome.

Con Firefox:

# tail -f /var/log/squid/access.log |grep css

1291778947.206      0 127.0.0.1 TCP_MEM_HIT/200 626 GEThttp://www.elpais.com/css/i_portadillas.css? - NONE/- text/css
1291778947.210      0 127.0.0.1 TCP_MEM_HIT/200 693 GEThttp://www.elpais.com/css/promos_marketplace.css? - NONE/- text/css
1291778947.212      0 127.0.0.1 TCP_MEM_HIT/200 4501 GET http://www.elpais.com/css/ep-portada.css? - NONE/- text/css
1291778947.214      0 127.0.0.1 TCP_MEM_HIT/200 3403 GET http://www.elpais.com/css/pie.css? - NONE/- text/css
1291778947.217      0 127.0.0.1 TCP_MEM_HIT/200 1926 GEThttp://www.elpais.com/css/eskup/eskup_ventana_inferior.css? - NONE/- text/css
1291778947.222      0 127.0.0.1 TCP_MEM_HIT/200 3641 GEThttp://www.elpais.com/css/marcadores.css? - NONE/- text/css
1291778947.225      0 127.0.0.1 TCP_MEM_HIT/200 3524 GEThttp://www.elpais.com/css/especiales/pgc/modulos.css? - NONE/- text/css
1291778947.557      0 127.0.0.1 TCP_MEM_HIT/200 18220 GEThttp://www.elpais.com/css/comunes.css? - NONE/- text/css
1291778947.558      0 127.0.0.1 TCP_MEM_HIT/200 13822 GEThttp://www.elpais.com/css/portadillas.css? - NONE/- text/css
1291778947.559      0 127.0.0.1 TCP_MEM_HIT/200 2297 GEThttp://www.elpais.com/css/n_fotos.css? - NONE/- text/css
1291778947.562      0 127.0.0.1 TCP_MEM_HIT/200 842 GEThttp://www.elpais.com/css/estilos_antiguos.css? - NONE/- text/css
1291778947.692      0 127.0.0.1 TCP_MEM_HIT/200 1041 GEThttp://www.elpais.com/css/interstitial/interstitial.css - NONE/- text/css
1291778949.238      0 127.0.0.1 TCP_MEM_HIT/200 2599 GEThttp://eskup.elpais.com/Estilos/v1.x/v1.0/eskup_portada_elpais_superior_escribir.css - NONE/- text/css

Lo mismo, con chrome (varios reloads)

1291778941.929    108 127.0.0.1 TCP_MISS/304 340 GEThttp://www.elpais.com/css/i_portadillas.css? - DIRECT/80.157.169.17 text/css
1291778941.947    125 127.0.0.1 TCP_MISS/304 340 GEThttp://www.elpais.com/css/promos_marketplace.css? - DIRECT/80.157.169.17 text/css
1291778941.959    136 127.0.0.1 TCP_MISS/304 340 GET http://www.elpais.com/css/ep-portada.css? - DIRECT/80.157.169.17 text/css
1291778941.977    132 127.0.0.1 TCP_MISS/304 340 GET http://www.elpais.com/css/pie.css? - DIRECT/80.157.169.17 text/css
1291778941.996     77 127.0.0.1 TCP_MISS/304 340 GEThttp://www.elpais.com/css/marcadores.css? - DIRECT/80.157.169.17 text/css
1291778942.008     84 127.0.0.1 TCP_MISS/304 340 GEThttp://www.elpais.com/css/especiales/pgc/modulos.css? - DIRECT/80.157.169.17 text/css
1291778942.253     93 127.0.0.1 TCP_MISS/304 340 GET http://www.elpais.com/css/comunes.css? - DIRECT/80.157.169.17 text/css
1291778942.268     89 127.0.0.1 TCP_MISS/304 340 GEThttp://www.elpais.com/css/portadillas.css? - DIRECT/80.157.169.17 text/css
1291778942.286     93 127.0.0.1 TCP_MISS/304 340 GET http://www.elpais.com/css/n_fotos.css? - DIRECT/80.157.169.17 text/css
1291778942.301     88 127.0.0.1 TCP_MISS/304 340 GEThttp://www.elpais.com/css/estilos_antiguos.css? - DIRECT/80.157.169.17 text/css
1291778942.323     59 127.0.0.1 TCP_MISS/304 340 GEThttp://www.elpais.com/css/interstitial/interstitial.css - DIRECT/80.157.169.17 text/css
1291778944.734    378 127.0.0.1 TCP_REFRESH_UNMODIFIED/304 460 GEThttp://eskup.elpais.com/Estilos/v1.x/v1.0/eskup_portada_elpais_superior_escribir.css - DIRECT/91.216.63.240 -

Así que es problema de algún tipo de petición de chrome, no encuentro
cuál. Ya probé todas: override-expire override-lastmod reload-into-ims
ignore-reload ignore-no-cache ignore-no-store ignore-must-revalidate
ignore-private ignore-auth refresh-ims.



Aclaración del autor del problema


Yo uso Firefox4, revise navegar con Chrome, y tuve los mismos resultados. Sin embargo, con Opera obtuve varios TCP_HIT

Parece ser que serian las reglas.



Respuesta a la aclaración de la pregunta


Por el momento, esto, que aún así demuestra que chrome se comporta
diferente a ff:

refresh_pattern ^http: 0 100% 1440 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-no-store ignore-must-revalidate ignore-private ignore-auth refresh-ims



Si limpias la cache de chrome, recibiras un TCP_REFRESH_UNMODIFIED, que
es casi lo mismo. Chrome tiene que tener un bug.



Puse el tcpdump, y hay diferencias en las
solicitudes. Chrome añade dos headers en el GET:

Cache-Control: max-age=0
If-Modified-Since: Sat, 04 Dec 2010 21:22:54 GMT

y squid responde con unos warnings confusos:

HTTP/1.0 304 Not Modified
Last-Modified: Sat, 04 Dec 2010 21:22:54 GMT
Cache-Control: max-age=32222
Date: Thu, 09 Dec 2010 07:44:59 GMT
Warning: 110 squid/3.1.9 "Response is stale"
Warning: 111 squid/3.1.9 "Revalidation failed"
X-Cache: HIT from rodolfoap.rap.es
X-Cache-Lookup: HIT from rodolfoap.rap.es:3128



Y más respuestas a la aclaración 


El hilo está acá:

http://adf.ly/1etpAm

Efectivamente, las peticiones son distintas, entre FireFox y Chrome. Para
peor, a nivel de codificación, versionamiento y compresión, y el
problema es de squid. Pero tiene una solución sencilla: limpiando
periódicamente la caché -del navegador, no de squid-.

Ads by CJ - Linux Foundation

Share This