cache_peer(forceddomain)参数的应用初学Squid的朋友可能会发现Squid并非万能的,有很多网站其无法逆向代理。例如逆向代理另一个经过Squid缓存的网站,或是一个绑定了主机头的虚拟主机。
例子:在Squid中将123.jstzsb.cn这个二级域名指定给www.这个网站(假设该网站经过了Squid缓存) 通常的配置 cache_peer www. parent 80 0 no-query originserver no-digest name=cache1 cache_peer_domain cache1 123.jstzsb.cn 这样配置用浏览器访问123.jstzsb.cn就会提示无法连接上级缓存服务器 这是为什么呢?让我们看一下www.的Squid配置 cache_peer 192.168.1.1 parent 80 0 no-query originserver no-digest name=cache1 cache_peer_domain cache1 www. 问题出来了的主机配置规则仅接受主机头为www.的连接请求 我们假设123.jstzsb.cn的主机为Squid_A,www.的主机为Squid_B,请看访问流程: 浏览器提交123.jstzsb.cn的请求->Squid_A接受到请求- >Squid_A对比规则成功开始将该请求提交给www.->Squid_B接受到来自Squid_A的一个请求其主机头为 123.jstzsb.cn->Squid_B对比发现无法匹配其cache_peer_domain中的规则->Squid_B放弃响应 难道就没有办法在Squid_A请求时将主机头信息替换成www.吗?答案是有。 只需在Squid_A上的cache_peer www. 80 0 no-query originserver no-digest name=cache1的最后加上forceddomain=www.即可,这样Squid_B接受到的主机头信息就匹配其 cache_peer_domain中的规则了,逆向代理也自然能成功了。 forceddomain参数顾名思义是域名强制转换,这就能为我们做很多事,例如一个网站有很多域名。例如: www./www.abc.cn/www.abc.org 同时指向一个主机,如果不使用forceddomain参数Squid缓存里往往要缓存三个不同域名而内容相同的信息,这不仅降低了Squid的性能也影响其命中率。只要在配置parent的主机时添加forceddomain=www.参数,就能将所有其他域名的请求统一转为访问 www. forceddomain英文注释: use 'forceddomain=name' to forcibly set the Host header of requests forwarded to this peer. Useful in accelerator setups where the server (peer) expects a certain domain name and using redirectors to feed this domain name is not feasible. |
|