Beberapa vhost SSL menggunakan sertifikat wildcard di nginx

14

Saya memiliki dua nama host yang berbagi nama domain yang sama yang ingin saya layani melalui HTTPs. Saya punya sertifikat wildcard-SSL dan membuat dua konfigurasi vhost:

Tuan rumah A

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;

Tuan rumah 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;

Namun, saya mendapatkan vhost yang sama untuk kedua nama host.

vincent.io
sumber

Jawaban:

17

Anda perlu memisahkan vhosts dari bagian ssl mendengarkan / konfigurasi:

Bagian mendengarkan:

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

Dan sekarang 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;
}
Teftin
sumber
Ini tidak akan berhasil. Kebutuhan vhost ssl_certificatedan ssl_certificate_keyyang harus dikonfigurasi di dalam serveratau httplokasi. Dalam contoh Anda, Anda telah mendeklarasikannya di dalam serverlokasi pertama , tetapi tidak mendeklarasikannya untuk dua vhost lainnya.
Pothi Kalimuthu
2
itu sudah cukup untuk dikonfigurasi ssl_certificate, ssl_certificate_keydan sslhanya pada default_server. BTW, konfigurasi ini benar-benar berfungsi.
Teftin
Sayangnya ini tidak berfungsi: nginx menyajikan konten vhost yang sama di kedua host.
vincent.io
2
Tampaknya Anda harus memulai ulang nginx alih-alih memuatnya kembali saat melakukan perubahan ini. Terima kasih banyak, jawaban Anda bekerja seperti pesona :)
vincent.io
1
Terima kasih untuk ini, yang saya butuhkan sslpada listendirektif untuk ini bekerja dengan nginx 1.4.x. listenArahan saya di vhosts juga harus benar-benar sama (kesetaraan logis tidak cukup).
Dave S.
13

Ini sebenarnya dijelaskan dalam manual: 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;
}

Sekarang, jika Anda memiliki banyak situs, saya sarankan untuk menyimpan semuanya dalam folder dengan hanya bagian server {} seperti di atas dalam file tunggal, dan sertakan arahan dalam file utama untuk memuat semuanya:

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