12

我们有几个在负载均衡器后面运行的 http 站点(具有使用 heartbeat 的故障转移功能)和一个 https 站点。一切运行良好,但现在我想添加另一个 https 站点。我找不到托管多个 https 站点的任何参考资料。

有没有人使用 HAproxy 托管多个 https 站点?你能告诉我我怎样才能做到这一点吗?请帮助我输入您的信息。

谢谢,

桑托什

4

3 回答 3

3

您必须根据前端(IP 地址)、主机标头或 TLS SNI(“服务器名称指示符”)编写规则来选择后端。什么是最好的取决于你的应用程序。如果您需要支持不支持 SNI 的客户端(真的很老);那么他们将无法获得真正的 TLS,您必须根据 Host 标头选择后端。

自从我在下面写了答案以来,haproxy 已将 ssl 添加为新功能。我在https://manage.ntppool.org/上使用它,它运行良好。您需要最新的 1.5 开发版本(或 1.6,如果在您阅读本文时已经发布)。

在 HAProxy 1.8 中也支持 http/2。

2012 年的答案是:

HAProxy 本身不支持 SSL,你必须在前面运行一个“SSL unwrapped”。流行的选择是 stunnel 和stud。对于 HTTP,您还可以使用 Apache 或 Nginx。

于 2012-06-03T09:30:45.563 回答
0

您可以使用 HAProxy 启动任意数量的启用 HTTPS 的网站。您必须在 HAProxy 框中进行 SSL 卸载。并且 ha-proxy 将通过 HTTP 将请求重定向到您的服务器(站点框)。在 HA-Proxy 进行 SSL-ffload 之后,您可以通过解析 URI 来区分来自 2 个不同 https 网站的请求

有关更多详细信息,请参阅 HA-Proxy 文档,请参阅 hdr_dom 和 acl 部分,这将解决您的问题。

于 2013-04-18T13:18:28.830 回答
0

仅供参考,您可以通过以下方式获得它:

frontend http
    bind :80
    redirect scheme https code 301 if !{ ssl_fc }

frontend https
    bind :443 ssl crt /etc/haproxy/ssl
    reqadd X-Forwarded-Proto:\ https
    option http-server-close
    option forwardfor

    # ACL for example1.com
    acl ACL_example1.com hdr(host) -i example1.com
    use_backend backend1 if ACL_example1.com

    # ACL for example2.com
    acl ACL_example2.com hdr(host) -i example2.com
    use_backend backend2 if ACL_example2.com

backend backend1
    balance roundrobin
    server server1 192.168.1.10:80 check
    server server2 192.168.1.20:80 check

backend backend2
    balance roundrobin
    server server3 192.168.1.30:80 check
    server server4 192.168.1.40:80 check

/etc/haproxy/ssl您必须拥有格式.pem包含crtkey的证书:

example1.com.pem
example2.com.pem

并使用 1.5 以上版本的 HAProxy

于 2021-09-03T14:13:16.127 回答