Author: admin | Category: Nginx, Squid
Comments: 评论关闭

Squid3.0之前,一直不能完美支持http1.1。所以对gzip内容的支持,始终有很多问题。我也看过很多帖子,号称解决了这个问题。但是其实一直没有把问题说清楚。我今天试着把问题的原因和解决方法彻底说清楚。

squid不支持常见的gzip压缩的原因,有以下两点:

1,   squid只支持gzip的静态压缩,不支持动态压缩。具体一点说,就是response header里必须有content-length, 不可以用chunked方式。

2,   response header中必须有Vary : Accept-Encoding

只要具备以上几点,squid就可以完美的识别压缩和不压缩的内容。

下面说一下nginx针对这个问题的解决方案:

nginx默认的NginxHttpGzipModule, 采用的是chunked方式的动态压缩,而squid是不支持的。需要使用http_gzip_static_module这个模块,进行pre-compress。

具体方法如下:

ngx_http_gzip_static_module was introduced in nginx 0.6.24. You must enable support at compile time:

./configure –with-http_gzip_static_module …

配置文件写法:

gzip          on

gzip_static on;

gzip_http_version 1.0;
gzip_proxied        any;
gzip_disable        “MSIE [1-6]\.”;

gzip_comp_level     9;

注意,这里没有加入gzip_vary on;。这是因为http_gzip_static_module这个模块,只给没压缩的内容加入了vary header,而不是所有内容都加。
所以不能打开这个参数。可以在nginx.conf中手动设置vary header。这样不管压缩与否,返回的文件都会被加上Vary: Accept-Encoding。

至此,nginx的gzip压缩,就能够被squid完美支持了。如果你使用Http1.0,就会返回你没压缩的内容。如果你使用http1.1,并且发送Accept-Encoding:gzip,deflate,就会返回压缩后的内容。

PS: 我又发现了一个问题,就是squid的cache保存问题。按照文档上说,squid是根据url来缓存对象的。
   也就是说,一个url应该只保留一个cache。如果你交替的申请压缩的和不压缩的内容,是会出现反复MISS的情况的。
   但是我实际测试的过程中,发现不是这样的,交替的申请压缩的和不压缩的内容,是会一直HIT的。这说明squid是同时保存两份cache的(压缩的和不压缩的)。

Author: admin | Category: Squid
Comments: 评论关闭

Squid 目录 bin 文件夹下有个 squidclient 的工具,用于查看缓存信息,更新缓存….的功能..

使用的方法是:

./squidclient -r “http://www.gzxxx.cn/

更多的参数使用,可以查看 ./squidclient -h

但如果遇上大批量的文件需要更新,例如一个文件夹下所有的图片。
用下边这个小脚本可以让你省事省心。

#!/bin/sh

squidcache_path=”/data/cache”  # Squid 的缓存目录

squidclient_path=”/usr/local/squid/bin/squidclient”  # squidclient 的路径

grep -a -r $1 $squidcache_path/* | strings | grep “http:” | awk -F’http:’ ‘{print “http:”$2;}’ > cache_list.txt

for url in `cat cache_list.txt`; do

$squidclient_path -m PURGE -p 3128 $url   # 3128 端口根据你squid的http 设置自行修改

done
############

把上边脚本内容存为 clear_squid_cache.sh 并赐予可执行权限

复制代码用法:

    然后在 squid.conf 中加入下边的配置并令其生效

 acl PURGE method PURGE
 http_access allow PURGE
 http_access deny PURGE

    最后使用脚本:

  1、清除所有Flash缓存(扩展名.swf):
  ./clear_squid_cache.sh swf

  2、清除URL中包含sina.com.cn的所有缓存:
  ./clear_squid_cache.sh sina.com.cn

  3、清除文件名为zhangyan.jpg的所有缓存:
  ./clear_squid_cache.sh zhangyan.jpg

Top
RSS for entries