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.

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

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/*;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.