Назад | Перейти на главную страницу

Несколько SSL-хостов с использованием подстановочного сертификата в nginx

У меня есть два имени хоста с одним и тем же доменным именем, которое я хочу обслуживать через HTTP. У меня есть сертификат wildcard-SSL и созданы две конфигурации vhost:

Хост А

listen      127.0.0.1:443 ssl;
server_name     a.example.com;
root        /data/httpd/a.example.com;
ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;

Хост B

listen      127.0.0.1:443 ssl;
server_name     b.example.com;
root        /data/httpd/b.example.com;
ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;

Однако я получаю один и тот же виртуальный хост для любого имени хоста.

Вам нужно разделить vhosts из части прослушивания / конфигурации ssl:

Слушающая часть:

server {
  listen              127.0.0.1:443 default_server ssl;
  server_name         _;
  ssl_certificate     /etc/ssl/wildcard.cer;
  ssl_certificate_key /etc/ssl/wildcard.key;
}

А теперь vhosts:

server {
  listen      127.0.0.1:443;
  server_name a.example.com;
  root        /data/httpd/a.example.com;
}

server {
  listen      127.0.0.1:443;
  server_name b.example.com;
  root        /data/httpd/b.example.com;
}

На самом деле это объясняется в руководстве: http://nginx.org/en/docs/http/configuring_https_servers.html#certificate_with_several_names

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
server {
  listen      443 ssl;
  server_name a.example.com;
  root        /data/httpd/a.example.com;
}
server {
  listen      443 ssl;
  server_name b.example.com;
  root        /data/httpd/b.example.com;
}

Теперь, если у вас много сайтов, я предлагаю хранить их все в папке с серверной частью {}, как указано выше, в отдельных файлах и директивой include в главном файле для загрузки всех из них:

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
include /etc/nginx/conf.d/subfolder/*;