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.

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

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/*;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.