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?

antiks
fonte
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

Froggiz
fonte
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>
Wurtel
fonte
1

Você precisa de uma regra de reescrita como esta:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^mywebsite.com$
 RewriteRule /.* https://mywebsite.com/ [R]
Kobus
fonte
Isso não faz o que o OP pediu.
Lightness Races em órbita