我有 2 个证书,一个用于 foo.com 域,另一个用于 bar.com
不,我想从一个服务器定义同时提供两者服务
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name foo.com bar.com;
ssl_certificate $cert_path/fullchain.pem;
ssl_certificate_key $cert_path/privkey.pem;
}
在
http { .. }
中我定义了 $cert_path
map $host $cert_path {
foo.com /etc/certbot/live/foo.org;
bar.com /etc/certbot/live/bar.org;
}
我不断收到这样的日志错误
2024/10/04 11:30:13 [error] 9#9: *73 cannot load certificate "/fullchain.pem": BIO_new_file() failed (SSL: error:80000002:system library::No such file or directory:calling fopen(/fullchain.pem, r) error:10000080:BIO routines::no such file) while SSL handshaking, client: x.x.x.x, server: 0.0.0.0:443
不知何故,地图的技巧和尝试根据 $host-name 加载证书似乎不起作用。有什么建议这里可能会出什么问题吗?
$host
变量是根据三个来源计算的,包括http请求中的标头。
ssl_certificate
在建立安全连接之前(即在服务器接收到任何 http 标头之前)进行处理。
手册页给出了使用
$ssl_server_name
的示例,这是通过SNI请求的服务器名称。
您应该能够在
$ssl_server_name
语句中使用 $host
而不是 map
。