Usando el número de puerto en el archivo host de Windows

190

Después de instalar TeamViewer, he cambiado el puerto del servidor wampserver a 8080, por lo que la dirección es http://localhost:8080.

Para el archivo host ubicado en C: \ WINDOWS \ system32 \ drivers \ etc \, también he realizado el cambio como se muestra a continuación

ANTES DE
127.0.0.1 www.example.com

DESPUÉS
127.0.0.1:8080 www.example.com

Cuando accedo a www.example.com, no se redirige a mi servidor de agua, ¿cómo puedo solucionarlo?

Charles Yeung
fuente
Necesita un servidor HTTP NGNIX o Apache como servidor proxy para reenviar solicitudes HTTP a la aplicación apropiada -> que escucha un puerto en particular (o hágalo con CNAME que proporciona la empresa de alojamiento)
Musa
¿Quizás revisar esto y cambiar la respuesta aceptada a la respuesta netsh? Terminé aquí cuando intentaba descubrir cómo asignar dominios .test a mis imágenes de docker localmente en Windows 10, ¡y la respuesta netsh funcionó de maravilla!
Jereme
La pregunta es: ¿está intentando redirigir un host completo a un solo puerto (?!) O solo el puerto 80 (de ese host) al puerto 8080? La mayoría de las respuestas aquí están sobre cómo redirigir (o al menos intentar redirigir ... ;-) puerto 80 de un host al puerto 8080 de su "localhost". Ejemplo: ¿ https://www.example.comdebe ir al puerto 8080? o al 443 predeterminado (como debería) ¿Qué quiere decir: desea que un https también sea redirigido al puerto 8080 de su host local? ¿O no te importa en absoluto a dónde se redirigirá esto?
ilias iliadis

Respuestas:

194

El hostsarchivo es solo para la resolución de nombres de host (en Windows, así como en sistemas similares a Unix). No puede poner números de puerto allí, y no hay forma de hacer lo que quiere con la configuración genérica de nivel de sistema operativo: el navegador es lo que selecciona el puerto para elegir.

Así que usa marcadores o algo así.
(Algunos firewall / software de enrutamiento pueden permitir la redirección de puertos de salida, pero eso no parece una opción atractiva para esto).

Estera
fuente
66
el uso de marcadores, nos puede llevar a un enlace o alguna documentación o tutoriales sobre esto
Adham dwikat
@Jereme: deberías decirle eso al OP, no puedo hacer nada al respecto
Mat
1
@ Mat Eso estaría bien, ¿verdad? Solo quiero que otros que ven esto sepan desplazarse un poco hacia abajo y darle una oportunidad. Terminé aquí cuando intentaba descubrir cómo asignar dominios .test a mis imágenes de acoplador localmente en Windows 10, ¡y la respuesta netsh funcionó de maravilla!
Jereme
169

Lo que desea puede lograrse modificando el archivo de hosts a través de la aplicación Fiddler 2 .

Sigue estos pasos:

  1. Instalar Fiddler2

  2. Navegue al menú Fiddler2: - Herramientas > HOSTS .. (Haga clic para seleccionar)

  3. Agregue una línea como esta: -

    localhost:8080 www.mydomainname.com

  4. Guarde el archivo y luego finalice la compra www.mydomainname.comen el navegador.

Rajat Gupta
fuente
34
Esta es una mala solución. Debe tener Fiddler ejecutándose en todo momento.
James Huckabone
48
@JamesHuckabone: ¿Tienes una solución mejor? nos encantaría eso!
Rajat Gupta
16
Recibo Error 400 Bad Request cuando uso este método
Sam
3
Esto ya no parece funcionar. Probé con fiddler2 y fiddler4
basher
1
@basher U todavía puede escribirlo en Fiddler's Rules.js con seguridad. La funcionalidad de los hosts en Fiddler NO son los archivos de hosts de Windows, es una recreación de esos nombres para facilitar su trabajo. Es como los Autorespondedores, son solo un subconjunto de lo que puedes hacer escribiendo scripts directamente. Si no puede hacer algo con los menús, escríbalo.
m3nda
157

Logré lograr esto usando la herramienta de red incluida de Windowsnetsh .

Como Mat señala: el archivo de hosts es solo para la resolución de nombres de host, por lo que una combinación de los dos fue el truco para mí.

Ejemplo


Visión general

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

Comportamiento

  • Comencé mi servidor en localhost:8081
  • Agregué mi "DNS local" en el archivo de hosts como una nueva línea
    • 127.65.43.21 example.app
      • Se puede usar cualquier dirección libre en la red 127.0.0.0/8( 127.x.x.x).
      • Nota: supongo que127.65.43.21:80no está ocupado por otro servicio.
      • Puedes consultar con netstat -a -n -p TCP | grep "LISTENING"
  • Se agregó 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
  • Ahora puedo acceder 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:

