Saltar al contenido

Diferencia entre ServerName y ServerAlias

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.comfoo.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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *