web-dev-qa-db-ja.com

Nginxサーバーブロックの変数をSSL証明書とキーファイルに使用できますか?

Nginx Apacheリバースプロキシを使用しています。複数のVHOSTがあり、SSLをサポートする単一のnginxvhostファイルでそれらすべてを提供したいと考えています。

私のサーバーブロックは

    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

私の仮想ホスト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

私を助けてください、私は初心者でまだ学んでいます..。

2
Dark9Y8

$ssl_server_nameの代わりに$Host変数を使用してください。
Nginx1.15.9およびOpenSSL1.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;
1
user527115