69

nginxを使用して、複数のドメイン名とSSLを使用してWebサイトにサービスを提供したいと思います。

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

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

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

4

1 に答える 1

86

2014年11月の編集:最初の答えは正しくなく、不完全です; リフレッシュが必要でした!ここにあります。

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

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

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

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を処理できるようにします。構成は上記と同じですが、各仮想ホストに特定の証明書、crt、およびキーがある点が異なります。

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

それ以外の場合、古いブラウザにもアクセスしたい場合は、それぞれが異なるIPアドレス/httpsポートをリッスンする複数のvhostが必要です。

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;
  ...
}

その理由はここでよく説明されています

于 2013-01-21T07:40:08.973 に答える