Nginx 中 SSL 证书路径中的 $host_name 变量

Bel*_*mor 3 ssl nginx

我正在尝试使用 SSL 在 nginx 中设置默认服务器,SSL 证书的路径应包含站点名称,类似的内容

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate ssl/$host_name/fullchain.pem;
    ssl_certificate_key ssl/$host_name/privkey.pem;
Run Code Online (Sandbox Code Playgroud)

它不起作用 - 在错误日志中

cannot load certificate "/etc/nginx/ssl//fullchain.pem"
Run Code Online (Sandbox Code Playgroud)

如果我在标题中打印此变量,add_header XX "$http_host"; 它会显示正确的站点名称。有没有办法在证书路径中使用站点名称?我的服务器上有很多具有典型配置的站点,因此对我来说最好只有一个配置。Nginx 版本 1.18,如果我手动定义一些变量并将其放入ssl_certificate参数中,一切正常

Rom*_*man 5

您需要使用$ssl_server_name而不是$host_nameor $host- 请参阅文档中的示例。你看,在客户端发送 HTTP 请求之前需要证书,所以当时$host_name和 都$host没有定义。

但正如那些文档所说,

请注意,使用变量意味着每次 SSL 握手都会加载证书,这可能会对性能产生负面影响。

因此,最好为所有服务器(使用某种模板)生成具有固定服务器名称(和固定证书路径)的配置文件。