使用 HAProxy 进行透明转发和选择性重定向

使用 HAProxy 进行透明转发和选择性重定向

我正在设置一个临时的 haproxy 实例来帮助测试 iPhone 应用程序的新后端。我的计划不是使用专门制作的应用程序或越狱,而是设置一个所有手机数据都将通过的代理,但让它匹配主机头并将它们转发到尚未上线的新服务器。简而言之,我希望 haproxy 像开放代理一样工作,除了某些特定的主机名。匹配主机名并转发它们工作得很好,但我似乎无法使开放代理位工作。我在 Ubuntu Precise 上使用库存 haproxy 1.4.18 软件包,其中包含库存全局设置,以及以下代理设置:

frontend myapp
    bind 0.0.0.0:8080
    default_backend passthrough
    acl mydomain hdr_end(Host) .example.com
    use_backend front if mydomain

backend front
    server front 127.0.0.1:80

backend passthrough
    server ???

因此,前端位于端口 8080 上,默认将请求推送到passthrough后端。在此之前,它会检查 acl 以查看请求是否针对我的域中的主机名,如果是,则将其转发到本地应用程序。

问题出在passthrough后端。我希望它将请求直接传递给请求的主机,而不是本地端点。我放在那里的配置不起作用,但我不知道它应该说什么。例如,如果我发出请求http://www.serverfault.com,它与我的 ACL 不匹配,所以我希望它直接转发到 serverfault,而不是本地服务器。我不确定哪个指令会在后端执行此操作,或者是否有一些前端指令可以执行此操作。就代理而言,这或多或少是一个无操作。

(是的,我知道开放代理不好;这是一个临时的测试配置,每次只交互运行几分钟)

更新:我发现option http_proxy它完全符合我的需要,除了它不进行 DNS 查找,只进行明确的 IP 查找,所以像这样的后端几乎就完成了:

backend passthrough
    option http_proxy
    option httpclose

我知道我可能还需要别的东西,但我恰好真的很喜欢 haproxy!

答案1

没有办法配置 haproxy 来帮你完成这个任务。haproxy 中的后端服务器必须明确命名。

难道你不能只使用专用的 DNS 服务器将手机引导至正确的服务器吗?

答案2

您可以使用 haproxy 作为简单的 http 代理,配置如下 -

backend direct_forward
option httpclose
option http_proxy

您可以阅读更多内容这里

相关内容