haproxy 同一端口上的两个应用程序使用不同的证书

haproxy 同一端口上的两个应用程序使用不同的证书

我正在设置 haproxy。我的配置是:

frontend bothApps
        bind *:9999
        mode http
        acl prov path_end -i /prov-0.0.1-SNAPSHOT/
        acl web path end -i /web-0.0.1-SNAPSHOT/
        acl prov1 path_end -i /prov-0.0.1-SNAPSHOT/testAuthenticated.html
        acl web1 path_end -i /web-0.0.1-SNAPSHOT/testAuthenticated.html
        use_backend focus if prov
        use_backend focus if prov1
        use_backend cnt if web
        use_backend cnt if web1

并且它无需 https 即可正常工作。现在我想添加 https,但两个应用程序都应该在端口8443(https://localhost:8443/prov-0.0.1-SNAPSHOThttps://localhost:8443/web-0.0.1-SNAPSHOT) 上调用 haproxy,但使​​用不同的证书 - prov( haproxyPROV.pem)、web( haproxyWEB.pem)。我该如何配置它?

我试过:

frontend https
        bind *:8443 ssl crt /etc/haproxy/haproxyWEB.pem
        mode http

但这里每个端口只能有一个证书

答案1

您可以在一个端口上使用多个证书:

frontend foo
    bind *:8443 ssl crt /path/to/cert1.pem crt /path/to/cert2.pem

Haproxy 使用 TLS SNI 将证书与连接进行匹配(如果 SNI 不存在或未找到匹配项,则bind使用线上的第一个证书(上例中的 cert1.pem))。因此,为了实现您的目标,您必须将两个不同的域名指向此主机:端口。例如web.example.comprov.example.com指向同一主机。我想这就是所有这些评论的目的。
附注,您可以path_end在 ACL 中使用,例如acl prov path_end -i /prov-0.0.1-SNAPSHOT/,但这也会匹配/foobar/prov-0.0.1-SNAPSHOT//web-0.0.1-SNAPSHOT/prov-0.0.1-SNAPSHOT/,这可能是也可能不是您想要的。通常pathpath_beg更合适。

相关内容