Подтвердить что ты не робот

Nginx - установить множественное имя_сервера с поддержкой ssl

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

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

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

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

4b9b3361

Ответ 1

Изменить ноябрь 2014: исходный ответ неверен и является неполным; он нуждался в обновлении! вот оно.

В принципе, есть два случая

- У вас есть сертификат подстановки (или сертификат с несколькими доменами)

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



- У вас есть два (+) разных сертификата

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

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

Причина хорошо объясняется здесь.