如何在 NGINX 中的 SSL 证书路径中使用 $host

问题描述 投票:0回答:1

我有 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 加载证书似乎不起作用。有什么建议这里可能会出什么问题吗?

nginx
1个回答
0
投票

$host
变量是根据三个来源计算的,包括http请求中的标头。

ssl_certificate
在建立安全连接之前(即在服务器接收到任何 http 标头之前)进行处理。

手册页给出了使用

$ssl_server_name
的示例,这是通过SNI请求的服务器名称。

您应该能够在

$ssl_server_name
语句中使用
$host
而不是
map

© www.soinside.com 2019 - 2024. All rights reserved.