Nhiều vhost SSL sử dụng chứng chỉ ký tự đại diện trong nginx


14

Tôi có hai tên máy chủ chia sẻ cùng một tên miền mà tôi muốn phân phát qua HTTP. Tôi đã có chứng chỉ SSL ký tự đại diện và tạo hai cấu hình vhost:

Chủ nhà 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;

Máy chủ 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;

Tuy nhiên, tôi nhận được cùng một vhost được phục vụ cho cả tên máy chủ.

Câu trả lời:


17

Bạn cần tách vhost khỏi phần cấu hình / nghe ssl:

Phần nghe:

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

Và bây giờ 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;
}

Điều này sẽ không làm việc. Một vhost cần ssl_certificatessl_certificate_keycần được cấu hình bên trong serverhoặc httpvị trí. Trong ví dụ của bạn, bạn đã khai báo nó bên trong servervị trí đầu tiên , nhưng không khai báo nó cho hai vhost khác.
Pothi Kalimuthu

2
đó là đủ để cấu hình ssl_certificate, ssl_certificate_keyssltrên default_server chỉ. BTW, cấu hình này thực sự hoạt động.
Teftin

Thật không may, điều này không hoạt động: nginx phục vụ cùng một nội dung vhost trên cả hai máy chủ.
vincent.io

2
Rõ ràng bạn cần khởi động lại nginx thay vì tải lại khi thực hiện những thay đổi này. Rất cám ơn, câu trả lời của bạn hoạt động như một cơ duyên :)
vincent.io

1
Cảm ơn cho điều này, tôi cần thiết ssltrên listenthị này để làm việc với một nginx 1.4.x. Các listenchỉ thị của tôi trong các vhost cũng phải giống nhau theo nghĩa đen (tương đương logic là không đủ).
Dave S.

13

Nó thực sự được giải thích trong hướng dẫn: http://nginx.org/en/docs/http/configuring_https_servers.html#cert ve_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;
}

Bây giờ, nếu bạn có nhiều trang web, tôi khuyên bạn nên lưu trữ tất cả chúng trong một thư mục chỉ với phần máy chủ {} như trên trong các tệp đơn lẻ và một lệnh bao gồm trong tệp chính để tải tất cả chúng:

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
include /etc/nginx/conf.d/subfolder/*;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.