Tornar o servidor Apache apenas aceitar solicitações de domínio em vez de IP


9

Eu tenho um servidor CentOS executando o Apache 2.2.15. Se o endereço IP do servidor for 198.51.100.4 e eu escrever no navegador http://198.51.100.4, ele será exibido no meu site.

Eu quero evitar isso. Quero que meu site seja acessível apenas no FQDN, por exemplo, http://example.com/ .

Como posso configurar meu servidor para que o site não fique acessível quando visito o endereço IP?



Embora a pergunta não corresponda exatamente à duplicata à qual eu vinculei, a resposta a essa pergunta também é a resposta a esta.
Jenny D

Estou curioso para saber por que você faria isso. DNS reverso é uma coisa.
Njzk2

Respostas:


7

Você pode usar Alias *para capturar qualquer outro tráfego que não seja o permitido no seu host virtual; para isso, você deve usar na última posição um host virtual com *o apelido.

Assim, apenas o domínio definido será exibido.

<VirtualHost *:80>
ServerName mywebsite.com
DocumentRoot /var/www/default
...
</VirtualHost>

<VirtualHost *:80>
ServerName another.mywebsite.com
DocumentRoot /var/www/another
...
</VirtualHost>

# /!\ THIS HAS TO BE ON THE LAST POSITION /!\
<VirtualHost *:80 *:443>
# [ Server Domain ]
ServerName localhost
ServerAlias *
# [ Cancel trafic ]
RewriteRule .* - [END,R=406]
# [ Custom Log ]
CustomLog ${APACHE_LOG_DIR}/other.log combined
</VirtualHost>

No meu exemplo, apenas mywebsite.com e another.mywebsite.com serão permitidos, todos os outros domínios ou IP terão o tráfego cancelado.

Para cancelar o tráfego, você pode usar um redirecionamento para -e, em seguida, adicionar um código de erro, por exemplo, usei um RewriteRule para redirecionar para 406 Not Acceptable ( R=406).

Aqui você pode encontrar a lista de códigos de redirecionamento: https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP


Obrigado! Eu tentei o seu método e funciona. Mas eu mudei um pouco. Eu criei um novo virtualhost e eu coloquei como ServerName o endereço IP do servidor + RewriteRule :)
Antiks

11

Você pode adicionar um host virtual padrão que apenas fornece um erro "negado" ou qualquer outra coisa. Quando um navegador chega ao seu servidor da Web sem um host no URL que corresponda a qualquer linha ServerNameou ServerAliasem outros hosts virtuais, o servidor virtual padrão será atendido.

Então, na sua configuração do apache:

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/default
    ...
</VirtualHost>

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

1

Você precisa de uma regra de reescrita como esta:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^mywebsite.com$
 RewriteRule /.* https://mywebsite.com/ [R]

Isso não faz o que o OP pediu.
Lightness Races em órbita
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.