Udostępnianie lokalnego hosta w Internecie przez tunelowanie (przy użyciu ngrok): Błąd HTTP 400: złe żądanie; nieprawidłowa nazwa hosta


210

W poprzednich wersjach pytania jest to: Przeglądaj stronę internetową z adresem IP zamiast localhost , która opisuje w skrócie to, co do tej pory zrobiłem ... Mam działający lokalny adres IP. Potem znalazłem ngrok i najwyraźniej nie muszę się łączyć przez IP.


To, co próbuję zrobić, to udostępnić internet mojej witrynie działającej na localhost. Znalazłem narzędzie, które to zrobi: ngrok.

Witryna uruchomiona w studio wizualnym uruchamia się na localhost / port #. W wierszu poleceń uruchamiam polecenie „ngrok http port #”. Wszystko zaczyna się dobrze. Generuję kilka adresów URL i działa adres URL inspekcji ngrok (localhost: 4040).

Jedynym problemem jest to, że kiedy przechodzę do wygenerowanych adresów URL, pojawia się błąd HTTP 400: złe żądanie niepoprawna nazwa hosta. Jest to inny błąd niż wtedy, gdy uruchamiam „ngrok http falseport #”, który jest błędem, że host nie został znaleziony ... więc myślę, że dzieje się coś dobrego. Po prostu nie mogę powiedzieć, co ...

Czy brakuje mi kroku w udostępnianiu mojej witryny w Internecie za pośrednictwem usługi tunelowania? Jeśli tak, nie mogę go znaleźć w dokumentacji ngrok.

Odpowiedzi:


564

Rozwiąż problem z ngrok. Innymi słowy, niektóre aplikacje są wściekłe, gdy widzą inny nagłówek hosta niż oczekiwano.

Uruchomienie następującego polecenia powinno rozwiązać problem:

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

3
Dzięki. Wcześniej postępowałem zgodnie z instrukcjami Devina Radera tutaj, ale teraz to ułatwia. twilio.com/blog/2014/03/…
sobelito,

To rozwiązanie działa także w przypadku problemów z dodaniem kolejnego wiązania do applicationHost.config (vs2015 / iisexpress). Nie musisz go dodawać, użyj tej odpowiedzi. Na koniec, jeśli zapłaciłeś za domenę niestandardową, aby uniknąć zmiany adresu za każdym razem, po prostu dodaj -subdomain = mysubdomain do powyższej odpowiedzi.
trevorc,

4
Nie mogę głosować wystarczająco! W przypadku wszystkich złożonych i błędnych instrukcji włamywania się do powiązań IISExpress i ustawień sieciowych, przecina to wszystko jak gorący nóż przez masło.
Neil Laslett

19
Gdy lokalny jest na https zamiast http, to powyższa odmiana działa:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh

1
wow, zmarnowałem prawie 2 godziny na rozgryzienie tego. moim jedynym problemem było to, że dodawałem https w -host-header. w ten sposób: ngrok http https://localhost:44392 -host-header="https://localhost:44392" usunięcie https: // z parametru -host-header rozwiązało mój problem. Dzięki
Dave

48

Następujące polecenie naprawi problem

ngrok http -host-header=localhost 8080

2
Jeśli używasz programu ASP.NET Core, powinieneś również komentować app.UseHttpsRedirection()w klasie Autostart, aby uniknąć tymczasowego przekierowania 307.
Mark G

39

To mi nie zadziałało. możesz wykonać następujące czynności:

Dla IIS Express

W VS 2015: przejdź do .vs\config\applicationhost.configfolderu w swoim projekcie

W VS 2013 i wcześniejszych: Idź do %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Znajdź powiązanie, które mówi:

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

Dla mnie był to projekt działający na porcie 5219

zmień na

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

IIS Express akceptuje teraz wszystkie połączenia przychodzące na tym porcie.

Wada: musisz uruchomić IIS Express jako administrator.

lub możesz przepisać nagłówek hosta w Ngrok:

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

To jest poprawny sposób na przepisanie nagłówka w ngrok. Żadna z pozostałych odpowiedzi nie zadziałała. Już ustawiono IIS na dowolną nazwę hosta, ale ngrok zwrócił „nazwa hosta niepoprawna” przy użyciu -host-header = „localhost: 8892”, jednak ta wersja przepisywania zadziałała natychmiast.
Tyeth

6

Do httpstego działa:

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


0

Najprostszą rzeczą było dla mnie użycie iisexpress-proxy + ngrok.

Najpierw instaluję iisexpress-proxyglobalnie za pomocą npm

npm install -g iisexpress-proxy

Następnie pośredniczę przy tym moim lokalnym hostem. Powiedzmy na przykład, że moja strona działa 3003.

iisexpress-proxy 3003 to 12345 gdzie 12345 jest nowy port http, do którego chcę proxy.

Następnie mogę uruchomić na nim ngrok.

./ngrok.exe http 12345

To po prostu działa! 😃

Ale myślę, że to działa tylko z http. W tej chwili nie używam httpsdo testowania, ale nawet jeśli działa, zwykle jest to dużo pracy, jak zawsze.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.