nginx-установить несколько имен серверов с поддержкой ssl

Я хотел бы использовать nginx для обслуживания веб-сайта с несколькими доменными именами и SSL:

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

оба используют один и тот же vhost, поэтому я устанавливаю имя_сервера только дважды. Проблема в том, что мне нужен nginx для обслуживания правильного SSL-сертификата для каждого доменного имени.

возможно ли это с одним vhost или мне нужно настроить два vhosts?

1 ответов


Редактировать Ноябрь 2014: первоначальный ответ не является правильным и неполным ; он нуждался в обновлении! вот оно.

в основном, в двух случаях

- у вас есть подстановочный сертификат (или многодоменный сертификат)

В этом случае, вы можете использовать несколько виртуальных доменов прослушивание одного и того же IP-адреса/https-порта, и оба виртуальных доменов используйте тот же сертификат (прослушивание на всех интерфейсах), например,

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



- у вас есть два (+), различные сертификаты

случай выше (один IP для всех сертификатов) по-прежнему будет работать с современными браузерами через указание имени сервера. SNI имеет клиента (браузер) отправить хост, который он хочет достичь в заголовке запроса, что позволяет серверу (nginx) иметь дело с виртуальных доменов перед дело с сертификатом. Конфигурация такая же, как и выше, за исключением того, что каждый vhost имеет специальный сертификат,crt и ключ.

(поддержка nginx SNI от 0.9.8 f, проверьте, что ваш сервер nginx совместим с SNI)
(кроме того, SF говорит о SNI и поддержке браузера)

В противном случае, если вы хотите достичь более старых браузеров, вам нужно несколько виртуальных доменов слушая друг к разные IP-адреса/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;
  ...
}

причина хорошо пояснил, что.