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.

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

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/*;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.