Configuração do subdomínio do Apache não funciona

1

Eu tenho um servidor Debian 6 que foi configurado por outra pessoa. Fui solicitado a adicionar um subdomínio nesse servidor.

Configurei o DNS corretamente (verifiquei com nslookup ), criei o diretório em /var/www/ e, em seguida, adicionei novo host virtual a /etc/apache2/sites-available (na verdade, copiei um dos arquivos do subdomínio existente e o editei):

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

Depois, adicionei meu host usando a2ensite e reiniciei o Apache, mas o domínio mysub.example.com está redirecionando para beta.example.com , que é o nosso site de produção beta. O que é estranho, não há configuração para beta.example.com em /etc/apache2/sites-available .

O que mais devo fazer para ativar este subdomínio? Tenho certeza de que a configuração do example.com host não está bloqueando nada, porque também temos um host blog.example.com 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

EDIT 2 Eu fiz um teste rápido. Desativei o primeiro host virtual ( beta.example.com ) com:

a2dissite 01-example.com

Em seguida, tentei acessar mysub.example.com e agora fui redirecionado para blog.example.com - que é o segundo em ordem de sites ativados. Portanto, parece que mysub.example.com não está sendo encontrado e cai no primeiro bin de *.example.com subdomínios que encontra.

EDIT 2

Outro teste: alterei a ordem dos meus arquivos de configuração para que meu novo subdomínio fosse o primeiro (padrão). Agora:

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

Ainda assim, se eu tentar inserir 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 algum outro lugar (além do diretório /etc/apache2/sites-available )?

EDIT 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>
    
por Gacek 14.05.2015 / 16:07

3 respostas

0

OK, o problema (e a solução) ficou bem simples.

O problema era que as pastas dos subdomínios recém-criados estavam vazias - nenhum arquivo index.php / html nele. Então o servidor, em vez de mostrá-lo (como um dir), redirecionou para o domínio padrão - que era beta.example.com

Portanto, a configuração dos vhosts estava correta e, depois de adicionar alguns arquivos às pastas, os subdomínios foram criados para funcionar.

    
por 09.07.2015 / 19:09
2

Eu aconselho você a depurar todos os seus arquivos, como c4f4t0r disse tentar "apache2ctl -S" e depois tentar 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>
    
por 17.05.2015 / 02:36
2

Você deve verificar o arquivo /etc/apache2/ports.conf e ver a linha NameVirtualHost *:80 near Listen 80

Se você não tiver essa linha, não será possível usar virtualhosts com base em ServerName, portanto, é normal que você sempre tenha o primeiro virtualhost ativado no seu navegador.

    
por 19.05.2015 / 17:01