it-swarm.com.de

nginx - Setzt mehrere Servernamen mit SSL-Unterstützung

Ich würde gerne nginx verwenden, um eine Website mit mehreren Domain-Namen und SSL bereitzustellen:

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

Beide verwenden denselben vhost, sodass ich den Servernamen nur zweimal festgelegt habe. Problem ist, dass ich nginx brauche, um das richtige SSL-Zertifikat für jeden Domainnamen zu liefern.

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

40
PascalTurbo

Ausgabe November 2014 : Die ursprüngliche 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 ein Multi-Domain-Zertifikat)

In diesem Fall können Sie mehrere vhosts verwenden, die dieselbe IP-Adresse/denselben https-Port abhören, und beide vhosts verwenden dasselbe Zertifikat (auf allen Schnittstellen abhören) , z.B.

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 Ihrem speziellen Fall, wenn beide Domains von denselben Daten bedient werden

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 obige Fall (eine IP für alle Zertifikate) funktioniert weiterhin mit modernen Browsern über die Angabe des Servernamens. SNI lässt den Client (Browser) den Host, den er erreichen möchte, im Anforderungsheader senden, sodass der Server (nginx) vhosts verarbeiten kann, bevor er sich mit dem Zertifikat befassen muss. Die Konfiguration ist dieselbe wie oben, außer dass jeder vhost ein spezifisches Zertifikat hat, crt und key.

( SNI mit Nginx-Unterstützung ab 0.9.8f, überprüfen Sie, ob Ihr Nginx-Server SNI-kompatibel ist )
( auch SF spricht über SNI und Browser-Unterstützung )

Wenn Sie auch ältere Browser erreichen möchten, benötigen Sie mehrere vhosts Abhören von jeweils einem unterschiedlichen IP-Adressen/https-Ports, z.

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 hier erklärt .

45
Ring Ø