squid中cache_peer和cache_peer_domain的处理规则和顺序:
环境介绍: squid3监听在80端口,IP为192.1.1.126
apache监听在8080端口,有2个虚拟主机: bbs.test.com和bbs2.test.com
其中bbs.test.com虚拟主机下只有一个index.html,内容为bbs
bbs2.test.com虚拟主机下只有一个index.html,内容为bbs2
squid(前)+apache(后)
1. 如果只配置了cache_peer,没有配置cache_peer_domain,则所有的请求默认都会匹配第一个cache_peer,如果第一个匹配不成功,则匹配第二个,如下的配置,默认都会请求转发到bbs
cache_peer 127.0.0.1 parent 8080 0 no-query connect-timeout=150 max-conn=384 originserver name=bbs
cache_peer 127.0.0.1 parent 8089 0 no-query connect-timeout=150 max-conn=384 originserver name=bbs2
#cache_peer_domain bbs .test.com
#cache_peer_domain bbs2 bbs2.test.com
2. 如下的配置中,访问bbs2.test.com显示的是bbs2,因为.test.com是通配符
cache_peer 127.0.0.1 parent 8080 0 no-query connect-timeout=150 max-conn=384 originserver name=bbs
cache_peer_domain bbs .test.com # .test.com是通配符
3. cache选择的顺序 #来自php-oa
选择新鲜cache目标的优先级是:
local cache
parent
sibling
direct
4. 故意将bbs2.test.com的父节点的端口填错,且把通配符给去掉,则访问bbs2.test.com返回错误页面,如果加上通配符,则能返回正常页面.说明当遇到错误页面后,squid还是会继续向下匹配的,如果匹配到最后一项,还没匹配成功,则返回错误页面
cache_peer 127.0.0.1 parent 8080 0 no-query connect-timeout=150 max-conn=384 originserver name=bbs
cache_peer 127.0.0.1 parent 8087 0 no-query connect-timeout=150 max-conn=384 originserver name=bbs2
cache_peer_domain bbs2 bbs2.test.com
cache_peer_domain bbs bbs.test.com
5. 可以很多cache_peer_domain 指向同一个cache_peer,即多个域名访问同一个源,如下test.com和test1.com都指向了bbs
cache_peer_domain bbs .test.com
cache_peer_domain bbs .test1.com
6. 如果cache_peer 的最后指定了name=bbs2,则只接收cache_peer_domain里设置的bbs2的域名,如果没有指定的话,则归所有域名共用
cache_peer 127.0.0.1 parent 8089 0 no-query connect-timeout=150 max-conn=384 originserver name=bbs2
cache_peer 127.0.0.1 parent 8089 0 no-query connect-timeout=150 max-conn=384 originservercache_peer_domain bbs .test.com
cache_peer_domain bbs2 bbs2.test.com
7. 总结:
在这里可以将squid服务当做一个真实的客户端去访问apache,当apache返回什么,squid就返回什么给用户.
squid是按照自上往下依次匹配,匹配成功,则停止cache_peer_domain的匹配,如果匹配失败,继续匹配,知道最后也没匹配成功,则返回错误页面