私の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
の証明書です。
複数のドメイン名の証明書を指定するにはどうすればよいですか?
すべての証明書をhaproxy1.pem
やhaproxy2.pem
などのファイルに連結するか、すべてのpemファイルを含むディレクトリを指定できます。
cat cert1.pem key1.pem > haproxy1.pem
cat cert2.pem key2.pem > haproxy2.pem
haproxy docs のとおり
次に、設定で次のようなものを使用します:
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
[〜#〜] sni [〜#〜] の詳細を読む
SSLサポートはhaproxyの開発段階にあり、明らかにパフォーマンスにかなりの影響があることを覚えておいてください。
このスレッドで説明されている他のソリューションがあります: https://stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites
お役に立てれば。
証明書のリストを連結したり指定したりする必要はなく、フォルダを指定するだけです。
frontend public
bind *:443 ssl crt /etc/haproxy/ssl/
注:フォルダーが空ではなく、有効なPEMファイルが存在することを確認してください。そうでない場合、HAProxyは実行されません。
多分あなたもこれをチェックすることができます:
/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