J'utilise un serveur Web Apache sur CentOS et je dois désactiver la possibilité pour les personnes d'accéder au site Web en utilisant l'adresse IP du serveur dans un navigateur Web. Je le veux pour que lorsque quelqu'un essaie de naviguer jusqu'à l'adresse IP, il reçoive un message d'erreur interdit.
Quelles configurations seraient nécessaires pour cela?
apache-2.2
centos
Amr Elkhedewy
la source
la source
Vous pouvez y parvenir avec mod_rewrite (soit dans le
.htaccess
fichier, soit dans le contexte du serveur par défaut, soit dans un VirtualHost distinct oùServerName
est l'adresse IP de l'hôte):Cela signifie que si l'en-tête HTTP_HOST correspond à l'adresse IP 1.2.3.4, alors toute demande doit être satisfaite par un
403 Forbidden
. Toute demande qui a un autre en-tête HTTP_HOST (par exemple, une avec le nom de domaine réel plutôt que l'adresse IP) ne devrait pas être affectée.la source
Vous ne pouvez pas bloquer l'accès direct par IP. Vous devez autoriser la connexion, puis décider quoi en faire. Cela peut être renvoyer un 403, un 404 ou les rediriger vers la page souhaitée. Vous pouvez le faire avec mod_rewrite.
Cela correspondra à l'en-tête HTTP HOST transmis par le client Web. Toutes les autres demandes seraient acceptées.
Cependant, vous souhaiterez peut-être normaliser vos URL à des fins de référencement.
Avec cette approche, vous réécrivez tout ce qui ne correspond pas au résultat souhaité.
Référence: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl
Référence: http://en.wikipedia.org/wiki/URL_normalization
la source
Cette solution ne couvre pas tous les cas.
Remplacez n'importe quel nombre ou point dans l'URL IP par son% ## par exemple 1 par% 31 ... 8 par% 38 et vous arriverez sur l'IP, pas sur l'url du domaine.
Supposons que cette mauvaise IP, utilisée pour faciliter l'explication: 123.45.6.789
Vous devez utiliser les 2 alternatives pour tous les chiffres et points: le point est% 2E et 0..9 sont% 30 ..% 39
Moche, il peut être réduit avec {1,3} et restreint à une adresse IP valide, mais comme c'est le cas pour votre adresse IP, pas besoin de le faire.
N'oubliez pas les ports comme ": 80". HTTP_HOST le contient et SERVER_NAME n'est pas fiable.
la source