微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HAProxy 代理转发到外部 HTTPS,使用 URL 重写

如何解决HAProxy 代理转发到外部 HTTPS,使用 URL 重写

我试图让 HAProxy 表现得像 HTTP 代理,除了传入的 URL 应该转发到仅提供基于 HTTPS REST 的代理 API 的外部服务。

比如:

# HAProxy running on 127.0.0.1:8888
curl -x http://127.0.0.1:8888 http://www.example.com

将使用我在 127.0.0.1:8888 上运行的 HAProxy 服务器将 http://www.example.com 的请求转发到第三方基于 HTTP REST 的代理 API,使用格式:https://url-privacy-service.com/api/v1/?apikey=YOUR_API_KEY&url=http://www.example.com

这样做的目的是让基于 REST 的 https://url-privacy-service.com 在前面的 HAProxy 的帮助下,在各种设备上用作标准 HTTP 代理。 >

这是我目前在 HAProxy 配置中拼凑出来的内容

frontend urlprivacy
        bind 127.0.0.1:8888
        use_backend urlprivacy-backend

backend urlprivacy-backend
        acl https ssl_fc
        http-request set-uri https://url-privacy-service.com/api/v1/?api_key=YOUR_API_KEY&url=https://%[req.hdr(Host)]%[path]?%[query]
        http-request set-method GET
        server url-privacy-service.com:443 check-ssl ssl verify none

为什么我尝试通过 curl -x http://127.0.0.1:8888 http://www.example.com 发出请求,我遇到了错误响应:

<html><body><h1>503 Service Unavailable</h1>
No server is available to handle this request.
</body></html>

我能够成功调用 url-privacy-service.com 的 REST API,所以我知道他们的服务按预期工作。因此我知道 HAProxy 配置显然是错误的,我只是不确定该怎么做才能使它正确。如果需要,我可以运行其他 http 代理(例如 tinyproxy)来帮助促进。

解决方法

我怀疑这是否可以实现。如果通过端口 443 发出 https 请求,则它需要 SSL。如果 https 请求的 SSL 可用,我们可以在主机的 ssl 前端添加重定向规则,如下所示:

redirect scheme http if { hdr(Host) -i https://url-privacy-service.com } { ssl_fc }

要重定向到 https,您可能需要使用适当的 ssl 证书绑定到端口 443。这是浏览器的基本期望。

注意:上述重定向规则只是一个示例,如果没有正确的 SSL 证书,可能无法正常工作。

,

无法按照您的建议进行操作,因为转发代理将无法查看它只是使用 CONNECT 命令中提供的信息通过数据传输的有效负载,有效负载将被加密因此,在 HTTPS 情况下,HAProxy 无法使用路径和查询等信息来代表客户端建立与第三方应用程序的连接。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。