Apache nomeado VirtualHosts com curingas

7

Eu quero mapear www.example.com para um host virtual específico e, em seguida, quero que todos os outros subdomínios de example.com acessem outro host virtual.

Para fazer isso, criei esses hosts:

<VirtualHost *:80>
  ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example.com
  ServerAlias *.example.com
</VirtualHost>

Agora, a seleção de qual host é exibido parece aleatória. Se eu reiniciar o apache, às vezes, receberei um host e outras vezes outro.

O que estou fazendo de errado?

Obrigado!

Atualização: Se eu executar o apache2ctl -S nessa configuração, recebo este outpu:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server www.example.com (/etc/apache2/sites-enabled/dev:3)
         port 80 namevhost www.example.com (/etc/apache2/sites-enabled/dev:3)
         port 80 namevhost example.com (/etc/apache2/sites-enabled/dev:22)

Depois de muita pesquisa, decidi desativar os aplicativos mono que eu estava executando e baixo e eis que ele começou a exibir arquivos do site correto. Eles precisavam ser inseridos na ordem:

<VirtualHost *:80>
  ServerName example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example.com
</VirtualHost>

como sugerido pelo Wizard. Para que meus aplicativos mono funcionassem, usei "MonoAutoApplication ativado" em cada host virtual. No entanto, não tenho certeza de que esta é a melhor opção, como no site mono , que diz que você não deve usar hospedagem automática para asp.net mvc apps (que é o que estou usando). Até agora não vejo o lado negativo.

    
por Derek Ekins 18.05.2009 / 22:46

4 respostas

3

Atualização: * é uma sintaxe válida, mas não é necessária. Você pode encontrar mais aqui .

Isso vai funcionar embora.

<VirtualHost *:80>
   ServerName example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>

A primeira diretriz corresponderá a tudo que não estiver explicitamente definido em outro lugar.

    
por 18.05.2009 / 23:07
5

O código provavelmente deve ser:

<VirtualHost _default_:80>
   ServerName example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>

Veja: link

Isso define explicitamente o vhost "example.com" como o host a ser usado se nada mais corresponder.

    
por 19.05.2009 / 01:42
4

Tem certeza de que o www.example.com vhost aparece antes do outro vhost no arquivo de configuração? O Apache deve passar pelos hosts virtuais em ordem e escolher o primeiro com um ServerName ou ServerAlias que corresponda ao valor enviado no cabeçalho Host HTTP. Parece muito estranho que ele escolha aleatoriamente, às vezes, um host virtual e, às vezes, o outro.

Pode ajudar a editar sua pergunta para incluir a saída de

apache2ctl -S

que mostra os hosts virtuais definidos como o Apache os vê.

    
por 18.05.2009 / 23:09
1

Você precisa do DocumentRoot adicionado à configuração. Deve ser algo assim:

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here

</VirtualHost>

EDIT: Parece que eu pensei que sabia mais sobre o Apache do que eu. Obrigado pelos comentários.

    
por 18.05.2009 / 23:10