我有一个关于将squid设置为透明/转发代理背后的反向代理的问题。 基本上,我正在寻找的是是否可以在以下方面设置(B):
客户端(A) – > Squid作为反向代理(B) – > Squid作为正向代理(C) – >源服务器根据客户端请求URI(D)
根据来自(A)的客户请求,(B)可以将请求路由到不同的原始服务器(多个cache_peer线)。 (C)到达(D),因为(C)是networking到互联网的唯一出路。 而且,弄清楚去哪里的逻辑在于(B)。
我们没有访问或控制(A)和(C)。
假设我在(B)中有下面的cache_peer行,(C)的地址是“forward-proxy.example.com:3128”。
cache_peer origin-x.example.com parent 443 0 no-query originserver ssl cache_peer origin-y.example.com parent 443 0 no-query originserver ssl cache_peer origin-z.example.com parent 443 0 no-query originserver ssl
(B)使用“forward-proxy.example.com:3128”(C)作为原始服务器(D)的转发代理的语法是什么?
谢谢!
是的,这是可能的,虽然可能不像你想的那样。
你谈论很多关于C,好像它很重要; 既然你无法控制它,你应该停止担心。 除非有一个以上的C,并且可以用来select原始服务器,否则C是完全不相关的……它只是阻碍你使用更直接的select原始服务器的方法。
在这种情况下,您不能/不能使用cache_peer指令来确定原始服务器; cache_peerconfigurationsquid如何与其他代理,而不是原始服务器通话。 既然你不能控制中间的Squid,你不能直接在原始服务器上执行任何select; 即转发代理总是要去你所要求的域名,而不是根据你在B的select标准。(如果你控制了其他的Squid,你会有更多的select)。
实现你想要的一种方法是给你的原始服务器一些额外的名字,这样你的第一个Squid(B)可以根据URI重写请求到新的域名,中间的squid可以根据域名发出请求。
您可以使用url_rewrite_helper选项来使用重写程序来以您select的任何方式更改URL。 如果是我,我可能会为每个原始服务器(a,b,c等)创build一个新的名称,然后根据您拥有这些名称的任何数据重写。 所以,如果你的URI是“ http://domain.tld/a/image.png ”,你可以把它重写为“ http://a.domain.tld/image.png ”和“ http:// domain。 tld / b / image.png “改为” http://b.domain.tld/image.png “。
当然,您需要configuration原始服务器来回答这些新的域,并且可能configuration它们来重build它所接收到的域的URI。
参考文献:
http://www.squid-cache.org/Doc/config/url_rewrite_program/
而且,重写信息和示例重写程序:
http://wiki.squid-cache.org/Features/Redirectors#Using_a_re-writer_to_mangle_the_URL_as_it_passes
你也可以跳过让第一个squid确定原点,让源应用以任何有意义的方式在域之间分配你的请求,告诉客户从哪个服务器请求正确的请求。 希望这可以帮助。