Se eu tiver três domínios, domain1.com, domain2.com e domain3.com, é possível configurar um host virtual padrão para domínios não listados? Por exemplo, se eu tivesse:
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>
Se você registrar um domínio e apontá-lo para o meu servidor, o padrão será o restante, mostrando o mesmo que domínio3. Isso é possível?
apache-2.2
virtualhost
SJaguar13
fonte
fonte
Ao usar hosts virtuais baseados em nome, a primeira configuração de host virtual carregada será o padrão (Fonte: Wiki do Apache ). Por exemplo, com a configuração abaixo, os domínios não correspondentes corresponderão a
domain-one.com
:Muitos servidores não possuem um arquivo de configuração monolítico, mas possuem vários arquivos de configuração específicos do host, organizados da seguinte maneira:
Nesse caso, para fazer com que uma configuração específica de host virtual seja carregada primeiro, renomeie o link simbólico para algo que será o primeiro quando classificado, como
00-default
.Algumas das outras respostas não estão totalmente corretas. De acordo com o Apache Wiki, não definir a
ServerName
em um host virtual está incorreto. Se o host sem umServerName
não for carregado primeiro, o Apache nem poderá usá-lo, pois o primeiro host carregado será o padrão.Além disso, embora de
ServerAlias *
fato corresponda a qualquer coisa, também pode substituir outros hosts virtuais definidos posteriormente. Talvez essa abordagem funcione se for sempre o último host virtual a ser definido (como na configuração fornecida na pergunta), mas isso significa adicionar uma nova diretiva e alterar a ordem de classificação em vez de apenas alterar a ordem como acima.fonte
httpd-vhosts.conf
Não especifique um nome de servidor e esse se tornará seu vhost padrão.
Verifique também se você não especificou um DocumentRoot no arquivo httpd.conf principal, pois isso terá precedência sobre os vhosts.
fonte
A ordem é importante - mova sua definição de vhost para todo o resto para o topo da lista.
fonte
Use o host virtual _default_ e coloque-o primeiro no httpd-vhosts.conf, conforme especificado em http://httpd.apache.org/docs/2.2/vhosts/examples.html
"Capturando todas as solicitações para qualquer endereço IP e porta não especificados, ou seja, uma combinação de endereço / porta que não é usada para nenhum outro host virtual. [...] Um vhost padrão nunca atende a uma solicitação que foi enviada para um endereço / porta que seja usado para vhosts baseados em nome. Se a solicitação continha um cabeçalho Host: desconhecido ou nenhum é sempre atendido pelo vhost primário baseado em nome (o vhost para esse endereço / porta que aparece primeiro no arquivo de configuração). "
Trecho de um httpd-vhosts.conf ativo, mas ofuscado, que bloqueia todos os vhosts na porta 80:
Uma explicação detalhada do processo de correspondência de vhost pode ser encontrada aqui: http://httpd.apache.org/docs/2.2/vhosts/details.html
fonte
_default_
é usado apenas para IPs sem correspondência , portanto, quando você tiver o vhost curinga (*: 80), ele nunca será usado.Curinga incluem os arquivos de configuração do site:
Organize os arquivos conf do site para que eles sejam carregados na ordem esperada. Exemplo...
01-httpd.conf
02-site1-httpd.conf
03-site2-httpd.conf
etc ...
O Apache os lerá em ordem. Em seguida, crie um que sempre carregue por último para capturar hosts virtuais não correspondentes e retorne um 404 em vez de carregar um site padrão.
99-catchall-httpd.conf
Certifique-se de substituir as portas pelas portas em que o httpd estiver escutando. Ou, se você tiver o httpd ouvindo em interfaces específicas, precisará adicionar um catchall para cada interface, da seguinte maneira:
Espero que isto ajude. Eu uso esse método para carregar sites na ordem em que especifico e impeço que hosts virtuais incomparáveis carreguem um site inesperado acidentalmente.
fonte
A melhor solução é renomear o arquivo de configuração do site, começando com um "1", para que ele seja carregado primeiro e esse seja o site padrão.
O Apache2 cria o primeiro arquivo vhost carregado como a página padrão.
fonte
000-default
host virtual por esse motivo.ao usar
<VirtualHost *:port>
e especificar ServerName / ServerAlias para os hosts de seu interesse, e era isso que eu precisava fazer.Um pouco de fundo na minha situação:
Eu tenho um endereço IP dinâmico do meu ISP; portanto, meu endereço IP está registrado em uma empresa de registro de endereços IP dinâmico (noip.org no meu caso). Um dos meus "hosts" precisava ser registrado no meu registro DNS como myabc.example.com como um CNAME que aponta para host1.ddns.net. Mas o host2.ddns.net foi deixado como está. Eu queria que myabc.example.com e host1.ddns.net fossem para o site1 e host2.ddns.net para o site 2 e qualquer outra coisa, incluindo meu endereço IP, para o padrão.
A primeira leitura do arquivo conf será o padrão, ou seja
000_def.conf
,001_site1.conf
,002_site2.conf
será lido nessa ordem com000_def.conf
que o site padrão. (nota: no meu caso, eu tenho esses "arquivos" nos/etc/apache2/sites-enabled
quais são realmente links dinâmicos para o arquivo conf real/etc/apache2/sites-available
)Como ServerName está sendo usado em 001_site1.conf e 002_site2.conf, ele também deve ser definido como algo em 000_def.conf.
fonte