- 论坛徽章:
- 0
|
squid对gzip压缩的支持一直有问题,这个周末针对几种常见的web服务器(lighty1.4, nginx0.7.19, apache2.2.10)的gzip压缩进行了兼容性测试,发现squid还是对apache的压缩支持最好。这里先贴出lighty1.4的测试步骤和结果。
软件平台:
squid-2.7.stable5
lighttpd-1.4.19+mod_compress
测试方法:
* lighty工作在8080端口上, 打开mod_compress, 并配置mod_expires过期时间。
配置参数为
server.modules = (
……
"mod_compress",
……
)
compress.cache-dir = "/home/lighttpd/cache/"
compress.filetype = ("text/plain","text/css", "text/xml", "text/javascript" )
* squid工作在80端口上,并配置squid代理localhost的8080端口。
这里贴出squid.conf的主要参数:
http_port 80 vhost vport
icp_port 0
#########cache##############
cache_mem 200 MB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LRU
cache_dir aufs /home/squid/var/cache 2669 16 256
maximum_object_size 10240 KB
maximum_object_size_in_memory 3072 KB
memory_pools on
memory_pools_limit 100 MB
cache_swap_high 98%
cache_swap_low 90%
cache_swap_log /home/squid/var/logs/swap.state
redirect_rewrites_host_header on
cache_vary on
forwarded_for on
allow_underscore on
tcp_recv_bufsize 65535 bytes
strip_query_terms off
range_offset_limit -1
reload_into_ims on
#########timeouts#############
。。。。。。
#########log##################
。。。。。。
##########acl###################
。。。。。。
##############cache_peer##############
。。。。。。
cache_peer localhost parent 8080 0 no-query no-digest originserver
http_access allow localhost
cache_peer_access localhost allow localhost
cache_peer_access localhost deny all
。。。。。。
* 然后在lighty的documentroot目录下放一个静态的xml文件flv.xml。
* 申请未压缩版本的flv.xml
wget -S http://localhost/flv.xml
返回信息为:
–23:46:02– http://localhost/flv.xml
正在解析主机 localhost… 127.0.0.1
Connecting to localhost|127.0.0.1|:80… 已连接。
已发出 HTTP 请求,正在等待回应…
HTTP/1.0 200 OK
Vary: Accept-Encoding
Expires: Mon, 03 Nov 2008 15:46:02 GMT
Cache-Control: max-age=86400
Content-Type: text/xml
Accept-Ranges: bytes
ETag: "-1733604169"
Last-Modified: Sun, 02 Nov 2008 14:47:50 GMT
Content-Length: 1150883
Date: Sun, 02 Nov 2008 15:46:02 GMT
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:80
Connection: keep-alive
长度:1150883 (1.1M) [text/xml]
重复申请:
–23:46:28– http://localhost/flv.xml
正在解析主机 localhost… 127.0.0.1
Connecting to localhost|127.0.0.1|:80… 已连接。
已发出 HTTP 请求,正在等待回应…
HTTP/1.0 200 OK
Vary: Accept-Encoding
Expires: Mon, 03 Nov 2008 15:46:02 GMT
Cache-Control: max-age=86400
Content-Type: text/xml
Accept-Ranges: bytes
ETag: "-1733604169"
Last-Modified: Sun, 02 Nov 2008 14:47:50 GMT
Content-Length: 1150883
Date: Sun, 02 Nov 2008 15:46:02 GMT
Age: 26
X-Cache: HIT from localhost
X-Cache-Lookup: HIT from localhost:80
Connection: keep-alive
长度:1150883 (1.1M) [text/xml]
X-Cache header变成 HIT,显示文件已经被squid缓存。这是未压缩版本的文件。
* 然后申请gzip压缩版本的:
wget -S –header="Accept-Encoding:gzip,deflate" http://localhost/flv.xml
返回信息为:
–23:46:46– http://localhost/flv.xml
正在解析主机 localhost… 127.0.0.1
Connecting to localhost|127.0.0.1|:80… 已连接。
已发出 HTTP 请求,正在等待回应…
HTTP/1.0 200 OK
Vary: Accept-Encoding
Content-Encoding: gzip
Last-Modified: Sun, 02 Nov 2008 14:47:50 GMT
ETag: "-1733604169"
Content-Type: text/xml
Expires: Mon, 03 Nov 2008 15:46:46 GMT
Cache-Control: max-age=86400
Accept-Ranges: bytes
Content-Length: 206898
Date: Sun, 02 Nov 2008 15:46:46 GMT
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:80
Connection: keep-alive
长度:206898 (202K) [text/xml]
返回的header显示squid正确的识别了request header中的gzip压缩申请,并且去源站申请了压缩版本的flx.xml。
重复申请,返回信息为:
正在解析主机 localhost… 127.0.0.1
Connecting to localhost|127.0.0.1|:80… 已连接。
已发出 HTTP 请求,正在等待回应…
HTTP/1.0 200 OK
Vary: Accept-Encoding
Content-Encoding: gzip
Last-Modified: Sun, 02 Nov 2008 14:47:50 GMT
ETag: "-1733604169"
Content-Type: text/xml
Expires: Mon, 03 Nov 2008 15:36:10 GMT
Cache-Control: max-age=86400
Accept-Ranges: bytes
Content-Length: 206898
Date: Sun, 02 Nov 2008 15:36:10 GMT
Age: 10
X-Cache: HIT from localhost
X-Cache-Lookup: HIT from localhost:80
Connection: keep-alive
长度:206898 (202K) [text/xml]
显示flv.xml已经被squid正确的缓存。到目前为止,一切都很正常很好。接着,问题出现了:
* 这时再申请未压缩的版本:
wget -S http://localhost/flv.xml
返回的信息为:
–23:47:25– http://localhost/flv.xml
正在解析主机 localhost… 127.0.0.1
Connecting to localhost|127.0.0.1|:80… 已连接。
已发出 HTTP 请求,正在等待回应…
HTTP/1.0 200 OK
Vary: Accept-Encoding
Content-Encoding: gzip
Last-Modified: Sun, 02 Nov 2008 14:47:50 GMT
ETag: "-1733604169"
Content-Type: text/xml
Expires: Mon, 03 Nov 2008 15:46:46 GMT
Cache-Control: max-age=86400
Accept-Ranges: bytes
Content-Length: 206898
Date: Sun, 02 Nov 2008 15:46:46 GMT
Age: 39
X-Cache: HIT from localhost
X-Cache-Lookup: HIT from localhost:80
Connection: keep-alive
长度:206898 (202K) [text/xml]
response header表明squid返回的仍然是压缩版本,到这里,它已经无法区分cache中的object到底是压缩的还是未压缩的。这时,无论你申请压缩的版本还是申请未压缩的版本,它都会返回你压缩的版本。
接下来,purge掉squid的cache,先申请一个压缩版本的,再申请一个未压缩版本的。问题依旧,这次无论你申请什么版本的,都会返回一个未压缩的。
总结一下,根据我的实验,对于lighty1.4.19+compress源站,squid2.7能够正确的区分用户的request header中的gzip请求。但是无法识别压缩和未压缩版本的cache object,只会简单的返回最后一个缓存的对象。如果遇到cache中缓存的是未压缩版本,那么即使你申请压缩版本,也会返回未压缩版本,导致流量高涨。对于某些大文件,会有很明显的流量毛刺。
原文地址: http://zys.8800.org/?p=258
[ 本帖最后由 zysno1 于 2008-11-3 00:20 编辑 ] |
|