我需要在公共内部托管的URL下在内部和外部集成多个Web应用程序。内部部署应用程序与haproxy位于同一数据中心,但非现场应用程序只能通过http代理访问,因为运行haproxy的服务器无法直接访问Internet。因此我必须使用http Internet代理,SOCKS也可能是一个选项。
如何告诉haproxy后端只能通过代理到达? 我宁愿不使用像socksify / proxifier / proxychains / tsocks / ...这样的额外组件,因为这会带来额外的开销。
当我在具有直接互联网连接的计算机上运行时,我可以使用此配置,它可以正常工作:
frontend main
bind *:8000
acl is_extweb1 path_beg -i /policies
acl is_extweb2 path_beg -i /produkte
use_backend externalweb1 if is_extweb1
use_backend externalweb2 if is_extweb2
backend externalweb1
server static www.google.com:80 check
backend externalweb2
server static www.gmx.net:80 check
(显然这些不是我要说的网址,这只是一个例子)
Haproxy能够检查外部应用程序并将流量路由到它们:
在我工作的公司的安全环境中,我必须使用代理,而haproxy无法连接到外部应用程序。 如何启用haproxy以使用http代理后面的那些外部Web应用程序服务器(无需身份验证),同时通过公共http页面/浏览器提供对它们的访问?
答案 0 :(得分:4)
如何使用委托(http://delegate.org/documents/)来做到这一点,就像一个想法一样。
position:fixed
http://delegate.org/delegate/Manual.shtml?PROXY
我知道这不是那么优雅,但可以奏效。
我已使用本地鱿鱼和此卷曲调用
测试了此设置 haproxy -> delegate -f -vv -P127.0.0.1:8081 PROXY=<your-proxy>
curl调用模拟了haproxy tcp调用。
答案 1 :(得分:3)
我很感兴趣让它工作,但我真的找不到haproxy文档中的任何内容,所以我搜索了一下,发现 nginx 可能会有所作为,但它没有& #39;对我来说,经过一段时间的googleing后,我最终找到了适用于 apache 的配置。
这是重要的部分:
Listen 80
SSLProxyEngine on
ProxyPass /example/ https://www.example.com/
ProxyPassReverse /example/ https://www.example.com/
ProxyRemote https://www.example.com/ http://corporateproxy:port
ProxyPass /google/ https://www.google.com/
ProxyPassReverse /google/ https://www.google.com/
ProxyRemote https://www.google.com/ http://corporateproxy:port
我非常确定应该有办法将此配置转换为nginx,甚至是haproxy ...如果我能找到时间,我将根据我的发现更新答案。
要让apache工作,你还应该启用一些模块,我建立了一个 github repository ,其中包含一个基本的docker配置,展示可以随意看看,以便查看完整的模块工作配置。