Múltiples vhosts SSL con certificado comodín en nginx

14

Tengo dos nombres de host que comparten el mismo nombre de dominio que quiero servir a través de HTTP. Tengo un certificado SSL comodín y creé dos configuraciones de vhost:

Anfitrión 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;

Anfitrión 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;

Sin embargo, obtengo el mismo vhost servido para cualquier nombre de host.

vincent.io
fuente

Respuestas:

17

Necesita dividir vhosts de la parte de escucha / configuración de SSL:

Parte de escucha:

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

Y ahora 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
fuente
Esto no funcionaria. Un vhost necesita ssl_certificatey ssl_certificate_keydebe configurarse dentro servero en la httpubicación. En su ejemplo, lo ha declarado dentro de la primera serverubicación, pero no lo ha declarado para los otros dos vhosts.
Pothi Kalimuthu
2
es suficiente para configurar ssl_certificate, ssl_certificate_keyy sslsolo en default_server. Por cierto, esta configuración realmente funciona.
Teftin
Desafortunadamente, esto no funciona: nginx sirve el mismo contenido de vhost en ambos hosts.
vincent.io
2
Aparentemente, necesita reiniciar nginx en lugar de volver a cargarlo al hacer estos cambios. Muchas gracias, su respuesta funciona como un encanto :)
vincent.io
1
Gracias por esto, necesitaba sslla listendirectiva para que esto funcione con un 1.4.x nginx. Mis listendirectivas en los vhosts también tenían que ser literalmente las mismas (la equivalencia lógica no era suficiente).
Dave S.
13

En realidad, se explica en el manual: 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;
}

Ahora, si tiene muchos sitios, sugiero almacenarlos todos en una carpeta con solo la parte del servidor {} como se indica arriba en archivos individuales, y una directiva de inclusión en el archivo principal para cargarlos todos:

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
include /etc/nginx/conf.d/subfolder/*;
Tipo viejo
fuente