Кілька vhosts SSL за допомогою сертифікату wildcard у nginx


14

У мене є два імена хостів, які мають одне і те ж доменне ім’я, яке я хочу використовувати через 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;

Господар Б

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;

Однак я отримую той самий vhost, який подається для будь-якого імені хоста.

Відповіді:


17

Вам потрібно розділити 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;
}

А тепер вхости:

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

Це не спрацювало б. А потреба ВХоста ssl_certificateі ssl_certificate_keyщо повинна бути налаштоване всередині serverабо httpмісце розташування. У вашому прикладі ви оголосили це всередині першого serverмісця, але не оголосили його для двох інших пристрастей.
Pothi Kalimuthu

2
цього досить , щоб Configure ssl_certificate, ssl_certificate_keyі sslна default_server тільки. До речі, ця конфігурація фактично працює.
Тефтін

На жаль, це не працює: nginx подає однаковий вміст vhost на обох хостах.
vincent.io

2
Мабуть, вам потрібно перезапустити nginx, а не перезавантажувати його під час цих змін. Велике спасибі, ваша відповідь працює як шарм :)
vincent.io

1
Дякую за це, мені потрібна sslбула listenдиректива для роботи з 1.4.x nginx. Мої listenдирективи у пристрастях також мали бути буквально однаковими (логічна еквівалентність була недостатньою).
Дейв С.

13

Це фактично пояснено в посібнику: 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;
}

Тепер, якщо у вас багато сайтів, я пропоную зберігати їх у папці з лише сервером {} частиною, як зазначено вище, в одних файлах, а директива включити в основний файл, щоб завантажити їх усі:

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
include /etc/nginx/conf.d/subfolder/*;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.