使用haproxy作为反向代理,使用Internet代理后面的应用程序

时间:2017-12-02 07:47:47

标签: haproxy http-proxy

我需要在公共内部托管的URL下在内部和外部集成多个Web应用程序。内部部署应用程序与haproxy位于同一数据中心,但非现场应用程序只能通过http代理访问,因为运行haproxy的服务器无法直接访问Internet。因此我必须使用http Internet代理,SOCKS也可能是一个选项。

如何告诉haproxy后端只能通过代理到达? 我宁愿使用像socksify / proxifier / proxychains / tsocks / ...这样的额外组件,因为这会带来额外的开销。

此图显示了设置中涉及的组件: haproxy setup with proxy

当我在具有直接互联网连接的计算机上运行时,我可以使用此配置,它可以正常工作:

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 stats page

在我工作的公司的安全环境中,我必须使用代理,而haproxy无法连接到外部应用程序。 如何启用haproxy以使用http代理后面的那些外部Web应用程序服务器(无需身份验证),同时通过公共http页面/浏览器提供对它们的访问?

2 个答案:

答案 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配置,展示可以随意看看,以便查看完整的模块工作配置。