2013-01-21 28 views
26

Tôi rất muốn sử dụng nginx để phục vụ một trang web với nhiều tên miền và SSL:nginx - đặt nhiều server_name với ssl-hỗ trợ

  • webmail.example.com
  • webmail.beispiel.de

Cả hai đều sử dụng cùng một vhost vì vậy tôi chỉ đặt tên máy chủ hai lần. Vấn đề là, tôi cần nginx để phục vụ chứng chỉ ssl đúng cho mỗi tên miền.

Điều này có thể thực hiện với một vhost hoặc tôi có cần thiết lập hai vhost không?

Trả lời

25

Chỉnh sửa tháng 11 năm 2014: câu trả lời ban đầu không chính xác và chưa hoàn tất; nó cần làm mới! đây rồi.

Về cơ bản, có hai trường hợp

- Bạn sở hữu một giấy chứng nhận ký tự đại diện (hoặc giấy chứng nhận đa lĩnh vực)

Trong trường hợp này, bạn có thể sử dụng một vài vhosts nghe cùng địa chỉ IP/https port, và cả hai vhosts sử dụng cùng một chứng chỉ (nghe trên tất cả các giao diện), ví dụ

server { 
    listen 443; 
    server_name webmail.example.com; 
    root /var/www/html/docs/sslexampledata; 

    ssl on; 
    ssl_certificate /var/www/ssl/samecertif.crt; 
    ssl_certificate_key /var/www/ssl/samecertif.key; 
    ... 
} 


server { 
    listen 443; 
    server_name webmail.beispiel.de; 
    root /var/www/html/docs/sslbeispieldata; 

    ssl on; 
    ssl_certificate /var/www/ssl/samecertif.crt; 
    ssl_certificate_key /var/www/ssl/samecertif.key; 
    ... 
} 

hoặc bạn trường hợp cụ thể, có cả lĩnh vực phục vụ bởi cùng một dữ liệu

server { 
    listen 443; 
    server_name webmail.example.com webmail.beispiel.de; # <== 2 domains 
    root /var/www/html/docs/sslbeispieldata; 

    ssl on; 
    ssl_certificate /var/www/ssl/samecertif.crt; 
    ssl_certificate_key /var/www/ssl/samecertif.key; 
    ... 
} 



- Bạn có hai (+) chứng chỉ khác nhau

Các trường hợp trên (một IP cho tất cả các chứng chỉ) sẽ vẫn hoạt động với các trình duyệt hiện đại thông qua Chỉ dẫn tên máy chủ. SNI có trình khách (trình duyệt) gửi cho máy chủ lưu trữ nó muốn tiếp cận trong tiêu đề yêu cầu, cho phép máy chủ (nginx) xử lý vhosts trước khi phải xử lý chứng chỉ. Cấu hình giống như trên, ngoại trừ mỗi vhost có chứng chỉ cụ thể, crtkhóa.

(nginx support SNI from 0.9.8f, check your nginx server is SNI compliant)
(also, SF talks about SNI and browser support)

Ngược lại, nếu bạn muốn tiếp cận các trình duyệt cũ là tốt, bạn cần vài vhosts nghe mỗi một khác nhau địa chỉ IP/https cổng, ví dụ

server { 
    listen 1.2.3.4:443; # <== IP 1.2.3.4 
    server_name webmail.example.com; 
    root /var/www/html/docs/sslexampledata; 

    ssl on; 
    ssl_certificate /var/www/ssl/certifIP1example.crt; 
    ssl_certificate_key /var/www/ssl/certifIP1example.key; 
    ... 
} 


server { 
    listen 101.102.103:443; <== different IP 
    server_name webmail.beispiel.de; 
    root /var/www/html/docs/sslbeispieldata; 

    ssl on; 
    ssl_certificate /var/www/ssl/certifIP2beispiel.crt; 
    ssl_certificate_key /var/www/ssl/certifIP2beispiel.key; 
    ... 
} 

Lý do chính xác là explained here.

+0

Shure, đây là giải pháp nhưng không phải là giải pháp hay. Thay đổi một vhost có nghĩa là thay đổi một vhost khác. Và ít nhất sẽ có 4 vhosts ... – PascalTurbo

+0

Vui lòng xem cập nhật. Tôi khuyên bạn nên giải pháp đầu tiên mặc dù. –

+0

Xem http://nginx.org/en/docs/http/configuring_https_servers.html # certificate_with_several_names – barbolo

Các vấn đề liên quan