¿Puedo configurar el archivo de hosts de Windows para usar la dirección IP más el puerto?


13

Quiero configurar el archivo de hosts de Windows para enviar solicitudes de host basadas en la dirección IP + puertos.

Por ejemplo:

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

Porque tengo Apache escuchando en el puerto 8080 e IIS en el puerto 80 (predeterminado).

Entonces, creo que la mejor manera de hacer esto es modificar el hostsarchivo. No está afectando nada. Ni recibo ningún error ni mensaje.


1
Obtendrá una mejor respuesta haciendo este tipo de preguntas en serverfault.com
Carl Norum

¿Por qué no puede simplemente lanzar site1.com (: 80) y sitetwo.com:8080 en su navegador?
Yvan

Respuestas:


11

No puedes El archivo de hosts es solo eso: hosts. Es el equivalente de un DNS "en corto circuito" dentro de su máquina local. DNS tampoco puede enviarte a puertos.

Para lograr lo que está tratando de hacer, debe configurar un alojamiento virtual en IIS o Apache, y usarlo (basado en el host HTTP: encabezado) para permitir que el servicio decida qué sitio presentar. Sin embargo, esto no lo ayudará si desea hacer esto con IIS y Apache simultáneamente.


podría ser claro, no entendía sobre el alojamiento virtual. ¿Como puedo hacer el alojamiento virtual?

4
  • El hostsarchivo es solo para resolución de nombre de host
  • El navegador , en ausencia de especificar directamente el puerto: es decir <hostname>:<port>, valores por defecto al puerto80

Escenario de problema típico

  1. Por lo general, las aplicaciones configuran sus servidores con la misma dirección IP predeterminada, 127.0.0.1también conocida localhost (definida en el archivo hosts) .
  2. Para evitar la colisión entre posiblemente otros servidores existentes / en ejecución, la aplicación generalmente le permite cambiar el puerto, pero no la dirección IP.

    2a. Si pudiera cambiar la dirección IP de los servidores a otra en el espacio de direcciones reservado de bucle invertido 127.0.0.0/8 , entonces probablemente no estaría intentando establecer puertos en el archivo de hosts.

Solución posible

Puede solucionar esto utilizando la herramienta de red incluida en Windowsnetsh como proxy de puerto.


Visión general

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

Comportamiento

  • Inicie su servidor en localhost:8081
  • Agregue el "DNS local" en el archivo de hosts como una nueva línea
    • 127.65.43.21 example.app
      • Se 127.0.0.0/8puede usar cualquier dirección libre en la red .
      • Nota: supongo que127.65.43.21:80no está ocupado por otro servicio.
      • Puedes consultar con netstat -a -n -p TCP | grep "LISTENING"
  • agregue la siguiente configuración de red con la utilidad de comando netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Acceda al servidor en http://example.app

Notas:
- Estas modificaciones de comandos / archivos deben ejecutarse con derechos de administrador

- netsh portproxy necesita bibliotecas de ipv6 incluso solo para usar v4tov4, por lo general, también se incluirán de forma predeterminada; de lo contrario, instálelas con el siguiente comando:netsh interface ipv6 install


Puede ver la entrada que ha agregado con el comando:

netsh interface portproxy show v4tov4

Puede eliminar la entrada con el siguiente comando:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Enlaces a recursos:

Nota: esta respuesta es una duplicación de mi respuesta discutida en esta pregunta / respuesta similar en stackoverflow.


Esta es una gran respuesta ... ¡gracias por los enlaces de recursos!
Eric Hepperle - CodeSlayer2010

3

No puedes. Si no funciona, entonces algo más va mal.

127.0.0.1 site.com
127.0.0.1 www.site.com

Supongo que esto es para una caja de desarrollo?

DNS resolverá site.com y www.site.com en localhost siempre que no esté haciendo algo como enviar sus consultas DNS. Probablemente debería pedir ayuda en la configuración del servidor web en ServerFault, ese es el problema más probable.


¡¡¡Gracias por la ayuda!!! Pero no hay manera ??? Entonces, ¿cómo puedo ejecutar iis y apache en paralelo con diferentes puertos

Todavía van a la misma dirección, el puerto ni siquiera tiene en cuenta lo que hace el host. El puerto seguirá funcionando, puede ejecutarlos en paralelo.
Xorlev

3

Puedes hacer eso con Fiddler . Con el script Fiddler , puedes hacer muchas cosas increíbles.

Si configuras hosts como este

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

Agregue esto en CustomRules.js (para abrir CustomRules.js , elija Personalizar reglas en el menú Reglas 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";
    ...
}

Luego, Fiddler convierte el host y se conectará al puerto 8080.


¿Conoce alguna alternativa de código abierto (james, owasp zap u otra) que pueda usarse para el mismo efecto?
Marc.2377

1

¿Está utilizando los servidores solo para el desarrollo local? Si es así, puede poner su Apache para escuchar 127.0.0.2:80 y redirigirlo con el archivo de hosts al nombre de dominio que desee.


0

Al igual que con las otras respuestas, el archivo host no tiene información de puerto, pero puede tener una página que redirija sesgada en el encabezado como apache o IIS harían para el alojamiento virtual basado en nombres. Verifique el encabezado y redirija según sea necesario. Sin embargo, realmente no veo el valor en esto ya que reinventa la rueda. Apache admite alojamiento virtual basado en puertos y supongo que iis lo hace.

Su objetivo es tener una máquina de desarrollo con ambos funcionando, esto es para una situación de producción.



-1

Esto es lo que puede hacer, sería útil solo para el desarrollo local.

archivo de hosts:

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

En IIS, cree un nuevo sitio web y local.site1.com y local.site2.com

Configuración de IIS

  • Dirección IP: todos sin asignar (usaría un host local o cualquier otra IP disponible)
  • Puerto: cualquier otro que no esté en uso (81,82,83 y así sucesivamente. 80 ya está en uso por el sitio web predeterminado)
  • Nombre del host: déjelo en blanco

Tú eres bueno para irte. Solo asegúrese de que los puertos que ha utilizado no estén en uso por algún otro proceso y que también estén abiertos desde firewall, antivirus, etc.

Después de esto, puede usar las siguientes URL para acceder a sitios web desde máquinas locales o desde LAN.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.