我可以在 Nginx 服务器块中为 SSL 证书和密钥文件使用变量吗?

我可以在 Nginx 服务器块中为 SSL 证书和密钥文件使用变量吗?

我正在使用 Nginx Apache 反向代理,我有多个 VHOSTS,并且我想在支持 SSL 的单个 nginx vhost 文件中为它们全部提供服务。

我的服务器块是

    server {
    listen 80;
    server_name _;

    root   /var/www/$host/web;


    access_log  /var/log/mylogs/httpd/$host/access.log; 

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        proxy_pass http://SERVERIP:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\. {
        deny all;
    }


}

对于所有网站,即使没有 SSL,这也能正常工作,但是当我对下面的 SSL 支持执行相同操作时:

    server {
    listen 80;
    server_name _;

    ssl on;
    ssl_certificate /var/www/$host/ssl/$host-le.crt;
    ssl_certificate_key /var/www/$host/ssl/$host-le.key;
    root   /var/www/$host/web;


    access_log  /var/log/mylogs/httpd/$host/access.log; 

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        proxy_pass http://MYIP:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\. {
        deny all;
    }

}

我得到了类似的错误

ssl_certificate /var/www/$host/ssl/$host-le.crt not found
nginx config test failed

我的 vhost web 文件采用这种格式

/var/www/domain1.com/web /var/www/domain2.com/web /var/www/domain3.com/web

他们的 SSL 证书和密钥在

/var/www/domain1.com/ssl /var/www/domain2.com/ssl /var/www/domain3.com/ssl

请帮助我,我是新手,仍在学习......

答案1

使用$ssl_server_name变量代替$host
从 Nginx 1.15.9 和 OpenSSL 1.0.2 版本开始可以使用。 http://nginx.org/ru/docs/http/ngx_http_ssl_module.html

ssl_certificate     $ssl_server_name.crt;
ssl_certificate_key $ssl_server_name.key;

相关内容