我想设置 2 个 squid 服务器,作为我们内联网上的 Web 服务器的反向代理和缓存。负载平衡将通过 DNS 循环或针对不同客户端的不同映射来完成。
问题是,我希望两台服务器在联系网络服务器之前尝试互相联系,看看它们是否在缓存中具有所需的对象(为网络服务器提供服务的网络是瓶颈,我正在尝试消除它)
两个 squid 的配置相同,以下是相关的配置行:
acl dvr1_cache_it_best_tv_com dstdomain dvr1.cache.it.best-tv.com
acl squid1_it_best_tv_com dstdomain squid1.it.best-tv.com
acl squid2_it_best_tv_com dstdomain squid2.it.best-tv.com
http_access allow dvr1_cache_it_best_tv_com
http_access allow squid1_it_best_tv_com
http_access allow squid2_it_best_tv_com
http_access allow all
http_port 8081 accel defaultsite=dvr1.cache.it.best-tv.com
cache_peer dvr1.origin.it.best-tv.com parent 80 0 no-query originserver name=Proxy_dvr1_origin_it_best_tv_com
cache_peer squid1.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid1_it_best_tv_com
cache_peer squid2.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid2_it_best_tv_com
cache_peer_access Proxy_dvr1_origin_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow squid1_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow squid2_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow squid1_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow squid2_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow dvr1_cache_it_best_tv_com
只是为了清楚起见 - dvr1.cache 是代理服务器的别名。dvr1.origin 是 Web 服务器。
两台服务器均能正常工作,提供内容并缓存内容,工作正常。但是,当我清除一台服务器上的缓存然后访问它时,它会从父服务器 (DVR1_ORIGIN) 获取内容,而不是从同级 squid 获取内容。
我配置错了什么?或者也许我没有正确理解架构?我读过 squid 手册,但据我所知,我按照书上说的做了,但它还是不能正常工作。
任何帮助将不胜感激!
答案1
我没有尝试过,所以我不能保证它会起作用。我只是有一些想法:
首先,我认为 acls“dstdomain”应该指正在服务的目标域,而不是服务器的主机名(dvr1.cache.it.best-tv.com)。这可能应该是“it.best-tv.com”,并且您只需要一个 acl 对象。
acl dvr1_cache_it_best_tv_com dstdomain www.yourdomain.com
cache_peer_access Proxy_dvr1_origin_it_best_tv_com 允许 dvr1_cache_it_best_tv_com cache_peer_access Proxy_squid1_it_best_tv_com 允许 dvr1_cache_it_best_tv_com cache_peer_access Proxy_squid2_it_best_tv_com 允许 dvr1_cache_it_best_tv_com
http_port 8081 accel defaultsite=www.yourdomain.com
其次,cache_peer 条目的顺序很重要(虽然我不确定这是否适用于您的情况)。以防万一,请尝试将 ORIGIN 对等点放在最后:
cache_peer squid1.it.best-tv.com 兄弟 8081 3130 权重=10 名称=Proxy_Squid1_it_best_tv_com cache_peer squid2.it.best-tv.com 兄弟 8081 3130 权重=10 名称=Proxy_Squid2_it_best_tv_com cache_peer dvr1.origin.it.best-tv.com 父级 80 0 无查询原始服务器名称=Proxy_dvr1_origin_it_best_tv_com
最后,您可以尝试在两个代理 cache_peer 定义上使用代理专用选项。
我希望这能有所帮助。