Pau Coma Ramirez
fuente
Esto no está funcionando para mí. En el enlace que mostraste, dice "Tampoco puedes usar 127.0.0.1 como dirección de conexión".
Don Box
@DonBox: Si proporciona más detalles sobre su configuración, tal vez podría ayudarlo. El uso de 127.0.0.1 como dirección de conexión es básicamente el requisito en el escenario del caso presentado porque el servidor se inició en localhost , al igual que muchos otros programas por defecto. Si puede comenzar en otra dirección, no necesita todo el mecanismo de reenvío de puertos, solo necesita modificar el archivo de hosts ... Tal vez, como se detalla aquí , no tiene instalado el protocolo ipv6 : use el siguiente comando para instalar ellos:netsh interface ipv6 install
Pau Coma Ramirez
13
Esta debería ser la respuesta aceptada porque las herramientas ya están instaladas en mi instalación base de Windows 10 y esto hace exactamente lo que necesitaba. Estaba considerando instalar apache y mod_proxy pero esta es una solución mucho mejor.
Max Young
1
No funciona para mi Netsh parece reenviar la dirección, pero no el puerto.
steph643
2
Yo uso el portainer de Docker. Utiliza localhost en el puerto 9000. Modificando el comando anterior, uso portainer.local sin tener que especificar un puerto en la dirección. Primero, agrego 127.0.0.1como la dirección para que coincida portainer.localen mi archivo de hosts. Luego ejecuto: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 pulsa la tecla Intro en cmd / powershell para ejecutarlo. Después de esto, salga de netsh escribiendo exit. En el navegador, escribir http://portainer.localahora me lleva a donde http://localhost:9000solía hacerlo. Esto funcionó como un encanto para mí.
EffectiX
14

Fiddler2 -> Reglas -> Reglas personalizadas

luego encuentre la función OnBeforeRequest en poner en el siguiente script al final:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}
Sergey
fuente
De hecho, Fiddler es mucho más potente que esperar no ejecutar un servidor web en el puerto 80, o incluso Skype ... En Windows funciona mejor que en Linux con Mono, al menos las características de captura, porque Linux no usa Inet de CLRL. Esta es una mejor manera de hacer cosas en Fiddler, porque es exportable con 1 archivo.
m3nda
3

La forma más simple es usar Ergo como su proxy inverso: https://github.com/cristianoliveira/ergo

Usted configura sus servicios y su IP: PORT y ergo lo enruta por usted :).

Puede lograr lo mismo con nginxo apachepero deberá configurarlos.

Cristian Oliveira
fuente
3
Ergo parece ser un proyecto en el que trabajó (basado en el nombre de usuario). Si ese es el caso, debe indicar más explícitamente que está afiliado a ese producto. Vea esta respuesta , así como las otras respuestas.
Frank Tan
2

-Puede usar cualquier dirección libre en la red 127.0.0.0/8, en mi caso necesitaba esto para el matraz de Python y esto es lo que he hecho: agregue esta línea en el archivo de hosts (puede encontrar que es Windows en: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • Asegúrese de que el puerto sea el puerto predeterminado "80" en mi caso, esto es lo que hay en el matraz de Python: app.run("127.0.0.5","80")

  • ahora ejecuta tu código y navega flask.dev

Belal Mohammed
fuente
1

Si lo que está sucediendo es que tiene otro servidor ejecutándose en localhost y desea darle a este nuevo servidor un nombre de host local diferente como http://teamviewer/

Creo que lo que realmente está buscando es la funcionalidad de Virtual Hosts. Yo uso Apache, así que no sé cómo otros demonios web soportan esto. Tal vez se llama Alias. Aquí está la documentación de Apache:

Ejemplos de hosts virtuales de Apache

DogBot
fuente
1

Usar netsh con connectaddress = 127.0.0.1 no funcionó para mí.

A pesar de buscar en todas partes en Internet, no pude encontrar la solución que resolvió esto para mí, que era usar connectaddress = 127.xxx (es decir, cualquier dirección ipv4 127. pero no 127.0.0.1), ya que parece vincularse de nuevo a localhost lo mismo pero sin la restricción, para que el loopback funcione en netsh.

aards
fuente
Le sugiero que elimine el primer y el último párrafo. Simplemente diga que las soluciones existentes no funcionaron y que encontró otra. De lo contrario, su respuesta se parece mucho a un comentario, por lo que las personas pueden marcarla como "no es una respuesta" y se eliminará.
StaceyGirl
0

Necesita un servidor HTTP NGNIX o Apache como servidor proxy para reenviar solicitudes HTTP a la aplicación apropiada -> que escucha un puerto en particular (o hágalo con CNAME que proporciona la empresa de alojamiento). Es la solución más poderosa y esta es solo una manera realmente fácil de seguir agregando nuevos subdominios, o agregar nuevos dominios automáticamente cuando los registros DNS apuntan al servidor.

Musa
fuente