2013-01-21 6 views
26

würde ich gerne nginx verwenden, um eine Website mit mehreren Domain-Namen und SSL dienen:nginx - Set mehrere Server mit ssl-Unterstützung

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

Beide verwenden den gleichen vhost, so dass ich nur den Servername zweimal festlegen. Problem ist, dass ich Nginx brauche, um das korrekte SSL-Zertifikat für jeden Domain-Namen zu liefern.

Ist dies mit einem vhost möglich oder muss ich zwei vhosts einrichten?

Antwort

25

Bearbeiten November 2014: die erste Antwort ist nicht korrekt und unvollständig; es brauchte eine Auffrischung! hier ist es.

Grundsätzlich gibt es zwei Fälle

- Sie besitzen ein Wildcard-Zertifikat (oder Multi-Domänen-Zertifikat)

In diesem Fall können Sie mehrere vhosts verwenden auf die gleiche IP-Adresse hören/https port, und beide vhosts verwenden das gleiche Zertifikat (Überwachung auf allen Schnittstellen), z

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

oder in Ihnen konkreten Fall beide Domänen mit den gleichen Daten dienten

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



- Sie haben zwei (+) verschiedene Zertifikate

Der Fall oben (eine IP für alle Zertifikate) funktioniert weiterhin mit modernen Browsern über Server Name Indication. SNI lässt den Client (Browser) den Host, den er erreichen möchte, im Anforderungsheader senden, so dass der Server (nginx) mit vhosts umgehen kann, bevor er sich mit dem Zertifikat befassen muss. Die Konfiguration ist die gleiche wie oben, außer dass jeder vhost ein spezifisches Zertifikat, crt und Schlüssel hat.

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

Andernfalls, wenn Sie auch älteren Browser erreichen wollen, müssen Sie mehr vhosts jeweils eine verschiedene IP-Adressen/https-Ports hören, zum Beispiel

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

Der Grund ist gut explained here.

+0

Shure, das ist eine Lösung, aber keine nette. Einen vhost zu ändern bedeutet, den anderen zu ändern. Und mindestens wird es 4 vhosts geben ... – PascalTurbo

+0

Bitte beachten Sie das Update. Ich empfehle jedoch die 1. Lösung. –

+0

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