Squid 2.6做反向代理的WWW-Authentication无法通过问题

以前一直用Squid 2.5做Apache的反向代理来优化Web服务器性能,后来尝试了Squid 2.6,Squid 2.6确实更加灵活和强大,但一直有个问题困扰我,就是当Apache需要WWW-Authentication的验证的时候,如果使用了Squid 2.6,那么Apache总是无法得到这个值,最近研究了一下,终于找到解决方案,在声明cache_peer的时候,Squid2.6可以向Cache Peer发送一些验证信息来登录到一些需要身份验证的服务器,就包括这WWW-Authentication信息。如果要求Squid2.6传递这个信息,那么必须使用在cache_peer加上login=PASS这样的参数,就可以将这个HTTP头传递给上游服务器,例如:

cache_peer 127.0.0.1 parent 80 0 no-query originserver login=PASS

特此备忘

Squid 2.6配置的注意事项

前一阶段Squid推出了2.6版,在缓存机制上有了更好的统一,将反向代理和正向代理统一在了一起,但是也有一些问题。
第一是反向代理配置方式改变了,去掉了httpd_accel_*这些配置,而改用http_port和cache_peer等配置来完成,例如:

有了这两条,就可以实现反向代理了
第二如果Apache有身份验证的话,Squid 2.6可能并不会将Authorization的HTTP头发送给Apache,所以我在Squid 2.6后配置Apache + Subversion就无法使用身份验证——这个目前还没办法解决。
第三是Squid 2.6的基于IP的反向代理服务器的配置改变,也就是Squid 2.5中的httpd_accel_host virtual,在Squid 2.6的方法是命名多个parent、originserver的cache_peer,然后配合cache_peer_domain来指定对不同域名发送到不同的上游服务器;

需要注意的是,每个cache_peer都必须至少有一个cache_peer_domain分配到其上,才能真正实现类似virtual的配置。