Me encantaría usar nginx para servir a un sitio web con varios nombres de dominio y SSL:

  • webmail.example.com
  • webmail.beispiel.de

Ambos utilizan el mismo vhost así que sólo se establece la server_name dos veces.
El problema es, que necesito nginx para servir a la correcta certificado ssl para cada nombre de dominio.

Es esto posible con un vhost o tengo que configurar dos vhosts?

InformationsquelleAutor PascalTurbo | 2013-01-21

1 Comentario

  1. 45

    Edición de noviembre de 2014: la respuesta inicial no es correcta y es incompleto ; necesitaba una actualización! aquí está.

    Básicamente, hay dos casos

    Usted es dueño de un certificado comodín (o multi-dominios certificado)

    En este caso, usted puede utilizar varios vhosts escuchando la misma dirección IP/puerto https, y ambos vhosts utilizar el mismo certificado (escuchando en todas las interfaces), por ejemplo,

    server {
      listen 443;
      server_name webmail.example.com;
      root /var/www/html/docs/sslexampledata;
    
      ssl on;
      ssl_certificate /var/www/ssl/samecertif.crt;
      ssl_certificate_key /var/www/ssl/samecertif.key;
      ...
    }
    
    
    server {
      listen 443;
      server_name webmail.beispiel.de;
      root /var/www/html/docs/sslbeispieldata;
    
      ssl on;
      ssl_certificate /var/www/ssl/samecertif.crt;
      ssl_certificate_key /var/www/ssl/samecertif.key;
      ...
    }
    

    o en el caso de que, habiendo ambos dominios servido por los mismos datos

    server {
      listen 443;
      server_name webmail.example.com webmail.beispiel.de; # <== 2 domains
      root /var/www/html/docs/sslbeispieldata;
    
      ssl on;
      ssl_certificate /var/www/ssl/samecertif.crt;
      ssl_certificate_key /var/www/ssl/samecertif.key;
      ...
    }
    

    Usted tiene dos(+) certificados diferentes

    El caso anterior (una IP para todos los certificados) todavía funciona con los navegadores modernos a través de la Indicación de Nombre de Servidor. SNI tiene el cliente (navegador) envía el host al que se quiere llegar en el encabezado de la solicitud, lo que permite al servidor (nginx) para lidiar con vhosts antes de tener que lidiar con el certificado. La configuración es la misma que la anterior, excepto que cada vhost tiene un certificado específico, crt y clave.

    (nginx apoyo SNI de 0.9.8 f, compruebe que su servidor nginx es compatible con SNI)

    (también, SF habla sobre el SNI y la compatibilidad del navegador)

    De otra manera, si quiere llegar a los navegadores antiguos como bien, se necesitan varios vhosts escuchar cada una diferentes direcciones IP/puertos https, por ejemplo,

    server {
      listen 1.2.3.4:443; # <== IP 1.2.3.4
      server_name webmail.example.com;
      root /var/www/html/docs/sslexampledata;
    
      ssl on;
      ssl_certificate /var/www/ssl/certifIP1example.crt;
      ssl_certificate_key /var/www/ssl/certifIP1example.key;
      ...
    }
    
    
    server {
      listen 101.102.103:443; <== different IP
      server_name webmail.beispiel.de;
      root /var/www/html/docs/sslbeispieldata;
    
      ssl on;
      ssl_certificate /var/www/ssl/certifIP2beispiel.crt;
      ssl_certificate_key /var/www/ssl/certifIP2beispiel.key;
      ...
    }
    

    La razón es bien se explica aquí.

    • Shure, esta es una solución, pero no buena. El cambio de un vhost significa el cambio de la otra. Y por lo menos habrá 4 vhosts…
    • Por favor, ver la actualización. Recomiendo la 1ª solución, aunque.
    • Consulte nginx.org/en/docs/http/…
    • Nota: la segunda opción – tener ssl_certificate dentro de un if no funciona.
    • Por lo que he leído, la HTTP_HOST es en los encabezados de solicitud y los encabezados están cifradas mediante SSL. Así que usted no puede inspeccionar el HTTP_HOST antes de descifrar con la correcta SSL cert. Un catch 22.
    • Respuesta completamente reescrito.

Dejar respuesta

Please enter your comment!
Please enter your name here