Apache no respeta la directiva ServerName para un sitio en particular

9

Tengo algunos sitios configurados como VirtualHosts usando Apache que han estado funcionando bien por un tiempo. Recientemente cambié el nombre de host del servidor a uno de los nombres de dominio que se servía, y también lo agregué a / etc / hosts apuntando a la dirección IP externa del servidor.

Desde que hice eso, acceder al dominio desde mi computadora portátil me lleva al valor predeterminado "¡Funciona!" De Apache página. Si elimino 000-default de / etc / apache2 / sites-enabled /, muestra el sitio correcto. Intentando acceder al sitio con el 'www.' el prefijo me lleva al sitio correcto independientemente de si 000-default está o no en sitios habilitados.

Basado en todo eso, supongo que la configuración predeterminada está sirviendo la página predeterminada debido a cómo configuré el nombre de host o / etc / hosts (o ambos), pero no puedo encontrar la manera de desactivar eso mientras dejando esas configuraciones como están. Cualquier sugerencia bienvenida!

Editar: mi configuración actual de VirtualHost se ve así:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin [email protected]

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

Para resumir: tengo varios VirtualHosts configurados, y este es el único que no funciona correctamente. Puedo acceder a http://www.domain.com muy bien, pero http://domain.com me lleva al valor predeterminado de "Apache" de Apache. página. Si desactivo la configuración predeterminada de 000, muestra la página correcta. Esto solo comenzó a suceder después de configurar el nombre de host del servidor en domain.com y agregar una línea a / etc / hosts que apunta a domain.com a la dirección IP externa del servidor. Me gustaría dejarlos así si es posible.

Editar: corrí apache2ctl -Sdesde que /usr/sbin/apache2 -Sme dio "apache2: nombre de usuario incorrecto $ {APACHE_RUN_USER}". Aquí está la salida:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK
John Debs
fuente
¿Se utiliza domain.com en el archivo httpd.conf principal como ServerName? o apache2ctl.conf parece que estás usando ubuntu, por lo que puede diferir el nombre.
Prix

Respuestas:

12

Perdí esta pregunta el otro día.

Cuando tenga un contenedor <VirtualHost> sin un componente ServerName, utilizará el nombre de host predeterminado. Como 000-default probablemente no tiene un componente ServerName, y es el primero en ser incluido alfabéticamente, es por eso que responde por hostname.com y no permite que su nombre de host declarado explícitamente funcione.

karmawhore
fuente
Ya veo, ¿alguna forma de arreglar eso? Quiero que la configuración predeterminada maneje los dominios no manejados, pero no quiero que maneje ese dominio en particular.
John Debs
déle un dominio diferente al que se usa en una configuración, o cámbiele el nombre a zzz-default para que se llame último.
karmawhore
Bien, creo que lo entiendo todo ahora. Intenté zzz-default pero no es el comportamiento exacto que quería. Sin ServerName example.comembargo, la configuración en la configuración predeterminada funciona muy bien. ¡Gracias!
John Debs
4

¿Tiene una directiva NameVirtualHost *: 80 en alguna parte?

Tratar:

/usr/sbin/apache2 -S

Eso le dirá cómo Apache está analizando el archivo de configuración. ¿Tiene configuraciones que tienen IP reales o todas tienen el *? ¿Te falta alguno de los 80? A Apache no le gusta mezclarlos.

¿Tiene un ServerName domain.com o ServerAlias ​​domain.com en forma predeterminada?

karmawhore
fuente
Sí, lo tengo en mi /etc/apache2/posts.conf. Agregaré un resumen a la pregunta que, con suerte, lo aclarará más.
John Debs
Mi configuración predeterminada de 000 está intacta, no tiene directivas ServerName o ServerAlias.
John Debs
NameVirtualHost está en desuso.
Sam
0

Esto funcionó:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

cuando tuve un error tipográfico, NO funcionó (la directiva ServerName dos veces):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

Cuando tuve la directiva ServerName dos veces, seguía resolviéndose en el primer sitio enumerado (no se muestra aquí).

Espero que esto ayude a alguien ...

Sam
fuente
0

Tuve un problema similar y lo solucioné estableciendo explícitamente un ServerName en el archivo httpd.conf principal, en lugar de dejar que Apache descubriera automáticamente que era. Supongo que lo que apache decidió era lo mismo que mi vhost (definido más adelante), por lo que el predeterminado "ganó", anulando la configuración de vhost.

Acabo de configurar httpd.conf ServerName en un nombre de host que tiene la máquina, nunca serviré páginas web.

sstteevvee
fuente