我的 haproxy 实例服务于 2 个域(主要是为了避免主站点上的 XSS)。
规则如下
bind :443 ssl crt /etc/ssl/haproxy.pem
acl is_static hdr_end(Host) -i example.com
acl is_api hdr_end(Host) -i api.example.com
acl is_files hdr_end(Host) -i example.io
redirect scheme https if !{ ssl_fc } is_static is_api
现在 SSL 使用/etc/ssl/haproxy.pem
为默认证书,它是 的证书,example.com
而不是example.io
。
如何为多个域名指定证书?
答案1
您可以将所有证书连接到文件中haproxy1.pem
,或者haproxy2.pem
可以指定包含所有 pem 文件的目录。
cat cert1.pem key1.pem > haproxy1.pem
cat cert2.pem key2.pem > haproxy2.pem
然后在配置中使用类似这样的内容:
defaults
log 127.0.0.1 local0
option tcplog
frontend ft_test
mode http
bind 0.0.0.0:443 ssl crt /certs/haproxy1.pem crt /certs/haproxy2.pem
use_backend bk_cert1 if { ssl_fc_sni my.example.com } # content switching based on SNI
use_backend bk_cert2 if { ssl_fc_sni my.example.org } # content switching based on SNI
backend bk_cert1
mode http
server srv1 <ip-address2>:80
backend bk_cert2
mode http
server srv2 <ip-address3>:80
阅读更多内容信噪比
请记住,SSL 支持正处于 haproxy 的开发阶段,而且显然会对性能造成相当大的影响。
此主题中还讨论了其他解决方案:https://stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites
希望这可以帮助。
答案2
不再需要连接或指定证书列表,只需指定一个文件夹:
frontend public
bind *:443 ssl crt /etc/haproxy/ssl/
注意:确保文件夹不为空并且存在有效的 PEM 文件,否则 HAProxy 将无法运行。
答案3
也许你也可以检查一下:
/etc/ssl/private/crt-list.txt:
/etc/ssl/private/mydomain.pem
/etc/ssl/private/myotherdomain.pem
haproxy.cfg:
frontend https-in:
bind *:443 ssl crt-list /etc/ssl/private/crt-list.txt