web-dev-qa-db-ja.com

nginx-ssl-supportで複数のserver_nameを設定

Nginxを使用して、複数のドメイン名とSSLを持つWebサイトを提供したいと思います。

  • webmail.example.com
  • webmail.beispiel.de

両方とも同じ仮想ホストを使用するため、server_nameを2回だけ設定します。問題は、各ドメイン名に対して正しいSSL証明書を提供するためにnginxが必要なことです。

これは1つの仮想ホストで可能ですか、それとも2つの仮想ホストを設定する必要がありますか?

40
PascalTurbo

2014年11月編集:最初の答えは正しくなく、不完全です。更新が必要でした!ここにあります。

基本的に、2つのケースがあります

-ワイルドカード証明書を所有しています(またはマルチドメイン証明書)

この場合、同じIPアドレス/ httpsポートをリッスンする複数のvhostsを使用でき、両方のvhostsは同じ証明書を使用します(すべてのインターフェースでリスニング)、例えば.

server {
  listen 443;
  server_name webmail.example.com;
  root /var/www/html/docs/sslexampledata;

  ssl on;
  ssl_certificate /var/www/ssl/samecertif.crt;
  ssl_certificate_key /var/www/ssl/samecertif.key;
  ...
}


server {
  listen 443;
  server_name webmail.beispiel.de;
  root /var/www/html/docs/sslbeispieldata;

  ssl on;
  ssl_certificate /var/www/ssl/samecertif.crt;
  ssl_certificate_key /var/www/ssl/samecertif.key;
  ...
}

または特定のケースでは、両方のドメインに同じデータが提供される

server {
  listen 443;
  server_name webmail.example.com webmail.beispiel.de; # <== 2 domains
  root /var/www/html/docs/sslbeispieldata;

  ssl on;
  ssl_certificate /var/www/ssl/samecertif.crt;
  ssl_certificate_key /var/www/ssl/samecertif.key;
  ...
}



-2つの(+)異なる証明書があります

上記のケース(すべての証明書に1つのIP)は、サーバー名表示を介して最新のブラウザーで引き続き機能します。 SNIは、クライアント(ブラウザー)が要求ヘッダーで到達したいホストを送信するようにし、サーバー(nginx)が証明書を処理する前にvhostsを処理できるようにします。構成は上記と同じですが、各vhostには特定の証明書、crtおよびがあります。キー

nginxは0.9.8fからSNIをサポートし、nginxサーバーがSNIに準拠していることを確認します
また、SFはSNIとブラウザのサポートについて話します

それ以外の場合、古いブラウザにもアクセスするには、vhostsがそれぞれdifferentIPアドレス/ httpsポートをリッスンする必要があります、例えば.

server {
  listen 1.2.3.4:443; # <== IP 1.2.3.4
  server_name webmail.example.com;
  root /var/www/html/docs/sslexampledata;

  ssl on;
  ssl_certificate /var/www/ssl/certifIP1example.crt;
  ssl_certificate_key /var/www/ssl/certifIP1example.key;
  ...
}


server {
  listen 101.102.103:443; <== different IP
  server_name webmail.beispiel.de;
  root /var/www/html/docs/sslbeispieldata;

  ssl on;
  ssl_certificate /var/www/ssl/certifIP2beispiel.crt;
  ssl_certificate_key /var/www/ssl/certifIP2beispiel.key;
  ...
}

その理由は ここで説明 です。

45
Ring Ø