web-dev-qa-db-ja.com

2つのドメイン、2つのSSL証明書、1つのIP

2つのドメインを実行しようとしています。1つはワイルドカード証明書を使用し、もう1つは1つのIPと1つのnginxからの通常の証明書を使用しています。

設定:example1.comとワイルドカード証明書example2.comと通常の証明書

ワイルドカードセットアップの現在のnginx構成は次のようになります(2番目のドメインの追加はまだ開始していません)。

/ etc/nginx/sites-available/example1.com:

server {
    listen  443 default_server ssl;
    server_name         _;

    ssl_certificate     /etc/nginx/ssl/example1.com/example1.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example1.com/example1.com.key;

    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

    # Perfect Forward Security
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
}

server {
    listen      443;
    server_name example1.com;

    error_log   /var/log/nginx/example1.com.error.ssl.log;
    access_log  /var/log/nginx/example1.com.access.ssl.log;

    root /var/www/example1.com/;
    index index.html;
}

server {
    listen      80;
    server_name example1.com;
    rewrite     ^   https://$server_name$request_uri? permanent;
}

今、私はいくつかのサブドメインも持っているので、ワイルドカード証明書を使用しています。サブドメイン構成は次のようになります。

/ etc/nginx/sites-available/sub1.example1.com

server {
    listen      443;
    server_name sub1.example1.com;

    error_log   /var/log/nginx/sub1.example1.com.error.ssl.log;
    access_log  /var/log/nginx/sub1.example1.com.access.ssl.log;

    root /var/www/sub1.example1.com/;

    location / {
        # nothing
    }
}

server {
    listen      80;
    server_name sub1.example1.com;
    rewrite     ^   https://$server_name$request_uri? permanent;
}

これはexample.comであるため、すべてのサブドメインがdefault_server構成からssl設定を継承しているため、この設定は非常に適切です。

2番目のドメインを追加する最善の方法は何ですか?同じ方法でドメインを追加すると、default_serverエントリが重複するため、起動時にエラーが発生することは明らかです。 default_serverの構成からexample2.comエントリを削除すると、example1.comのssl構成にフォールバックします。

欲しいのですが、達成する方法がわかりません:

ドメインごとに1つの「メイン」構成があり、それをexample1.com-defaultおよびexample2.com-defaultと呼びます。

これらの構成には、SSL構成、Perfect Forward Securityなど、異なるサブドメイン間で共通のすべての設定が含まれている必要があります。異なるサブドメインは、それぞれのメインドメインからこれらの設定を継承するより小さな構成です。

したがって、sub1.example1.comexample1.com-defaultからSSL設定を継承し、sub1.example2.comexample2.com-defaultからSSL設定を継承します。

これは可能ですか?それが可能であれば、どうすればこれを達成できますか?

前もって感謝します!

6
mediocre

証明書/キー以外のSSL設定を参照している場合は、nginx構成のhttpレベルに構成を移動することをお勧めします。

このようにして、設定はすべてのserverブロックに継承されます。

たとえば、Debianとその派生物では、/etc/nginx/conf.d/ssl.confファイルを作成し、次の行を追加できます。

ssl_session_cache    shared:SSL:10m;
ssl_session_timeout  10m;

# Perfect Forward Security
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";

conf.d内のファイルは、httpレベルに含まれています。

default_serverアプローチはここでは機能しません。

この後、serverブロックは次のようになります。

server {
    listen 443 default_server ssl;
    server_name _;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;
}

また、一部のドメインの一部の設定を上書きする場合は、serverレベルでディレクティブを再入力できます。

4
Tero Kilkanen