Più host SSL che utilizzano il certificato jolly in nginx


14

Ho due nomi host che condividono lo stesso nome di dominio che voglio pubblicare su HTTP. Ho un certificato jolly-SSL e ho creato due configurazioni vhost:

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;

Tuttavia, ottengo lo stesso vhost offerto per entrambi i nomi host.

Risposte:


17

Devi dividere i vhosts dalla parte di ascolto / configurazione di ssl:

Parte d'ascolto:

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

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

Questo non funzionerebbe. A esigenze vhost ssl_certificatee ssl_certificate_keyche dovrebbero essere configurati all'interno servero httpposizione. Nel tuo esempio, l'hai dichiarato all'interno della prima serverposizione, ma non lo hai dichiarato per gli altri due host.
Pothi Kalimuthu,

2
è sufficiente configurare ssl_certificate, ssl_certificate_keye sslil default_server solo. A proposito, questa configurazione funziona davvero.
Teftin,

Sfortunatamente questo non funziona: nginx serve lo stesso contenuto vhost su entrambi gli host.
vincent.io,

2
Apparentemente è necessario riavviare nginx invece di ricaricarlo quando si apportano queste modifiche. Molte grazie, la tua risposta funziona come un incanto :)
vincent.io,

1
Grazie per questo, avevo bisogno ssldella listendirettiva perché funzionasse con un nginx 1.4.x. Anche le mie listendirettive nei vhosts dovevano essere letteralmente le stesse (l'equivalenza logica non era sufficiente).
Dave S.,

13

In realtà è spiegato nel manuale: 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;
}

Ora, se hai molti siti, ti suggerisco di archiviarli tutti in una cartella con solo la parte del server {} come sopra in singoli file e una direttiva include nel file principale per caricarli tutti:

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
include /etc/nginx/conf.d/subfolder/*;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.