Excluir domínios específicos do Apache2 serverAlias ​​ao usar um alias catch all * (curinga)

10

Eu tenho um aplicativo Web que precisa oferecer suporte a domínios personalizados; nesse sentido, configurei o seguinte servidor virtual baseado em nome:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias * *.example.com www.example.com example.com
    RailsEnv production
    RackEnv production
    DocumentRoot /srv/www/example/current/public
    <Directory /srv/www/example/current/public>
             AllowOverride all
             Options -MultiViews FollowSymLinks
    </Directory>
    ErrorLog /srv/www/example/log/error.log
    TransferLog /srv/www/example/log/access.log
</VirtualHost>

Observe o * como o alias do servidor? que captura todos os domínios nesse servidor. No entanto, tenho outros sites neste servidor que desejo ser excluídos desta lista. É mais econômico para mim ter uma lista de domínios excluídos do que definir manualmente todos os domínios com os quais um usuário pode se registrar neste serviço como serverAlias ​​...

Talvez este não seja o melhor caminho a seguir, mas estou procurando ajuda, da melhor maneira (relativamente simples) para configurar um aplicativo Web que possa capturar qualquer domínio, enquanto permite que outros domínios específicos sejam roteados para aplicativos diferentes .

Victor S
fonte

Respostas:

12

O Apache procura uma correspondência na ordem em que os domínios são definidos. Se eu entendi seu problema corretamente, ele pode ser resolvido definindo seus hosts a serem excluídos antes da captura de todos os hosts.

<VirtualHost *:80>
    ServerName excluded.example.com
    ServerAlias  something.example.com ...
    ...
</VirtualHost>
<VirtualHost *:80>
    ServerName example.com
    ServerAlias * *.example.com www.example.com example.com
    RailsEnv production
    ...
</VirtualHost>
user9517
fonte
1
Sim, você está certo, mas estou intrigado sobre como fazer isso em uma pilha padrão do Ubuntu 10.4, onde todas as travessuras são gerenciadas por ter diretórios disponíveis e habilitados para sites, e cada definição de host virtual existe em seu próprio exclusivo arquivo ... como faço para controlar a ordem nesse caso?
Victor S
Os arquivos são carregados em ordem alfabética (a ordem de classificação padrão para ls).
user9517
1
para uma definição de site que precisa vir em primeiro lugar, nomeie-a como 000-excluded.example.com.confno diretório disponível nos sites.
Brian Minton
Eu estava procurando fazer exatamente a mesma coisa, e isso não funciona para mim. O Virtual.Host exclus.example.com que tinha "ServerName excluído.example.com \ n Redirecionar / exemplo.com/excluído " fez com que todas as solicitações ao VirtualHost mais geral fossem redirecionadas (o que definitivamente seguiu o VirtualHost específico na configuração).
quuxman