Esposizione di localhost a Internet tramite tunneling (utilizzando ngrok): errore HTTP 400: richiesta errata; hostname non valido


216

Dalle versioni precedenti della domanda, c'è questo: Sfoglia il sito Web con indirizzo IP piuttosto che localhost , che delinea più o meno quello che ho fatto finora ... Ho l'IP locale funzionante. Poi ho trovato ngrok e, a quanto pare, non ho bisogno di connettermi tramite IP.


Quello che sto cercando di fare è esporre il mio sito Web in esecuzione su localhost a Internet. Ho trovato uno strumento che farà questo: ngrok.

Eseguendo il sito Web in Visual Studio, il sito Web viene avviato su localhost / port #. Eseguo il comando "ngrok http port #" nella riga di comando. Tutto sembra avviarsi bene. Genero un paio di URL e l'URL di ispezione di ngrok (localhost: 4040) funziona.

L'unico problema è che quando vado agli URL generati, ricevo un errore HTTP 400: richiesta errata nome host non valido. Questo è un errore diverso da quando eseguo "ngrok http wrongport #", che è un errore di host non trovato ... quindi penso che stia succedendo qualcosa di buono. Non riesco proprio a dire cosa ...

C'è un passaggio che mi manca nell'esposizione del mio sito a Internet tramite il servizio di tunneling? Se c'è, non riesco a trovarlo nella documentazione di ngrok.

Risposte:


594

Risoluzione dei problemi con ngrok. Nelle parole di inconshrevable, alcune applicazioni si arrabbiano quando vedono un'intestazione host diversa dal previsto.

L'esecuzione del seguente comando dovrebbe risolvere il problema:

ngrok http [port] -host-header="localhost:[port]"

3
Grazie. In precedenza ho seguito le istruzioni di Devin Rader dettagliate qui, ma ora questo rende questo modo più semplice. twilio.com/blog/2014/03/…
sobelito

Questa soluzione funziona anche se hai problemi ad aggiungere un'altra associazione a applicationHost.config (vs2015 / iisexpress). Non è necessario aggiungerne uno, basta usare questa risposta. Infine, se hai pagato per un dominio personalizzato per evitare di cambiare l'indirizzo ogni volta, aggiungi -subdomain = mysubdomain alla risposta sopra.
trevorc

4
Non posso votare abbastanza! Per tutte le istruzioni complesse e buggate disponibili per hackerare i collegamenti IISExpress e le impostazioni di rete, questo taglia tutto come un coltello caldo nel burro.
Neil Laslett

21
Quando local è su https invece che su http, questa variazione di cui sopra funziona:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh

1
wow, ho perso quasi 2 ore per capire questo. il mio unico problema era che stavo aggiungendo https in -host-header. in questo modo: la ngrok http https://localhost:44392 -host-header="https://localhost:44392" rimozione di https: // dal parametro -host-header ha risolto il mio problema. Grazie
Dave,

54

Il seguente comando risolverà il problema

ngrok http -host-header=localhost 8080

4
Se si utilizza ASP.NET Core, è necessario aggiungere un commento anche app.UseHttpsRedirection()alla classe di avvio per evitare un reindirizzamento temporaneo 307.
Mark G

40

Questo non ha funzionato per me. potresti fare quanto segue:

Per IIS Express

In VS 2015: vai alla .vs\config\applicationhost.configcartella nel tuo progetto

In VS 2013 e versioni precedenti: vai a %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Trova la rilegatura che dice:

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

Per me era un progetto in esecuzione sulla porta 5219

cambiarlo in

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

IIS Express accetterà ora tutte le connessioni in ingresso su quella porta.

Svantaggio: è necessario eseguire IIS Express come amministratore.

oppure potresti riscrivere l'intestazione host in Ngrok:

ngrok.exe http -host-header=rewrite localhost:5219

Questo è il modo corretto per riscrivere l'intestazione in ngrok. Nessuna delle altre risposte ha funzionato. Ho già IIS impostato su qualsiasi nome host, ma ngrok ha restituito "nome host non valido" quando si utilizzava -host-header = "localhost: 8892" tuttavia questa versione di riscrittura ha funzionato immediatamente.
Tyeth

10

Per httpsquesto funziona:

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


0

La cosa più semplice per me è stata usare iisexpress-proxy + ngrok.

Per prima cosa installo iisexpress-proxyglobalmente con npm

npm install -g iisexpress-proxy

Quindi ho proxy il mio localhost con esso. Supponiamo ad esempio che il mio sito sia in esecuzione 3003.

iisexpress-proxy 3003 to 12345dov'è 12345la nuova porta http a cui desidero eseguire il proxy.

Quindi posso eseguire ngrok su di esso.

./ngrok.exe http 12345

Funziona e basta! 😃

Ma penso che funzioni solo con http. In questo momento non uso httpsper testare, ma anche se funziona, di solito è un sacco di lavoro come sempre.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.