La configuración del subdominio Apache no funciona

La configuración del subdominio Apache no funciona

Tengo un servidor Debian 6 que fue configurado por otra persona. Me pidieron que agregara un subdominio en ese servidor.

Configuré el DNS correctamente (verificado con nslookup), creé el directorio /var/www/y luego agregué un nuevo host virtual /etc/apache2/sites-available(de hecho, copié uno de los archivos del subdominio existente y lo edité):

<VirtualHost *:80>
    DocumentRoot "/var/www/mysub.example.com"
    ServerName mysub.example.com
    ServerAlias www.mysub.example.com

    ErrorLog ...[path to file]
    CustomLog [path to file]

    RewriteEngine On 
    #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
    #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]

    <Directory /var/www/mysub.example.com>
         AllowOverride All
         Require all granted
    </Directory>
</VirtualHost>

Luego agregué mi host usando a2ensiteApache y reinicié, pero el dominio mysub.example.comse redirige a beta.example.comnuestro sitio de producción beta. Lo que es extraño es que no hay configuración para beta.example.comin /etc/apache2/sites-available.

¿Qué más debo hacer para habilitar este subdominio? Estoy bastante seguro de que la configuración del example.comhost no bloquea nada, porque también tenemos un blog.example.comhost virtual configurado de esa manera y está funcionando perfectamente.

EDITAR

Algunas salidas de depuración:

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:18)
*:80                   is a NameVirtualHost
         default server beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
         port 80 namevhost [here comes other unrelated domain name]
         port 80 namevhost forum.example.com (/etc/apache2/sites-enabled/04-forum.example.com:1)
         port 80 namevhost example.com (/etc/apache2/sites-enabled/05-sth.example.com:1)
         port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/06-mysub.example.com:1)
Syntax OK


root@xxx:~# grep -r 'mysub\.example\.com' /etc/apache2
/etc/apache2/apache2.conf:Alias /mysub /var/www/mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        DocumentRoot "/var/www/mysub.example.com"
/etc/apache2/sites-available/06-mysub.example.com:        ServerName mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ServerAlias www.mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ErrorLog "/var/log/apache2/mysub.example.com-error_log"
/etc/apache2/sites-available/06-mysub.example.com:        CustomLog "/var/log/apache2/mysub.example.com-access_log" common
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]
/etc/apache2/sites-available/06-mysub.example.com:        <Directory /var/www/mysub.example.com>

root@xxx:~# grep -r 'beta\.example\.com' /etc/apache2
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common

EDITAR 2 Hice una prueba rápida. Deshabilité el primer host virtual ( beta.example.com) con:

a2dissite 01-example.com

Y luego intenté acceder mysub.example.comy ahora fui redirigido a blog.example.com, que es el segundo en el orden de sitios habilitados. Entonces parece que mysub.example.comno se encuentra y cae en el primer contenedor de *.example.comsubdominios que encuentra.

EDITAR 2

Otra prueba: cambié el orden de mis archivos de configuración para que mi nuevo subdominio fuera el primero (predeterminado). Ahora mismo:

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:14)
*:80                   is a NameVirtualHost
         default server mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
         port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
         port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
Syntax OK

Y aún así, si intento ingresar, mysub.example.comse me redirige a beta.example.com. El blog.example.comtodavía funciona perfectamente bien.

¿Existe la posibilidad de que haya una configuración de dominio definida en otro lugar (además del /etc/apache2/sites-availabledirectorio)?

EDITAR 3

Configuraciones adicionales para hosts: beta.example.com y blog.example.com

beta.example.com (archivo: /etc/apache2/hosts-available/01-example.com)

<VirtualHost *:80>
        DocumentRoot "/var/www/example.com"
        ServerName beta.example.com
        ServerAlias www.beta.example.com

        ErrorLog "/var/log/apache2/beta.example.com-error_log"
        CustomLog "/var/log/apache2/beta.example.com-access_log" common

        <Directory /var/www/example.com>
                AllowOverride All
        </Directory>
</VirtualHost>

<VirtualHost *:443>
        DocumentRoot "/var/www/example.com"
        ServerName beta.example.com:443
        ServerAlias www.beta.example.com:443

        ErrorLog "/var/log/apache2/beta.example.com-error_log"
        CustomLog "/var/log/apache2/beta.example.com-access_log" common

        RewriteEngine On
        #RewriteCond %{HTTP_HOST} ^example.com$ [NC]
        #RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key

        <Directory /var/www/example.com>
                AllowOverride All
        </Directory>
</VirtualHost>

blog.example.com (archivo: /etc/apache2/hosts-available/02-blog.example.com)

<VirtualHost *:80>
    DocumentRoot "/var/www/blog.example.com"
    ServerName blog.example.com
    ServerAlias www.blog.example.com

    ErrorLog ...[path to file]
    CustomLog [path to file]

    RewriteEngine On 
    #RewriteCond %{HTTP_HOST} ^blog.example.com$ [NC]
    #RewriteRule ^(.*)$ http://www.blog.example.com$1 [R=301,L]

    <Directory /var/www/blog.example.com>
         AllowOverride All
         Require all granted
    </Directory>
</VirtualHost>

Respuesta1

Le aconsejo que depure todos sus archivos, como dijo c4f4t0r, intente "apache2ctl -S" y luego intente encontrar reglas de reescritura dentro de los archivos .htaccess, por ejemplo:

find /var/www/mysub.example.com -name ".htaccess" -exec grep -l -i rewrite {} \;

En tu archivo de configuración principal tienes algo "peligroso":

<Directory /var/www/mysub.example.com>
     AllowOverride All # <---- THIS
     Require all granted 
</Directory>

Respuesta2

Deberías revisar el archivo /etc/apache2/ports.confy mirar la línea NameVirtualHost *:80cercaListen 80

Si no tiene esta línea, no puede usar hosts virtuales basados ​​en ServerName, por lo que es normal que siempre tenga el primer host virtual habilitado en su navegador.

Respuesta3

Bien, el problema (y la solución) resultó ser bastante simple.

El problema era que las carpetas de los subdominios recién creados estaban vacías, no había ningún archivo index.php/html en ellas. Entonces el servidor, en lugar de mostrarlo (como un directorio), lo redirigió al dominio predeterminado, que erabeta.example.com

Entonces la configuración de vhosts fue correcta, y luego de agregar algunos archivos a las carpetas, los subdominios comenzaron a funcionar.

información relacionada