squid.conf中:
http_access allow all # Squid normally listens to port 3128 http_port 3128 accel defaultsite=localhost no-vhost cache_peer localhost parent 80 0 no-query originserver name=myAccel cache_peer_access myAccel allow all # Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /usr/local/var/cache/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /usr/local/var/cache/squid
Squid 3.2.9,通过Homebrew安装在OSX上
localhost: ~ $ squid -v Squid Cache: Version 3.2.9 configure options: '--disable-debug' '--disable-dependency-tracking' '--prefix=/usr/local/Cellar/squid/3.2.9' '--localstatedir=/usr/local/var' 'CC=cc' 'CXX=c++' 'PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig'
用squid -f squid.conf -d 2 -N启动squid squid -f squid.conf -d 2 -N
上游返回有效的caching控制标题,我已经通过访问谷歌浏览器26中的页面和在Chrome开发工具中观看,validation是正确的。
localhost: ~ $ curl -s -o /dev/null --dump-header /dev/stdout http://localhost/test.php HTTP/1.1 200 OK Date: Tue, 16 Apr 2013 21:29:33 GMT Server: Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8r X-Powered-By: PHP/5.3.15 Cache-Control: max-age=60, public Content-Length: 16 Content-Type: text/html X-Pad: avoid browser bug
但是当我通过Squid反向代理查询页面时,我总是得到一个caching未命中。
localhost: ~ $ curl -s -o /dev/null --dump-header /dev/stdout http://localhost:3128/test.php HTTP/1.1 200 OK Date: Tue, 16 Apr 2013 21:29:34 GMT Server: Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8r X-Powered-By: PHP/5.3.15 Cache-Control: max-age=60, public Content-Length: 16 Content-Type: text/html X-Cache: MISS from localhost Via: 1.1 localhost (squid/3.2.9) Connection: keep-alive localhost: ~ $ curl -s -o /dev/null --dump-header /dev/stdout http://localhost:3128/test.php HTTP/1.1 200 OK Date: Tue, 16 Apr 2013 21:29:38 GMT Server: Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8r X-Powered-By: PHP/5.3.15 Cache-Control: max-age=60, public Content-Length: 16 Content-Type: text/html X-Cache: MISS from localhost Via: 1.1 localhost (squid/3.2.9) Connection: keep-alive
我的configuration有什么问题?
哦,废话,我知道了。
Squid忽略caching标题小于或等于一分钟。 所以max-age = 60被忽略,但是max-age = 61就像一个魅力。
<?php Header('Cache-Control: max-age=61'); ?><html>hi</html>