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

标签 haproxy http-proxy

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

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

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

当我在具有直接 Internet 连接的机器上运行它时,我可以使用这个配置并且它工作得很好:

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

(显然这些不是我正在谈论的 URL,这只是一个示例)

Haproxy 能够检查外部应用程序并将流量路由到它们:

HAproxy stats page

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

最佳答案

如何使用委托(delegate)( http://delegate.org/documents/ )作为一个想法。
haproxy -> delegate -f -vv -P127.0.0.1:8081 PROXY=<your-proxy>
http://delegate9.org/delegate/Manual.shtml?PROXY

我知道它不是那么优雅,但它可以工作。

我已经用本地鱿鱼和这个 curl 调用测试了这个设置
echo 'GET http://www.php.net/' |curl -v telnet://127.0.0.1:8081
curl 调用模拟了 haproxy tcp 调用。

关于haproxy - 使用 haproxy 作为 Internet 代理后面的应用程序的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47605766/

相关文章:

linux - 用于端口路由的 docker ha 代理

linux - haproxy acl中的base/uri/path/etc有什么区别?

docker - Tutum HAProxy Docker虚拟主机转发到入口点路径

android - 如何设置不在项目的 gradle.properties 中的代理设置?

javascript - HTTP 代理 : Reject half-processed request

api - 温室工作板 API 集成 : HTTP Basic Auth over SSL/TLS

Haproxy 健康检查端口

http - HEAD header 不同于 GET,分块传输

regex - Nginx 位置正则表达式捕获变量

proxy - 如何在 Phoenix 框架中转发客户端请求,充当代理?