Exponer localhost a Internet a través de túneles (usando ngrok): error HTTP 400: solicitud incorrecta; Nombre de host no válido

210

De las versiones anteriores de la pregunta, existe esto: navegar por el sitio web con la dirección IP en lugar de localhost , que describe más o menos lo que he hecho hasta ahora ... Tengo la IP local funcionando. Luego encontré ngrok, y aparentemente no necesito conectarme a través de IP.


Lo que intento hacer es exponer mi sitio web que se ejecuta en localhost a Internet. Encontré una herramienta que hará esto: ngrok.

Al ejecutar el sitio web en Visual Studio, el sitio web se inicia en localhost / port #. Ejecuto el comando "ngrok http port #" en la línea de comando. Todo parece comenzar bien. Genero un par de URL, y la url de inspección ngrok (localhost: 4040) funciona.

El único problema es que cuando voy a las URL generadas, recibo un error HTTP 400: solicitud incorrecta nombre de host inválido. Este es un error diferente que cuando ejecuto "ngrok http wrongport #", que es un error de host no encontrado ... así que creo que algo bueno está sucediendo. Simplemente no puedo decir qué ...

¿Hay algún paso que me falta para exponer mi sitio a Internet a través del servicio de túnel? Si lo hay, no puedo encontrarlo en la documentación de ngrok.

Christopher
fuente

Respuestas:

564

Solucione este problema con ngrok. En palabras de inconcebible, algunas aplicaciones se enojan cuando ven un encabezado de host diferente al esperado.

Ejecutar el siguiente comando debería solucionar el problema:

ngrok http [port] -host-header="localhost:[port]"
Christopher
fuente
3
Gracias. Anteriormente seguí las instrucciones de Devin Rader detalladas aquí, pero esto ahora hace que esto sea más fácil. twilio.com/blog/2014/03/…
sobelito
Esta solución también funciona si tiene problemas para agregar otro enlace a la aplicación Host.config (vs2015 / iisexpress). No necesita agregar uno, solo use esta respuesta. Finalmente, si pagó por un dominio personalizado para evitar cambiar la dirección cada vez, simplemente agregue -subdomain = mysubdomain a la respuesta anterior.
trevorc
44
No puedo votar esto lo suficiente! Para todas las instrucciones complejas y con errores para piratear sus enlaces IISExpress y la configuración de red, esto lo atraviesa todo como un cuchillo caliente en mantequilla.
Neil Laslett el
19
Cuando local está en https en lugar de http, esta variación de lo anterior funciona:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh
1
wow, perdí casi 2 horas para resolver esto. mi único problema fue que estaba agregando https en -host-header. así: ngrok http https://localhost:44392 -host-header="https://localhost:44392" eliminar https: // del parámetro -host-header resolvió mi problema. Gracias
Dave
48

El siguiente comando solucionará el problema

ngrok http -host-header=localhost 8080
Sathish
fuente
2
Si usa ASP.NET Core, también debe comentar app.UseHttpsRedirection()en su clase de inicio para evitar un redireccionamiento temporal 307.
Mark G
39

Esto no funcionó para mí. podrías hacer lo siguiente:

Para IIS Express

En VS 2015: vaya a la .vs\config\applicationhost.configcarpeta en su proyecto

En VS 2013 y versiones anteriores: vaya a %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Encuentra el enlace que dice:

<binding protocol="http" bindingInformation="*:5219:localhost" />

Para mí fue un proyecto que se ejecuta en el puerto 5219

cámbielo a

  <binding protocol="http" bindingInformation="*:5219:" />

IIS Express ahora aceptará todas las conexiones entrantes en ese puerto.

Desventaja: necesita ejecutar IIS Express como administrador.

o podría reescribir el encabezado del host en Ngrok:

ngrok.exe http -host-header=rewrite localhost:5219
Stefanvds
fuente
Esta es la forma correcta de reescribir el encabezado en ngrok. Ninguna de las otras respuestas funcionó. Ya tengo IIS configurado en cualquier nombre de host, pero ngrok devolvió "hostname inválido" cuando usó -host-header = "localhost: 8892", sin embargo, esta versión de reescritura funcionó de inmediato.
Tyeth
6

Para httpsesto funciona:

ngrok http https://localhost:<PORT> -host-header="localhost:<PORT>"

Joel Wiklund
fuente
0

Lo más simple para mí fue usar iisexpress-proxy + ngrok.

Primero instalo iisexpress-proxyglobalmente con npm

npm install -g iisexpress-proxy

Luego delego mi host local con él. Digamos, por ejemplo, que mi sitio se está ejecutando 3003.

iisexpress-proxy 3003 to 12345¿Dónde 12345está el nuevo puerto http que quiero proxy?

Entonces puedo ejecutar ngrok en él.

./ngrok.exe http 12345

¡Simplemente funciona! 😃

Pero creo que solo funciona con http. En este momento no httpssuelo hacer pruebas, pero incluso si funciona, generalmente es mucho trabajo como siempre.

Reuel Ribeiro
fuente
-7

Pasos.

  1. Ejecute el comando en su consola desde el directorio ngrok.exe. ngrok http port, es decir, ngrok http 80 https://www.screencast.com/t/oyuEPlR6Z Set

  2. URL de Ngrok a su aplicación.

Creará un túnel para su aplicación.

Gracias .

Ravinder Rana
fuente