我正在设置 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-SNAPSHOT
和https://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.com
和prov.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/
,这可能是也可能不是您想要的。通常path
或path_beg
更合适。