Puis-je configurer le fichier d'hôtes Windows pour utiliser l'adresse IP plus le port?


13

Je souhaite configurer le fichier d' hôtes Windows pour envoyer des demandes d'hôtes en fonction de l'adresse IP + des ports.

Par exemple:

127.0.0.1:80       www.site1.com
127.0.0.1:8080     www.sitetwo.com

Parce que j'écoute Apache sur le port 8080 et IIS sur le port 80 (par défaut).

Donc, je pense que la meilleure façon de le faire est de modifier le hostsfichier. Cela n'affecte rien. Je ne reçois ni erreur ni message.


1
Vous obtiendrez une meilleure réponse en posant ce genre de question sur serverfault.com
Carl Norum

Pourquoi ne pouvez-vous pas simplement lancer site1.com (: 80) et sitetwo.com:8080 dans votre navigateur?
Yvan le

Réponses:


11

Tu ne peux pas. Le fichier hosts n'est que cela - hosts. C'est l'équivalent d'un DNS "court-circuité" au sein de votre machine locale. DNS ne peut pas non plus vous envoyer vers des ports.

Pour réaliser ce que vous essayez de faire, vous souhaitez configurer l'hébergement virtuel sous IIS ou Apache, et l'utiliser (en fonction de l'en-tête HTTP Host:) pour laisser le service décider du site à présenter. Cela ne vous aidera pas, cependant, si vous voulez faire cela avec IIS et Apache simultanément.


pourriez-vous être clair, je ne comprenais pas l'hébergement virtuel. Comment puis-je faire l'hébergement virtuel?

4
  • Le hostsfichier est uniquement destiné à la résolution du nom d'hôte
  • Le navigateur , en l'absence de spécification directe du port: à savoir <hostname>:<port>, par défaut au port80

Scénario de problème typique

  1. les applications définissent généralement leurs serveurs sur la même adresse IP par défaut, 127.0.0.1alias localhost (définie dans le fichier hosts) .
  2. pour éviter la collision entre d'autres serveurs existants ou en cours d'exécution, l'application vous permet généralement de modifier le port, mais pas l'adresse IP.

    2a. Si vous pouviez changer l'adresse IP des serveurs en une autre dans l' espace d'adressage réservé au bouclage 127.0.0.0/8 , alors vous n'essaieriez probablement pas de définir des ports dans le fichier hosts.

Solution possible

Vous pouvez contourner ce problème en utilisant l' outil de mise en réseau inclus Windowsnetsh comme proxy de port.


Aperçu

example.app
 |                               <--browser defaults to port 80
 +--> example.app:80
       |                         <--Hostname resolution by Hosts File
       +--> 127.65.43.21:80      
             |                   <--Link by netsh Utility
             +--> 127.0.0.1:8081

Actions

  • Démarrez votre serveur sur localhost:8081
  • Ajoutez le "DNS local" dans le fichier hosts en tant que nouvelle ligne
    • 127.65.43.21 example.app
      • Toute adresse libre du réseau 127.0.0.0/8peut être utilisée.
      • Remarque: je suppose qu'il127.65.43.21:80n'est pas occupé par un autre service.
      • Vous pouvez vérifier avec netstat -a -n -p TCP | grep "LISTENING"
  • ajoutez la configuration réseau suivante avec l' utilitaire de commande netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Accédez au serveur à http://example.app

Remarques:
- Ces commandes / modifications de fichiers doivent être exécutées avec les droits d'administrateur

- netsh portproxy a besoin des bibliothèques ipv6 même uniquement pour utiliser v4tov4, généralement elles seront également incluses par défaut, sinon installez-les en utilisant la commande suivante:netsh interface ipv6 install


Vous pouvez voir l'entrée que vous avez ajoutée avec la commande:

netsh interface portproxy show v4tov4

Vous pouvez supprimer l'entrée avec la commande suivante:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Liens vers les ressources:

Remarque: cette réponse est une duplication de ma réponse discutée dans cette question / réponse similaire sur stackoverflow.


Ceci est une excellente réponse ... merci pour les liens vers les ressources!
Eric Hepperle - CodeSlayer2010

3

Non, tu ne peux pas. Si cela ne fonctionne pas, alors quelque chose d'autre ne va pas.

127.0.0.1 site.com
127.0.0.1 www.site.com

Je suppose que c'est pour une boîte de développement?

DNS résoudra site.com et www.site.com en localhost tant que vous ne faites pas quelque chose comme le proxy de vos requêtes DNS. Vous devriez probablement demander à ServerFault de l'aide pour la configuration du serveur Web, c'est le problème le plus probable.


Merci pour l'aide!!! Mais il n'y a aucun moyen ??? Alors, comment puis-je exécuter iis et apache en parallèle avec différents ports

Ils vont toujours à la même adresse, le port ne prend même pas en compte ce que les hôtes font. Le port fonctionnera toujours, vous pouvez les exécuter en parallèle.
Xorlev

3

Vous pouvez le faire avec Fiddler . Avec le script Fiddler , vous pouvez faire beaucoup de choses incroyables.

Si vous définissez des hôtes comme celui-ci

127.0.0.1     www.site1.com    # Port 80
127.0.0.1     www.sitetwo.com  # Port 8080

Ajoutez ceci dans CustomRules.js (pour ouvrir CustomRules.js , choisissez Personnaliser les règles dans le menu Règles de Fiddler )

// this method is already exist
static function OnBeforeRequest(oSession: Session) {  
    if (oSession.host.toLowerCase() == "www.sitetwo.com") 
        oSession.host = "www.sitetwo.com:8080";
    ...
}

Ensuite, Fiddler convertit l'hôte et vous vous connecterez au port 8080.


Connaissez-vous une alternative open source (james, owasp zap ou autre) pouvant être utilisée dans le même sens?
Marc.2377

1

Utilisez-vous les serveurs uniquement pour le développement local? Si c'est le cas, vous pouvez mettre votre Apache à écouter 127.0.0.2:80 et le rediriger avec le fichier hosts vers le nom de domaine que vous aimez.


0

Comme avec les autres réponses, le fichier hôte n'a pas d'informations sur le port, mais vous pouvez avoir une page qui redirige biaisée sur l'en-tête comme Apache ou IIS ferait pour l'hébergement virtuel basé sur le nom. Vérifiez l'en-tête et redirigez si nécessaire. Cependant, je ne vois pas vraiment la valeur de cela car vous réinventez la roue. Apache prend en charge l'hébergement virtuel basé sur les ports et je suppose que iis le fait.

Votre objectif est d'avoir une machine de développement avec les deux en cours d'exécution est-ce pour une situation de production.



-1

C'est ce que vous pouvez faire, cela ne serait utile que pour le développement local.

fichier hôtes:

  • 127.0.0.1 local.site1.com
  • 127.0.0.1 local.site2.com

Dans IIS, créez un nouveau site Web et pour local.site1.com et local.site2.com

Configuration d'IIS

  • Adresse IP: Tous non attribués (il utiliserait l'hôte local ou tout autre IP disponible)
  • Port: tout autre que déjà utilisé (81,82,83 et ainsi de suite. 80 est déjà utilisé par le site Web par défaut)
  • Nom d'hôte: laissez-le vide

Tu es prêt. Assurez-vous simplement que les ports que vous avez utilisés ne sont pas utilisés par un autre processus et sont également ouverts à partir d'un pare-feu, d'un antivirus, etc.

Après cela, vous pouvez utiliser les URL suivantes pour accéder aux sites Web à partir d'une machine locale ou d'un LAN.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.