Lokalhost über Tunneling (mit ngrok) dem Internet aussetzen: HTTP-Fehler 400: Fehlerhafte Anforderung; Ungültiger Hostname


210

In früheren Versionen der Frage gibt es Folgendes : Durchsuchen Sie die Website mit der IP-Adresse und nicht mit localhost , in der ziemlich genau beschrieben wird, was ich bisher getan habe ... Die lokale IP funktioniert. Dann habe ich ngrok gefunden und anscheinend muss ich mich nicht über die IP verbinden.


Ich versuche, meine auf localhost ausgeführte Website dem Internet auszusetzen. Ich habe ein Tool gefunden, das dies ermöglicht: ngrok.

Wenn Sie die Website in Visual Studio ausführen, wird die Website unter localhost / port # gestartet. Ich führe den Befehl "ngrok http port #" in der Befehlszeile aus. Alles scheint gut anzufangen. Ich generiere ein paar URLs und die ngrok-Inspektions-URL (localhost: 4040) funktioniert.

Das einzige Problem ist, dass beim Aufrufen der generierten URLs der HTTP-Fehler 400 angezeigt wird: Ungültige Hostnummer der ungültigen Anforderung. Dies ist ein anderer Fehler als wenn ich "ngrok http falseport #" ausführe. Dies ist ein Host, der nicht gefunden wurde. Ich denke also, dass etwas Gutes passiert. Ich kann einfach nicht sagen was ...

Gibt es einen Schritt, den ich vermisse, um meine Website über den Tunneldienst dem Internet zugänglich zu machen? Wenn ja, kann ich es nicht in der ngrok-Dokumentation finden.

Antworten:


564

Beheben Sie dieses Problem mit ngrok. Mit den Worten von inhrehrevable werden einige Anwendungen wütend, wenn sie einen anderen Host-Header als erwartet sehen.

Das Ausführen des folgenden Befehls sollte das Problem beheben:

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

3
Vielen Dank. Ich habe zuvor die hier beschriebenen Anweisungen von Devin Rader befolgt, aber dies macht dies jetzt einfacher. twilio.com/blog/2014/03/…
sobelito

Diese Lösung funktioniert auch, wenn Sie Probleme haben, der applicationHost.config (vs2015 / iisexpress) eine weitere Bindung hinzuzufügen. Sie müssen keine hinzufügen, verwenden Sie einfach diese Antwort. Wenn Sie für eine benutzerdefinierte Domain bezahlt haben, um zu vermeiden, dass die Adresse jedes Mal geändert wird, fügen Sie einfach -subdomain = mysubdomain zur obigen Antwort hinzu.
Trevorc

4
Kann das nicht genug bewerten! Bei all den komplexen und fehlerhaften Anweisungen, die es gibt, um Ihre IISExpress-Bindungen und Netzwerkeinstellungen zu hacken, wird alles wie ein heißes Messer durch Butter geschnitten.
Neil Laslett

19
Wenn local auf https anstelle von http ist, funktioniert diese Variante von oben:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh

1
Wow, ich habe fast 2 Stunden damit verbracht, dies herauszufinden. Mein einziges Problem war, dass ich https im -host-Header hinzugefügt habe. wie ngrok http https://localhost:44392 -host-header="https://localhost:44392" folgt : Das Entfernen von https: // aus dem Parameter -host-header hat mein Problem gelöst. Vielen Dank
Dave

48

Der folgende Befehl behebt das Problem

ngrok http -host-header=localhost 8080

2
Wenn Sie ASP.NET Core verwenden, sollten Sie dies auch app.UseHttpsRedirection()in Ihrer Startup-Klasse auskommentieren, um eine vorübergehende Umleitung zu vermeiden.
Mark G

39

Das hat bei mir nicht funktioniert. Sie könnten Folgendes tun:

Für IIS Express

In VS 2015: Wechseln Sie zu dem .vs\config\applicationhost.configOrdner in Ihrem Projekt

In VS 2013 und früher: Gehen Sie zu %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Finden Sie die Bindung, die sagt:

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

Für mich war es ein Projekt, das auf Port 5219 lief

ändere es auf

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

IIS Express akzeptiert jetzt alle eingehenden Verbindungen an diesem Port.

Nachteil: Sie müssen IIS Express als Administrator ausführen.

oder Sie könnten den Host-Header in Ngrok neu schreiben:

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

Dies ist der richtige Weg, um den Header in ngrok neu zu schreiben. Keine der anderen Antworten funktionierte. IIS wurde bereits auf einen beliebigen Hostnamen eingestellt, aber ngrok hat bei Verwendung von -host-header = "localhost: 8892" "Hostname ungültig" zurückgegeben. Diese Umschreibversion funktionierte jedoch sofort.
Tyeth

6

Dafür httpsfunktioniert:

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


0

Das Einfachste für mich war die Verwendung von iisexpress-proxy + ngrok.

Zuerst installiere ich iisexpress-proxyglobal mit npm

npm install -g iisexpress-proxy

Dann vertrete ich meinen lokalen Host damit. Angenommen, meine Website wird ausgeführt 3003.

iisexpress-proxy 3003 to 12345Wo 12345ist der neue http-Port, für den ich einen Proxy erstellen möchte?

Dann kann ich ngrok drauf laufen lassen.

./ngrok.exe http 12345

Es funktioniert einfach! 😃

Aber ich denke es funktioniert nur mit http. Im Moment teste ich nicht https, aber selbst wenn es funktioniert, ist es normalerweise wie immer viel Arbeit.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.