web-dev-qa-db-fra.com

Accéder au site Web par nom de domaine uniquement (pas d'adresse IP)

Disons que j'ai un site Web example.com et qu'il pointe sur 12.23.42.31. Maintenant, je veux que personne ne puisse accéder à mon site Web par l'adresse IP (12.23.42.31). Quelle est la procédure pour y parvenir?

Serveur LAMP avec WordPress. Hébergement non partagé.

3
amit singh

Étant donné que vous avez indiqué qu'il s'agit d'un serveur LAMP et que vous disposez d'un accès SSH, vous pouvez le faire tout simplement avec un VirtualHost par défaut de type 000, comme celui-ci (en remplaçant example.com par votre domaine):

<VirtualHost *:80>

    Redirect permanent / http://www.example.com/

</VirtualHost>

Les méthodes de réécriture sont inutiles et la redirection fournit meilleure sécurité contre les attaques d'en-tête de l'hôte . En omettant les méthodes habituelles .htaccess ou PHP et en effectuant une redirection, vous obtenez les meilleures performances possibles, bien que cela ne soit probablement pas une préoccupation si la plupart des demandes concernent votre domaine et non l'adresse IP.

Pour être complet, voici comment procéder avec Nginx:

server {

  listen 80 default_server;
  return 444;

}

Une légère différence, la réponse de Nginx sur 444 signifie "pas de réponse" et la connexion est immédiatement interrompue. Dans le cas peu probable où vous voudriez utiliser une redirection à la place, vous pouvez changer la directive return 444 en return 301 http://www.example.com/.

Il est vraiment peu probable que le trafic légitime de vos utilisateurs demande à votre site par son adresse IP. Ne perdez donc pas beaucoup de temps à essayer de vous adapter. Supprimez ou redirigez le trafic à la place.

2
Tom Brossman

Si vous voulez bloquer tous les utilisateurs qui essaient d'accéder à votre site Web d'une autre manière que votre nom de domaine, vous pouvez le faire:

<VirtualHost example.com:80>
   ServerName example.com
   ServerAdmin [email protected]
   UseCanonicalName Off
   <If "tolower(%{SERVER_NAME}) != 'example.com'">
      AllowOverride None
      Require all denied
   </If>
</VirtualHost>

Tous les accès essayant d'une autre manière que example.com entraîneront:

403 Interdit

Vous n'êtes pas autorisé à accéder à/sur ce serveur.


AUTRE MANIER, RESULTAT DIFFERENT:

Si vous voulez créer une règle de réécriture, tous les accès seront essayés autrement example.com entraînera un redirection vers example.com , vous pouvez créer une règle de redirection simple comme celle-ci:

RewriteCond %{HTTP_Host} !^example.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

Pour www:

RewriteCond %{HTTP_Host} !^www\.example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
4
Azodium

Si vous ne voulez pas que le site réponde à l'adresse IP, je mettrais en œuvre un hôte virtuel dans Apache. Définissez la racine virtuelle sur un autre répertoire du serveur Apache.

Désormais, tout le trafic est configuré par défaut vers un emplacement différent de votre site occupé.

Sinon, comme je l'ai déjà indiqué, j'utiliserais une redirection. Personnellement, j'utiliserais le style htaccess. Après avoir testé dans le fichier .htaccess, je déplacerais les instructions dans mon fichier de configuration hôte virtuel. Notant que j'ai toujours un accès complet à mes serveurs privés.

EDIT: Avez-vous changé votre httpd.conf aka Apache2.conf? Sinon, pas de problème, votre route par défaut devrait être /var/www/html Si vous avez modifié cela, je vous recommande de le rétablir.

Voici un exemple de fichier de configuration Apache pour l'un de mes sites de test de développement exécutant Apache 2.2 sur CentOS 6.5. Si vous sélectionnez l'adresse IP ou le nom par défaut du serveur d'hébergement, vous trouverez la page de test Apache ou une simple page blanche sans contenu.

NameVirtualHost *

<VirtualHost *>
    ServerName search??.info
    ServerAlias *.search??.info
    DocumentRoot /data/steven/cms5/test
    <Directory /data/steven/cms5/test>
        Options All
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Voici un exemple de fichier de configuration sur mon poste de travail basé sur Ubuntu (menthe 17). De nouveau, si vous référencez l'adresse IP ou le nom du serveur par défaut, vous rencontrerez une page par défaut.

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName cms5.dev 
ServerAlias *.cms5.dev
DocumentRoot /var/www/html/cms5/public
<Directory /var/www/html/cms5/public>
    Options All
    AllowOverride All 
    Order allow,deny
    Allow from all
    Require all granted
</Directory>
</VirtualHost>

<IfModule mod_rewrite.c>

<Directory "/var/www/html/cms5/">
    RewriteEngine on
    RewriteRule  ^$ public/    [L]
    RewriteRule  (.*) public/$1 [L]
</Directory>

<Directory "/var/www/html/cms5/public">
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</Directory>

</IfModule>

En outre, vous pouvez voir ici que j'ai déplacé les directives .htaccess vers ce fichier conf.

2
Steven

Voici quelques options de redirection que vous pouvez utiliser dans .htaccess. Celles-ci couvrent divers cas d’adresse IP brute, l’IP en quelque sorte bouchée avec www, le sous-domaine util Host (pour le domaine de l’addon), le mode cible www, le mode cible HTTPS, etc. . Permutez/éditez les 2 dernières lignes pour les modes www et HTTPS:

RewriteCond %{HTTP_Host} ^(www\.)?123\.123\.123\.123 [OR]
RewriteCond %{HTTP_Host} ^(www\.)?example\.hostname\.com$ [NC,OR]
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ "https://www\.example\.com/$1" [R=301,L]
1
dhaupin

Facile. Il suffit de faire une redirection de l'adresse IP vers le nom de domaine.

Méthode 1

Une bonne façon de le faire si votre serveur le supporte est de créer un fichier PHP contenant les éléments suivants:

<?php
header("HTTP/1.1 301 Redirect",true);
header("Location: http://example.com",true)
?>
<html><head><title>Redirect</title><body>
<a href="http://example.com">Click here to continue</a>
</body></html>

puis enregistrez-le sous le nom index.php dans le dossier racine du document de votre adresse IP (probablement dans le dossier htdocs).

Méthode 2

Si votre serveur est Apache, si le module de réécriture est installé et permet les modifications de configuration via des fichiers .htaccess, créez-le et enregistrez-le dans le répertoire racine de votre adresse IP avec le contenu suivant:

RewriteEngine On
RewriteRule ^(.*)$ http://example.com [R=301,L]

La bonne chose avec la méthode 2 est qu’elle redirige TOUT URL commençant par l’adresse IP vers la page d’accueil exemple.com.

Assurez-vous simplement de placer tous les fichiers de votre site Web dans le dossier racine du document exemple.com.

et bien sûr, remplacez exemple.com dans ma réponse par votre nom de domaine.

0
Mike