我正在设置一个临时的 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
您可以阅读更多内容这里