Ответ 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;
...
}
Причина хорошо объясняется здесь.