
Eu tenho um servidor Debian 6 configurado por outra pessoa. Pediram-me para adicionar um subdomínio nesse servidor.
Configurei o DNS corretamente (verificado com nslookup
), criei o diretório /var/www/
e adicionei um novo host virtual /etc/apache2/sites-available
(na verdade, copiei um dos arquivos do subdomínio existente e editei-o):
<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>
Então adicionei meu host usando a2ensite
e reiniciei o Apache, mas o domínio mysub.example.com
está redirecionando para beta.example.com
nosso site de produção beta. O que é estranho é que não há configuração para beta.example.com
o /etc/apache2/sites-available
.
O que mais devo fazer para ativar este subdomínio? Tenho certeza que a configuração do example.com
host não está bloqueando nada, pois também temos um blog.example.com
host virtual configurado dessa forma e está funcionando perfeitamente.
EDITAR
Algumas saídas de depuração:
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
Fiz um teste rápido. Desativei o primeiro host virtual ( beta.example.com
) com:
a2dissite 01-example.com
E então tentei acessar mysub.example.com
e agora fui redirecionado para blog.example.com
- que é o segundo na ordem de sites habilitados. Parece que mysub.example.com
não está sendo encontrado e cai na primeira caixa de *.example.com
subdomínios que encontra.
EDITAR 2
Outro teste: mudei a ordem dos meus arquivos de configuração para que meu novo subdomínio fosse o primeiro (padrão). Agora mesmo:
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
E ainda assim, se eu tentar entrar mysub.example.com
estou sendo redirecionado para beta.example.com
. O blog.example.com
ainda funciona perfeitamente bem.
Existe uma chance de haver uma configuração de domínio definida em outro lugar (além do /etc/apache2/sites-available
diretório)?
EDITAR 3
Configurações adicionais para hosts: beta.example.com e blog.example.com
beta.example.com (arquivo: /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 (arquivo: /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>
Responder1
Aconselho você a depurar todos os seus arquivos, como c4f4t0r disse, tente "apache2ctl -S" e depois tente encontrar regras de reescrita dentro dos arquivos .htaccess, por exemplo:
find /var/www/mysub.example.com -name ".htaccess" -exec grep -l -i rewrite {} \;
No seu arquivo de configuração principal você tem algo "perigoso":
<Directory /var/www/mysub.example.com>
AllowOverride All # <---- THIS
Require all granted
</Directory>
Responder2
Você deve verificar o arquivo /etc/apache2/ports.conf
e olhar a linha NameVirtualHost *:80
pertoListen 80
Se você não possui esta linha, você não pode usar virtualhosts baseados em ServerName, então é normal que você tenha sempre o primeiro virtualhost habilitado em seu navegador.
Responder3
OK, o problema (e a solução) revelou-se bastante simples.
O problema era que as pastas dos subdomínios recém-criados estavam vazias - nenhum arquivo index.php/html nelas. Então o servidor, ao invés de mostrá-lo (como um diretório), redirecionou para o domínio padrão - que erabeta.example.com
Então a configuração dos vhosts estava correta, e após adicionar alguns arquivos nas pastas, os subdomínios começaram a funcionar.