SSL vhost หลายตัวที่ใช้ไวด์การ์ดใน nginx


14

ฉันมีชื่อโฮสต์สองชื่อที่ใช้ชื่อโดเมนเดียวกันซึ่งฉันต้องการให้บริการผ่าน HTTP ฉันมีใบรับรอง wildcard-SSL และสร้าง vhost configs สองอัน:

โฮสต์ 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;

โฮสต์ 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;

อย่างไรก็ตามฉันได้รับ vhost เดียวกันสำหรับชื่อโฮสต์อย่างใดอย่างหนึ่ง

คำตอบ:


17

คุณต้องแยก vhosts จาก ssl Listen / ส่วนกำหนดค่า:

ส่วนการฟัง:

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

สิ่งนี้จะไม่ทำงาน ความต้องการ vhost ssl_certificateและssl_certificate_keyควรกำหนดค่าภายในserverหรือhttpที่ตั้ง ในตัวอย่างของคุณคุณได้ประกาศไว้ในตำแหน่งแรกserverแต่ไม่ได้ประกาศสำหรับอีกสอง vhosts
Pothi Kalimuthu

2
ก็พอที่จะกำหนดค่าssl_certificate, ssl_certificate_keyและsslใน default_server เท่านั้น BTW การกำหนดค่านี้ใช้งานได้จริง
Teftin

น่าเสียดายที่นี่ใช้งานไม่ได้: nginx ให้บริการเนื้อหา vhost เดียวกันบนทั้งสองโฮสต์
vincent.io

2
เห็นได้ชัดว่าคุณต้องรีสตาร์ท nginx แทนที่จะโหลดซ้ำเมื่อทำการเปลี่ยนแปลงเหล่านี้ ขอบคุณมากคำตอบของคุณใช้งานได้อย่างมีเสน่ห์ :)
vincent.io

1
ขอบคุณสำหรับการนี้ผมจำเป็นต้องมีsslในlistenคำสั่งสำหรับการทำงานกับ 1.4.x Nginx listenคำสั่งของฉันใน vhost นั้นก็ต้องเหมือนกัน (ความเท่าเทียมกันเชิงตรรกะไม่เพียงพอ)
เดฟเอส

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/*;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.