
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 a2ensite
Apache y reinicié, pero el dominio mysub.example.com
se redirige a beta.example.com
nuestro sitio de producción beta. Lo que es extraño es que no hay configuración para beta.example.com
in /etc/apache2/sites-available
.
¿Qué más debo hacer para habilitar este subdominio? Estoy bastante seguro de que la configuración del example.com
host no bloquea nada, porque también tenemos un blog.example.com
host 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.com
y ahora fui redirigido a blog.example.com
, que es el segundo en el orden de sitios habilitados. Entonces parece que mysub.example.com
no se encuentra y cae en el primer contenedor de *.example.com
subdominios 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.com
se me redirige a beta.example.com
. El blog.example.com
todaví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-available
directorio)?
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.conf
y mirar la línea NameVirtualHost *:80
cercaListen 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.