我正在设置一个临时的 haproxy 实例来帮助测试 iPhone 应用程序的新后端。我的计划不是使用专门制作的应用程序或越狱,而是设置一个所有电话数据都将通过的代理,但让它与主机标头匹配并将它们转发到尚未启用的新服务器。简而言之,除了某些特定主机名之外,我希望 haproxy 像一个开放代理一样工作。匹配主机名并转发它们工作得很好,但我似乎无法使开放代理位工作。我在 Ubuntu Precise 上使用 stock haproxy 1.4.18 包,具有 stock 全局设置,加上这些代理设置:
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!
无法配置 haproxy 来为您执行此操作。haproxy 中的后端服务器必须明确命名。
难道你不能改用专用的 DNS 服务器将电话定向到正确的服务器吗?
您可以使用 haproxy 作为一个简单的 http 代理,具有以下配置 -
你可以在这里阅读更多