Faire en sorte que le serveur Apache accepte uniquement les demandes de domaine plutôt que IP

9

J'ai un serveur CentOS exécutant Apache 2.2.15. Si l'adresse IP du serveur est 198.51.100.4 et que j'écris dans le navigateur http://198.51.100.4, elle va sur mon site Web.

Je veux empêcher ça. Je souhaite que mon site Web soit accessible uniquement sur le nom de domaine complet, à savoir http://example.com/ .

Comment puis-je configurer mon serveur pour que le site Web ne soit pas accessible lorsque je visite l'adresse IP?

antiks
la source
Bien que la question ne corresponde pas tout à fait au doublon auquel je suis lié, la réponse à cette question est également la réponse à celle-ci.
Jenny D
Je suis curieux de savoir pourquoi vous feriez cela. DNS inversé est une chose.
njzk2

Réponses:

7

Vous pouvez utiliser Alias *pour attraper tout autre trafic que celui autorisé dans votre hôte virtuel, pour cela vous devez utiliser en dernière position un hôte virtuel avec *comme alias.

Comme ça, seul le domaine défini sera servi.

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

Dans mon exemple, seuls mywebsite.com & another.mywebsite.com seront autorisés, tous les autres domaines ou IP verront le trafic annulé.

Pour annuler le trafic, vous pouvez utiliser une redirection vers -puis ajouter un code d'erreur, par exemple j'ai utilisé une RewriteRule pour rediriger vers 406 Not Acceptable ( R=406).

Ici vous pouvez trouver la liste des codes de redirection: https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP

Froggiz
la source
Merci! J'ai essayé ta méthode et ça marche. Mais j'ai un peu changé. J'ai créé un nouvel hôte virtuel et j'ai mis comme nom de serveur l'adresse IP du serveur + RewriteRule :)
antiks
11

Vous pouvez ajouter un hôte virtuel par défaut qui donne simplement une erreur "refusée", ou autre chose. Lorsqu'un navigateur arrive sur votre serveur Web sans hôte dans l'URL qui correspond à une ServerNameou plusieurs ServerAliaslignes d'autres hôtes virtuels seront servies par l'hôte virtuel par défaut.

Donc, dans votre configuration apache:

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

<VirtualHost *:80>
    ServerName mywebsite.com
    ...
</VirtualHost>
gémir
la source
1

Vous avez besoin d'une règle de réécriture comme celle-ci:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^mywebsite.com$
 RewriteRule /.* https://mywebsite.com/ [R]
Kobus
la source
Cela ne fait pas ce que le PO a demandé.
Courses de légèreté en orbite