Dan*_*ich 5 proxy cache squid reverse-proxy
鱿鱼.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
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
开始鱿鱼 squid -f squid.conf -d 2 -N
上游正在返回有效的 Cache-Control 标头,我已经通过访问 Google Chrome 26 中的页面并在 Chrome Dev Tools 中观看来验证这些标头是正确的。
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
Run Code Online (Sandbox Code Playgroud)
但是当我通过 Squid 反向代理查询页面时,我总是遇到缓存未命中。
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
Run Code Online (Sandbox Code Playgroud)
我的配置有什么问题?
哦,糟了,我明白了。
Squid 会忽略小于或等于一分钟的缓存标头。因此 max-age=60 被忽略,但 max-age=61 却很有魅力。
<?php
Header('Cache-Control: max-age=61');
?><html>hi</html>
Run Code Online (Sandbox Code Playgroud)