Después de indagar en diferentes repositorios y foros de internet finalmente hemos hallado la respuesta que te compartiremos ahora.
Solución:
Solución 1:
La directiva ServerName es
Nombre de host y puerto que utiliza el servidor para identificarse
Mientras que ServerAlias es
Nombres alternativos para un host utilizado al hacer coincidir solicitudes con hosts virtuales de nombre
Dado un host virtual configurado como
...
ServerName example.com
ServerAlias www.example.com foo.example.com *.somewherelse.org
...
Apache respondería a example.com
, www.example.com
foo.example.com
y cualquier cosa en .somewherelse.org
con este servidor virtual
Solución 2:
Una diferencia clave que encontré por experimento (basado en la necesidad) es que cuando se usa con subdominios comodín (por ejemplo, “*.mycompany.com” y “*.mycompany.net”), el comodín debe especificarse como ServerAlias y no ServerName.
No he probado esto con no SSL, pero con SSL este fue el caso (para mí). Me decidí por una configuración de:
Listen *:8443
NameVirtualHost *:8443
SSLStrictSNIVHostCheck off
ServerName mycompany.com
ServerAlias *.mycompany.com
...
ServerName mycompany.net
ServerAlias *.mycompany.net
...
Cuando se usaba “ServerName *.mycompany.net”, siempre se usaba el primer host virtual. Este no era solo el certificado, también estaba reescribiendo y representando la lógica.
Es muy posible que esto solo suceda con SSL, ya que hay muchas otras cosas en marcha, como se menciona en SSL con hosts virtuales que usan SNI y muchos subprocesos de ServerFault. Habiendo seguido todos los consejos en estos, este fue el último aspecto que rascó la cabeza.
Vine a este hilo para tratar de entender por qué había una diferencia y confieso que me acerco pero no lo entiendo completamente.
En mi caso, ServerName parece hacer un poco menos (no se selecciona en la búsqueda de host virtual), en lugar de más.
Ejecutar “apacectl -S | httpd -S” según el consejo de Iain da:
wildcard NameVirtualHosts and _default_ servers:
*:8443 is a NameVirtualHost
default server mycompany.com (/etc/httpd/conf/httpd.conf:1100)
port 8443 namevhost mycompany.com (/etc/httpd/conf/httpd.conf:1100)
wild alias *.mycompany.com
port 8443 namevhost mycompany.net (/etc/httpd/conf/httpd.conf:1164)
wild alias *.mycompany.net
Editar: (agregando ServerName con el comodín para completar)
wildcard NameVirtualHosts and _default_ servers:
*:8443 is a NameVirtualHost
default server *.mycompany.com (/etc/httpd/conf/httpd.conf:1040)
port 8443 namevhost *.mycompany.com (/etc/httpd/conf/httpd.conf:1040)
port 8443 namevhost *.mycompany.net (/etc/httpd/conf/httpd.conf:1105)
Nota: la palabra “salvaje” en la línea de alias, en el primer caso (usando ServerAlias), proviene de apache y no aparece en el segundo (usando ServerName); sospecho que esto es significativo.
Además, si elimino “ServerName” del segundo VirtualHost y solo uso un Alias siguiendo el consejo “debe haber solo un ServerName”, entonces una solicitud se pierde un poco, parece redirigir automáticamente a “https://test.mycompany. net: 8443” – como (en mi caso) 8443 no se muestra externamente (nat’d), entonces falla. Sí, sé que para 443 esto podría funcionar, pero posiblemente muestre que está sucediendo algo más.
Entonces, tal vez no sea una respuesta a la pregunta, sino un poco de documentación para alguien más que tenga problemas con una configuración similar.
Solución 3:
Cuando se trata de software, a menudo es importante tener un único punto de verdad. ServerName
puede considerarse el nombre canónico “real” de un host. ServerAlias
no es.
ServerName
hace todo lo que ServerAlias
hace, y un poco más. Como práctica recomendada, solo establezca un nombre de servidor, ya que solo debe haber un elemento “canónico”. Si ServerName
no se establece explícitamente, el httpd determinará un nombre por sí mismo.
ServerAlias
por otro lado, es solo un alias y solo se puede usar en el contexto de VirtualHost. Puede haber tantos como quieras.
Si el sitio se sirve a través de HTTPS, el nombre del servidor debe coincidir con uno de los nombres que contiene el certificado. Si su certificado se creó para www.example.org, pero su configuración dice:
ServerName foo.example.org
ServerAlias www.example.org
Entonces Apache se quejará con el siguiente error:
10 de diciembre 13:23:45 web1 httpd[1234]: [warn] ¿El certificado de servidor RSA CommonName (CN) `www.example.org’ NO coincide con el nombre del servidor?
Sección de Reseñas y Valoraciones
Al final de todo puedes encontrar las reseñas de otros desarrolladores, tú además tienes la libertad de mostrar el tuyo si te apetece.