Por que o Apache pode ignorar um host virtual com um ServerName correspondente à URL solicitada?

26

Estou tentando adicionar um segundo host virtual à configuração do meu apache, mas não consigo fazer com que o novo host virtual seja usado.

Meu httpd.conf contém apenas a seguinte linha:

ServerName radiofreebrighton.org.uk

Eu também tenho um arquivo ports.conf , que contém o seguinte:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

Eu tenho dois arquivos em sites-available , que foram vinculados a sites-enabled por a2ensite :

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

O conteúdo do primeiro é:

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin [email protected]
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

O conteúdo deste último é:

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin [email protected]
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

Mas a qualquer momento que eu solicito uma página do trafalgararches.co.uk, recebo uma página do radiofreebrighton.org.uk. Por que isso pode estar acontecendo? Como posso consertar isso?

Editar:

Configuração do host virtual conforme entendida pelo apache:

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

(recolhido via apache2ctl -S aka httpd -S .)

    
por Tom Wright 08.07.2011 / 14:46

6 respostas

14

Bem, essa pergunta tem mais de um ano, mas eu me deparei com um "problema" similar. Isso pode ser óbvio, mas não se esqueça de reiniciar o serviço apache depois de ativar o host virtual adicional. Veja, depois de executar a2ensite para o segundo host virtual, a saída de apache2ctl -S mostrará que ambos os sites estão disponíveis (e um deles é o padrão), mesmo que você não tenha recarregado o apache.

Digamos que você tenha dois hosts virtuais - site1 e site2. Você executa a2ensite site1 e recarrega o serviço apache. Agora você pode acessar http://site1 e é o padrão. Agora você executa a2ensite site2 , mas esqueça de reiniciar o apache. A saída de apache2ctl -S será:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

Mas quando você tenta carregar http://site2 , ele carregará o site padrão (site1), já que a configuração não está carregada.

    
por 26.09.2012 / 22:17
13

Eu tive um problema semelhante em que meus vhosts adicionais na porta 443 (SSL / HTTPS) estavam sendo direcionados para o diretório do primeiro vhost listado. O Apache estava essencialmente ignorando a propriedade servername e correspondendo apenas no ip: port.

Acontece que eu estava faltando o comando 'NameVirtualHost *: 443' para ativar hospedagem virtual nomeada para a porta 443.

'NameVirtualHost *: 443' só precisa ser chamado uma vez e deve ser definido acima de seus vhosts para a porta 443. Eu coloco minha definição no arquivo ports.config para que pareça:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

Não se esqueça de reiniciar o apache depois de qualquer alteração.

    
por 18.10.2012 / 19:17
4

Meus 2 centavos: como eu tenho que ficar com um IP (eu não quero que o site seja servido em todas as redes instaladas), aconteceu que depois que o IP privado local do servidor mudou, eu esqueci de mudar isso aqui:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

Claro que não é um problema do Apache para informar que o IP não existe localmente.

    
por 29.02.2016 / 14:15
2

Tom, por favor, olhe aqui link

Note

Note, that the "main server" and any default servers will never be served for a request to a NameVirtualHost IP address (unless for some reason you specify NameVirtualHost but then don't define any VirtualHosts for that address).

Portanto, deve estar tudo bem se você alterar o padrão para o endereço IP do seu servidor.

    
por 08.07.2011 / 15:41
1

Encontro resposta daqui: link

Coloque 2 nome do servidor na mesma tag do VirtualHost, conforme abaixo:

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

Acabei tendo problemas com o segundo site porque tinha dois blocos de tags do VirtualHost.

    
por 07.07.2016 / 14:15
0

Eu tive esse problema migrando sites para um novo servidor Ubuntu 16. Depois de um pouco de raciocínio, percebi que o Módulo SSL não estava habilitado por padrão, então qualquer coisa dentro dos blocos <IfModule mod_ssl.c> é obviamente ignorada silenciosamente.

Anos atrás eu envolvi todos os meus vhosts SSL neste condicional, e desta vez eu tinha acabado de copiar os arquivos de configuração para o novo servidor.

Eu consertei ativando o módulo:

sudo a2enmod ssl
    
por 11.07.2017 / 06:38