Manipulação padrão para domínios / subdomínios sem correspondência no Apache


12

Eu tenho uma configuração Apache2 com vários VirtualHosts. Meu DNS está definido para aceitar *.<domain>.<tld>em vários domínios. Tudo está funcionando corretamente, mas, se eu for something-random-here.example.com, pareço selecionar um VirtualHost inválido (acho que o primeiro ou o último encontrado). Existe uma maneira de dizer ao Apache para usar certas regras se nenhuma das entradas do VirtualHost corresponder ao domínio ou subdomínio? Preferencialmente, gostaria de retornar um 404.

Respostas:


12

O Apache usa o primeiro host virtual se nenhum nome corresponder. Basta configurar um novo host virtual como o primeiro com um nome aleatório, exibindo o que você quiser - ou retornando uma página 404.


Obrigado, mas você poderia, por favor, elaborar? Não consigo fazer isso funcionar.
Ryall

2
Como estão os arquivos de configuração do apache2? Ou qual sistema operacional você usa? O Apache lê a configuração em uma determinada ordem, e o primeiro VirtualHost que ele vê é o padrão. Ele recebe todo o tráfego de nomes de host desconhecidos. Portanto, se você possui um único arquivo de configuração, o primeiro VirtualHost é esse. Se você tiver vários queridos, como na maioria dos Linuxes, pode ser o chamado 0default ou assim ...
Moritz Ambos

Eu coloquei algumas configurações padrão no ports.conf. Não estava funcionando porque tentei combinar *: 80 quando estava usando <ip>: 80 nos meus virtualhosts. Em vez disso, tive que criar uma entrada padrão separada para cada IP e ela funciona agora.
Ryall

Nem meu primeiro ou último arquivo v-host é usado. Eu acho que o apache mudou.
Cobolt

4

Curinga incluem os arquivos de configuração do site:

Include path/to/site/confs/*httpd.conf

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

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

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:

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Espero que isto ajude. Uso esse método para carregar sites na ordem em que especifico e evito que hosts virtuais incomparáveis ​​carreguem um site inesperado sem intenção.


"ServerAlias ​​*" não deve ser removido das regras gerais?
Ahm3d disse

Suponho que não importaria. Se nenhum dos hosts virtuais anteriores à catchall manipular a solicitação, eles retornarão uma resposta 404. Não vejo uma razão pela qual ServerAlias ​​* precise ser removido, mas eles podem ser desnecessariamente específicos.
Jason Slobotski 23/07/19

0

Como Moritz Bothmencionado, o Apache2 usará o primeiro host virtual encontrado, se não corresponder a nenhum que você solicitou.

Quando você instala o Apache2 pela primeira vez, existe um site padrão que você pode usar como modelo, modificar ou excluir, e eu sempre estava pensando para que serve o 000-default.conf, porque eles também tinham o default.conf. Depois de ler o que Moritz Bothdisse, tudo faz mais sentido agora.

O que fiz no meu servidor foi copiar a configuração do nome do host padrão (site) para o arquivo 000-default.conf e a2ensite 000-default.

Agora, sempre que há uma solicitação de domínio incomparável ao meu site, ela exibe a página 000 padrão, que é apenas uma cópia da minha página padrão real.


1
Eu faço o mesmo, mas meu host não correspondido / padrão envia um redirecionamento para o site de nível superior adequado, que também altera o URL exibido para o correto.
ivanivan

Essa é realmente uma ótima ideia! Eu não pensei sobre isso. I será definitivamente implementação meu site como esse :)
Newteq desenvolvedor

Por algum motivo, não consigo redirecionar meu ssl (página padrão). Eu tenho, <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> mas o URL permanece o mesmo. Eu fiz o mesmo para a versão não ssl e ela redireciona corretamente. Alguma ideia?
Newteq Developer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.