我们有几个在负载均衡器后面运行的 http 站点(具有使用 heartbeat 的故障转移功能)和一个 https 站点。一切运行良好,但现在我想添加另一个 https 站点。我找不到托管多个 https 站点的任何参考资料。
有没有人使用 HAproxy 托管多个 https 站点?你能告诉我我怎样才能做到这一点吗?请帮助我输入您的信息。
谢谢,
桑托什
您必须根据前端(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。
您可以使用 HAProxy 启动任意数量的启用 HTTPS 的网站。您必须在 HAProxy 框中进行 SSL 卸载。并且 ha-proxy 将通过 HTTP 将请求重定向到您的服务器(站点框)。在 HA-Proxy 进行 SSL-ffload 之后,您可以通过解析 URI 来区分来自 2 个不同 https 网站的请求
有关更多详细信息,请参阅 HA-Proxy 文档,请参阅 hdr_dom 和 acl 部分,这将解决您的问题。
仅供参考,您可以通过以下方式获得它:
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
包含crt
和key
的证书:
example1.com.pem
example2.com.pem
并使用 1.5 以上版本的 HAProxy