Mehrere SSL-vhosts, die ein Platzhalterzertifikat in nginx verwenden

14

Ich habe zwei Hostnamen, die denselben Domainnamen verwenden, den ich über HTTPs bereitstellen möchte. Ich habe ein Wildcard-SSL-Zertifikat und zwei vhost-Konfigurationen erstellt:

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

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

Ich erhalte jedoch den gleichen vhost, der für beide Hostnamen bereitgestellt wird.

vincent.io
quelle

Antworten:

17

Sie müssen vhosts vom ssl-Listening- / Konfigurationsteil trennen:

Zuhörteil:

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

Und jetzt 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;
}
Teftin
quelle
Das würde nicht funktionieren. Ein vhost benötigt ssl_certificateund ssl_certificate_keydas sollte innerhalb serveroder httpOrt konfiguriert werden . In Ihrem Beispiel haben Sie es an der ersten serverPosition deklariert, aber nicht für die anderen beiden vhosts.
Pothi Kalimuthu
2
es ist genug , um zu konfigurieren ssl_certificate, ssl_certificate_keyund sslauf default_server nur. Übrigens funktioniert diese Konfiguration tatsächlich.
Teftin
Leider funktioniert dies nicht: nginx bedient auf beiden Hosts den gleichen vhost-Inhalt.
vincent.io
2
Anscheinend müssen Sie Neustart von nginx statt Nachladen es , wenn diese Änderungen zu tun. Vielen Dank, Ihre Antwort funktioniert wie ein Zauber :)
vincent.io
1
Danke dafür, ich brauchte ssldie listenDirektive dafür, um mit einem 1.4.x Nginx zu arbeiten. Meine listenAnweisungen in den vhosts mussten auch buchstäblich gleich sein (logische Äquivalenz war nicht ausreichend).
Dave S.
13

Es wird tatsächlich im Handbuch erklärt: 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;
}

Wenn Sie viele Sites haben, empfehle ich, alle in einem Ordner zu speichern, in dem nur der Serverteil {} wie oben in einzelnen Dateien enthalten ist, und in der Hauptdatei eine Include-Anweisung, um alle zu laden:

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
include /etc/nginx/conf.d/subfolder/*;
Alter Mann
quelle